横列式双旋翼两轴飞行器的倾转旋翼仿真与PID控制在Simulink与Simscape中的MAT...

张开发
2026/4/8 17:42:34 15 分钟阅读

分享文章

横列式双旋翼两轴飞行器的倾转旋翼仿真与PID控制在Simulink与Simscape中的MAT...
横列式双旋翼两轴飞行器倾转旋翼simulink simscape仿真MATLAB 内环 外环pid控制最近在实验室折腾横列式双旋翼飞行器仿真这玩意儿跟传统四旋翼完全不是一个路数。两个螺旋桨横向排列不说还得实现旋翼倾转控制调试的时候差点没把键盘砸了。今儿就手把手教你怎么在Simulink里搭模型顺带聊聊双环PID怎么玩出花。先上硬菜——模型搭建。在Simscape Multibody里搞机械结构时千万别傻乎乎用默认的旋转关节。咱得给每个旋翼加个倾斜自由度具体操作看这段配置smexportrigidbody(rotor_assembly,... JointType,revolute,... Axis,[0 1 0],... % Y轴旋转实现倾转 Parent,base_link);这个Y轴旋转关节就是让旋翼能前后摆动的关键注意坐标系对齐别搞反了。动力学方程建议直接用Simscape自带的模块比手推方程靠谱多了毕竟这货要考虑陀螺力矩耦合效应。内环控制才是重头戏。咱在Simulink里直接拖PID模块不香吗但双旋翼的横滚-偏航耦合得特殊处理。看这个暴力调参法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倍毕竟姿态控制慢了直接炸机。横列式双旋翼两轴飞行器倾转旋翼simulink simscape仿真MATLAB 内环 外环pid控制外环位置控制更刺激。这里有个骚操作——把倾转角度当控制量喂给内环。代码里这么实现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里重点关注横滚角速度曲线。正常应该像心跳图一样有规律波动要是出现锯齿状赶紧检查陀螺力矩补偿模块。这破项目调了俩礼拜最后发现是电机模型里的库伦摩擦参数没设对。建议各位在搭模型时先把所有摩擦系数设为零等控制律调通了再慢慢加非线性因素保准能少掉几根头发。

更多文章