MATLAB simulink 车辆运动学仿真 实时位置 车身姿态最近在折腾车辆运动学仿真的时候发现用Simulink搞这事比纯代码撸矩阵有意思多了。特别是实时看着小车在地图上蛇形走位还能看它扭屁股的姿态这成就感可比看Excel表格强太多了。先整点硬货咱们直接上自行车模型Bicycle Model。这玩意儿虽然把四个轮子简化为前后两个但对付常规运动学仿真足够了。在Simulink里新建个空白模型先拖个MATLAB Function模块进来代码这么写function [x_dot, y_dot, theta_dot] Kinematics(v, delta, L) beta atan(0.5*tan(delta)); % 转向补偿 x_dot v * cos(theta beta); y_dot v * sin(theta beta); theta_dot (v / L) * sin(beta); end这里偷了个懒用beta角做转向补偿。参数L是轴距delta是前轮转角。注意theta是车辆横摆角得在模型里设置成积分器的状态量。要是嫌转向太灵敏可以把0.5调小点。接下来整个姿势更新的部分。连着三个积分器模块把xdot、ydot、theta_dot分别积分。重点来了在积分器初始值里填上初始坐标和朝向比如[0,0,pi/2]就是车头朝北起步。这里容易踩的坑是单位问题转角记得用弧度制别问我是怎么知道的...MATLAB simulink 车辆运动学仿真 实时位置 车身姿态可视化才是灵魂所在从Vehicle Dynamics Blockset里拖出3D Vehicle模块接上刚算出来的x,y和theta。嫌默认小车丑的话去模块参数里换个STL模型淘宝30块买的五菱宏光模型都能怼进去。跑起来之后按空格切视角能看到车灯扫过的轨迹这效果拿去唬学弟学妹绝对好使。实测时发现个好玩的现象低速时转向像推头高速时跟漂移似的。后来想明白了是运动学模型没考虑轮胎侧偏不过本来就是做上层控制的快速验证这点误差可以忍。想更真实的话就在动力学模块里加Pacejka魔术公式不过那得另开一篇说了。最后安利个调试技巧在Display模块里勾选Sample Time Colors一眼看出哪个环节拖慢仿真速度。碰到卡顿就检查下有没有混用固定步长和变步长模块特别是带触发信号的子系统最容易坏事。要是实时性要求高把仿真步长调到0.01秒搭配Rapid Accelerator模式老电脑也能跑得飞起。折腾完这一套看着小车在虚拟场地里精准入库突然觉得这玩意儿拿去参加大学生方程式可能真能拿奖。至少比隔壁用Python画轨迹的组看起来专业多了不是手动狗头