MPC轨迹跟踪:基于运动学、动力学CarsimSimulink联仿
MPC轨迹跟踪基于运动学、动力学carsimsimulink联仿方向打死油门踩到底轮胎和地面摩擦的青烟还没散尽手里的MPC控制器已经算好了未来三秒的轨迹——这大概就是模型预测控制在轨迹跟踪中最性感的瞬间。今天咱们就扒一扒怎么用Simulink拉着Carsim搞联仿从运动学模型到十八个自由度的动力学全家桶把轨迹跟踪这事儿安排得明明白白。先甩个运动学模型的代码镇楼function dx KinematicModel(x, u, L) beta atan(0.5*tan(u(2))); % 转向等效换算 dx [x(4)*cos(x(3)beta); x(4)*sin(x(3)beta); x(4)*sin(beta)/L; u(1)]; end这个四状态模型X/Y/航向角/速度看着清爽但有个坑前轮转角输入u(2)得做等效处理毕竟现实中的阿克曼转向几何可不是吃素的。L是轴距参数实测时用帕萨特B6的数据约2.8米别傻乎乎用五菱宏光的参数。动力学模型才是重头戏。Carsim里导出的整车模型.mat文件在Simulink里拆开一看好家伙27个状态变量在跳钢管舞。这时候得祭出模型降维大法% 提取关键状态用于MPC load(veh_dynamics.mat); A_red A([1:3,7:9], [1:3,7:9]); % 保留质心运动横摆 B_red B([1:3,7:9], [1,4]); % 油门方向盘输入 Ts 0.1; % 别学论文里用0.02s步长仿真跑起来要命的 sys_d c2d(ss(A_red,B_red,eye(6),[]), Ts);降维后的六状态模型X/Y/航向/横摆角速度/纵向速度/侧向速度足够描述轨迹跟踪的核心动力学。注意这里的B矩阵列对应的是Carsim里油门开度和方向盘转角这两个执行器通道。MPC轨迹跟踪基于运动学、动力学carsimsimulink联仿联仿配置才是魔鬼细节。Carsim的S-Function接口像个傲娇大小姐得按她的规矩来在Carsim的Run Control里勾选External把VehicleID改成666别问为啥玄学Simulink的S-Function采样时间必须和Carsim解算步长对齐方向盘转角记得乘个-1Carsim的坐标系和常识是反的MPC控制器核心代码长这样function u mpc_control(x0, ref_traj) persistent controller; if isempty(controller) nx 6; nu 2; Q diag([10,10,5,1,1,2]); R 0.1*eye(nu); horizon 15; % 构造QP问题 [Ad, Bd] get_linear_model(); mpc comfortable_mpc(Ad, Bd, Q, R, horizon); controller mpc; end % 轨迹预处理 shifted_ref ref_traj(1:horizon1, :); % 带松弛因子的求解 [u_seq, ~] controller.solve(x0, shifted_ref, RelaxFactor, 0.95); u u_seq(1,:); end重点是这个comfortable_mpc函数名字瞎起的里面藏着松弛因子和约束软化这些实战技巧。别迷信教科书里的硬约束实测时不给轮胎模型留点余量分分钟给你整数值发散。最后看效果在Carsim的双移线工况下运动学MPC像喝了假酒似的画龙动力学MPC则稳稳贴着参考线走。但别高兴太早把路面摩擦系数从0.8降到0.3俩控制器都开始表演华尔兹——这时候该召唤轮胎力观测器上场了不过那就是另一个深夜掉头发的故事了。仿真跑完记得看Carsim的动画回放眼见为实。要是发现车子在跳霹雳舞先检查是不是方向盘转角单位没从弧度转成度这种低级错误我去年犯了七次。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2480289.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!