横列式双旋翼两轴飞行器倾转旋翼simulink simscape仿真MATLAB 内环

横列式双旋翼两轴飞行器倾转旋翼simulink simscape仿真MATLAB 内环 外环pid控制

最近在实验室折腾横列式双旋翼飞行器仿真,这玩意儿跟传统四旋翼完全不是一个路数。两个螺旋桨横向排列不说,还得实现旋翼倾转控制,调试的时候差点没把键盘砸了。今儿就手把手教你怎么在Simulink里搭模型,顺带聊聊双环PID怎么玩出花。

先上硬菜------模型搭建。在Simscape Multibody里搞机械结构时,千万别傻乎乎用默认的旋转关节。咱得给每个旋翼加个倾斜自由度,具体操作看这段配置:

matlab 复制代码
smexportrigidbody('rotor_assembly',...
    'JointType','revolute',...
    'Axis',[0 1 0],...  % Y轴旋转实现倾转
    'Parent','base_link');

这个Y轴旋转关节就是让旋翼能前后摆动的关键,注意坐标系对齐别搞反了。动力学方程建议直接用Simscape自带的模块,比手推方程靠谱多了,毕竟这货要考虑陀螺力矩耦合效应。

内环控制才是重头戏。咱在Simulink里直接拖PID模块不香吗?但双旋翼的横滚-偏航耦合得特殊处理。看这个暴力调参法:

matlab 复制代码
inner_pid = pid(8.2, 0.05, 0.8, 0.01);  % 内环角度控制
set_param('model/Inner_PID','P','8.2','I','0.05','D','0.8');

参数不是乱填的,8.2的P值能快速响应姿态变化,0.8的D值专治电机延迟带来的震荡。注意这里采样时间设了0.01秒,比外环快5倍,毕竟姿态控制慢了直接炸机。

外环位置控制更刺激。这里有个骚操作------把倾转角度当控制量喂给内环。代码里这么实现:

matlab 复制代码
function tilt_angle = outer_controller(pos_error)
    persistent integral;
    if isempty(integral)
        integral = 0;
    end
    k_outer = [0.6, 0.02, 1.2];
    integral = integral + pos_error * 0.02;
    tilt_angle = k_outer*[pos_error; integral; derivative(pos_error)];
end

这个自定义函数模块处理XY平面位置误差,积分项加了抗饱和处理。注意外环PID的I值只有0.02,大了容易引发旋翼过冲。

调参时切记先锁死外环,单独调内环。有个坑得提醒:Simscape的物理引擎步长要和控制器步长对齐,不然会出现迷之震荡。建议用变步长求解器,最大步长别超过0.05秒。

最后上点干货------仿真结果怎么看?在Animation窗口看旋翼摆动幅度是否平滑,Scope里重点关注横滚角速度曲线。正常应该像心跳图一样有规律波动,要是出现锯齿状,赶紧检查陀螺力矩补偿模块。

这破项目调了俩礼拜,最后发现是电机模型里的库伦摩擦参数没设对。建议各位在搭模型时,先把所有摩擦系数设为零,等控制律调通了再慢慢加非线性因素,保准能少掉几根头发。

相关推荐
绝缘体11 天前
如何使用外卖霸王餐api接口?
大数据·搜索引擎·微信·pygame
Want5951 天前
Python新春烟花代码
开发语言·python·pygame
封奚泽优4 天前
化学配对记忆游戏:用Python和Pygame打造趣味化学学习工具
python·pygame
上半场结束,中场已休息,下半场ing9 天前
2222222
pygame
hhcgchpspk10 天前
python实现音频淡入淡出功能
python·程序人生·音视频·pygame
叫我:松哥12 天前
基于python强化学习的自主迷宫求解,集成迷宫生成、智能体训练、模型评估等
开发语言·人工智能·python·机器学习·pygame
薛定谔的猫喵喵17 天前
基于Python+PyGame实现的一款功能完整的数独游戏,支持多难度选择、实时验证、提示系统、成绩记录,并采用多线程优化加载体验。(文末附全部代码)
python·游戏·pygame
玖疯子18 天前
TCP/IP协议栈深度解析技术文章大纲
python·scikit-learn·pyqt·pygame
HarmonLTS20 天前
Pygame动画制作进阶(可直接运行,附核心原理)
python·pygame
百锦再20 天前
国产数据库现状与技术演进
数据库·python·plotly·flask·virtualenv·pygame·tornado