MATLAB Simulink 车辆运动学仿真:实时位置与车身姿态
要是实时性要求高,把仿真步长调到0.01秒,搭配Rapid Accelerator模式,老电脑也能跑得飞起。嫌默认小车丑的话,去模块参数里换个STL模型,淘宝30块买的五菱宏光模型都能怼进去。后来想明白了是运动学模型没考虑轮胎侧偏,不过本来就是做上层控制的快速验证,这点误差可以忍。特别是实时看着小车在地图上蛇形走位,还能看它扭屁股的姿态,这成就感可比看Excel表格强太多了。参数L是轴距,delt
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调小点。
接下来整个姿势更新的部分。连着三个积分器模块,把x_dot、y_dot、theta_dot分别积分。重点来了:在积分器初始值里填上初始坐标和朝向,比如[0,0,pi/2]就是车头朝北起步。这里容易踩的坑是单位问题,转角记得用弧度制,别问我是怎么知道的…
可视化才是灵魂所在!从Vehicle Dynamics Blockset里拖出3D Vehicle模块,接上刚算出来的x,y和theta。嫌默认小车丑的话,去模块参数里换个STL模型,淘宝30块买的五菱宏光模型都能怼进去。跑起来之后按空格切视角,能看到车灯扫过的轨迹,这效果拿去唬学弟学妹绝对好使。
实测时发现个好玩的现象:低速时转向像推头,高速时跟漂移似的。后来想明白了是运动学模型没考虑轮胎侧偏,不过本来就是做上层控制的快速验证,这点误差可以忍。想更真实的话,就在动力学模块里加Pacejka魔术公式,不过那得另开一篇说了。
最后安利个调试技巧:在Display模块里勾选Sample Time Colors,一眼看出哪个环节拖慢仿真速度。碰到卡顿就检查下有没有混用固定步长和变步长模块,特别是带触发信号的子最容易坏事。要是实时性要求高,把仿真步长调到0.01秒,搭配Rapid Accelerator模式,老电脑也能跑得飞起。
折腾完这一套,看着小车在虚拟场地里精准入库,突然觉得这玩意儿拿去参加大学生方程式可能真能拿奖。至少比隔壁用Python画轨迹的组看起来专业多了不是?(手动狗头)
MATLAB simulink 车辆运动学仿真 实时位置 车身姿态


更多推荐

所有评论(0)