四旋翼飞行器模型预测控制仿真带PPT 四旋翼无人机 四旋翼飞行器模型预测控的MATLAB仿真...
四旋翼飞行器模型预测控制仿真带PPT 四旋翼无人机 四旋翼飞行器模型预测控的MATLAB仿真纯M代码实现最优化求解使用了CasADi优化控制库绿色免安装。 CasADi我已下到代码目录里代码到手可直接运行。 运行完直接plot出附图仿真结果。 配套30页的ppt简介了相关原理与模型公式详见附图。 关联词无人机轨迹跟踪无人机姿态控制 MPC控制。最近在搞四旋翼的MPC仿真折腾了半个月总算跑通了轨迹跟踪的效果。分享下用MatlabCasADi的实现姿势代码全手撸没有Simulink依赖项适合直接扒下来魔改。四旋翼飞行器模型预测控制仿真带PPT 四旋翼无人机 四旋翼飞行器模型预测控的MATLAB仿真纯M代码实现最优化求解使用了CasADi优化控制库绿色免安装。 CasADi我已下到代码目录里代码到手可直接运行。 运行完直接plot出附图仿真结果。 配套30页的ppt简介了相关原理与模型公式详见附图。 关联词无人机轨迹跟踪无人机姿态控制 MPC控制。先说模型部分核心是建立状态方程。四旋翼的12维状态向量包括位置、速度、欧拉角、角速度控制量是四个电机的推力。这里直接把动力学方程离散化% 状态变量[X Y Z Vx Vy Vz phi theta psi p q r] x MX.sym(x,12); u MX.sym(u,4); % 离散时间模型 dt 0.1; xdot [x(4:6); [0;0;-g] R*T/m; x(10:12); inv(J)*(tau - cross(x(10:12),J*x(10:12)))]; x_next x xdot*dt; % 欧拉离散这个非线性模型直接放进预测模型会爆炸所以用了线性化反馈校正的套路。代码里用了自动微分求雅可比矩阵比手动推导省事多了f Function(f,{x,u},{x_next}); A_jac jacobian(x_next, x); B_jac jacobian(x_next, u);重点来了——MPC的QP问题构建。CasADi的语法需要适应下目标函数分轨迹跟踪和输入柔化两部分w {u; X}; % 优化变量包含控制序列和状态序列 J 0; for k 1:N J J (X(:,k)-xref(:,k))*Q*(X(:,k)-xref(:,k)); # 状态跟踪 J J u(:,k)*R*u(:,k); # 控制量惩罚 end约束处理有个坑四旋翼的推力必须大于0且小于电机最大推力。这里用不等式约束表达g [g, u(1,k) 0, u(1,k) u_max]; # 每个电机的推力约束求解器配置建议用IPOPT实测比sqp快opts struct(ipopt,struct(print_level,0)); solver qpsol(solver, qpoases, prob, opts);跑完仿真直接plot就能看到三维轨迹跟踪效果。有个实用技巧在预测时域内用虚线画出预测轨迹方便调试参数plot3(x_pred(1,:),x_pred(2,:),x_pred(3,:),r--) hold on plot3(x_hist(1,:),x_hist(2,:),x_hist(3,:),b-)实测在i5笔记本上跑20步预测时域单步求解大概50ms勉强能实时。如果要提速可以考虑提前编译CasADi的求解器或者改用显式MPC。完整代码里还藏着几个彩蛋姿态环用了四元数修正避免万向锁加入风速扰动测试鲁棒性支持导入复杂轨迹比如Lemniscate曲线建议先跑通基础版本再逐步解锁这些功能。代码包里那个PPT挺实在把李雅普诺夫稳定性分析讲得挺明白适合当推导笔记用。