四轮驱动阿克曼建模与仿真
简介
本案例基于 Modelica MultiBody 构建一个阿克曼(Ackermann)转向小车的机械多体仿真系统,完整呈现「转向命令 → 阿克曼转向几何 → 平面运动约束 → 车轮自转 → 整车姿态」的闭环,是车辆运动学、多体动力学与轮式移动机器人建模仿真的典型示例。
适用课程、行业与场景
本案例适用于车辆动力学、汽车理论、车辆系统动力学与仿真、多体系统动力学、机械系统建模与仿真、机器人学与移动机器人、自动驾驶与智能车基础等课程教学;面向汽车与智能网联汽车、移动机器人与 AGV、无人驾驶、教学科研等行业的研发与教学人员;可用于阿克曼转向几何与自行车模型的直观讲解,轮式车辆平面运动学与多体动力学联合仿真的入门样例,以及自动驾驶算法开发前的车辆模型验证与方案演示等场景。
案例背景与目标
阿克曼转向是轮式车辆实现无侧滑转向的基本几何约束:转向时内侧车轮转角大于外侧车轮,使四个车轮绕同一瞬时转向中心滚动。本案例以一辆小型四轮小车为对象,用 Modelica 标准库 MultiBody 的多体组件搭建车身、四轮、转向关节与自转关节,并通过「平面关节链 + 速度约束源」的方式约束车辆在平面内的 x/y/yaw 三个自由度,最终在三维动画中演示小车按正弦转向命令稳定行驶。
系统组成
| 模块 | 类型 | 说明 |
|---|---|---|
Types |
包 | 统一参数与颜色定义(轴距、轮距、车轮半径、车身尺寸、质量、最大转角、名义车速) |
SteeringGeometry |
block | 由等效中心转角计算左右前轮阿克曼转角 |
Wheel |
model | 带自转关节与圆柱视觉形状的可复用车轮 |
Chassis |
model | 以后轴中心为运动学参考点的车身与四轮安装接口 |
SteeringCommand |
block | 正弦转向命令生成 |
DriveCommand |
block | 名义车速到后轮角速度命令换算 |
AckermannVehicle |
model | 约束驱动型 MultiBody 阿克曼整车 |
Sensors.VehicleSignals |
block | 将整车 MultiBody 状态整理为可绘图信号 |
Scenario |
model | 顶层演示场景(世界坐标系、地面、坐标轴参考) |
Tests.ScenarioSmoke |
model | 轻量验证入口 |
阿克曼转向几何(技术要点)
SteeringGeometry 实现经典阿克曼转向公式:先由等效中心转角求瞬时转向半径,再分别计算左右前轮转角。
steerLimited = clamp(steerCmd, -maxSteer, maxSteer)
turnRadius = wheelBase / tan(steerLimited) // 瞬时转向半径
deltaLeft = atan(wheelBase / (turnRadius - trackWidth/2)) // 内侧轮
deltaRight = atan(wheelBase / (turnRadius + trackWidth/2)) // 外侧轮
- 内侧车轮(转弯一侧)转角更大,外侧车轮转角更小,二者绕同一转向中心滚动,避免侧滑。
- 转角经
min/max限幅,maxSteer = 30°;steerLimited接近零时以1e9近似直行,避免除零。
平面运动约束与自行车模型(技术要点)
AckermannVehicle 采用「约束驱动」方式约束车辆平面自由度,由世界固定参考点经三段关节链连接车身:
planarReference → translateX(Prismatic, X) → translateY(Prismatic, Y) → yawJoint(Revolute, Z)
平面运动的速度约束源按自行车模型(bicycle model)给出:
longitudinalSpeed = wheelRadius * rearWheelOmegaCmd
steerEquivalent = clamp(steerCmd, ±maxSteer)
v_x = longitudinalSpeed * cos(yaw) // X 向速度分量
v_y = longitudinalSpeed * sin(yaw) // Y 向速度分量
ω_z = longitudinalSpeed * tan(steerEquivalent) / wheelBase // 偏航角速度
即纵速沿车头方向分解为世界系 x/y 速度,偏航角速度满足 ω = v·tan(δ)/L,与小转角下的车辆平面运动学一致。三个自由度均使用 StateSelect.always 状态,由速度源约束驱动。
车辆结构与动力学
- 车身:以后轴中心为参考点(x 指向车头、y 指向左侧、z 向上),
Body刚体质量 5.0 kg,惯量按长方体公式I = m·(边长² + 边长²)/12计算;配套底盘、侧板、挡风玻璃、车顶、货斗、雷达、相机等多组FixedShape视觉件。 - 车轮:四个可复用
Wheel,各含一个绕局部 Y 轴的自转 Revolute 关节 + 圆柱视觉件;单轮质量 0.2 kg,绕自转轴惯量0.5·m·r²。 - 前轮转向:两个前轮通过轴向局部 Z 的 Revolute 转向关节安装,转角由
SteeringGeometry输出的左右前轮转角经位置源驱动。 - 驱动:
DriveCommand将目标车速换算为后轮角速度ω = v / r,四个车轮统一由该角速度命令驱动。
关键参数
| 参数 | 值 | 说明 |
|---|---|---|
| 轴距 wheelBase | 0.34 m | 前后轴距 |
| 轮距 trackWidth | 0.24 m | 左右轮距 |
| 车轮半径 wheelRadius | 0.055 m | 单轮半径 |
| 车身尺寸 bodyLength×Width×Height | 0.50×0.26×0.12 m | 车身长宽高 |
| 车身质量 / 单轮质量 | 5.0 / 0.2 kg | 刚体质量 |
| 最大转角 maxSteer | 30° | 等效中心转角限幅 |
| 名义车速 nominalSpeed | 0.5 m/s | 目标车速 |
仿真场景与配置
- 顶层
Scenario集成世界坐标系、地面参考平面、X/Y 方向参考轴、整车、转向命令与驱动命令,并将整车状态经Sensors.VehicleSignals整理为pose(x/y/yaw)、speed(vx/vy/yawRate)、wheel(左右前轮转角、前后轮角速度)三组可绘图信号。 - 默认仿真:
StartTime=0, StopTime=20, Interval=0.02,Dassl 算法,容差1e-4。 - 转向命令为
20°·sin(0.5·t)正弦转向,驱动命令为 0.5 m/s 定速。 Tests.ScenarioSmoke为轻量验证入口(车速 0.3 m/s、转向幅值 10°、StopTime=5)。
建模说明与边界
本案例为 Phase A 约束驱动模型:采用「X/Y 平移关节 + Z 偏航关节」约束车身平面 x/y/yaw 自由度,车轮、转向关节与自转关节均通过 MultiBody frame 装配,暂未引入轮胎侧偏、轮地接触摩擦等复杂轮地约束。后续可替换为滚动轮组(RollingWheelSet)或完整轮地约束模型以逼近真实车辆动力学。本案例适合教学演示与运动学/多体建模入门,不追求高保真轮胎与悬架动力学。
目录内容
| 路径 | 说明 |
|---|---|
package.mo |
库完整源码(AckermannMultiBodyPhysicsDemo,依赖 Modelica 4.0.0.TY.1) |
版本说明
V0.0.1,2026-06-06 11:55
- 初始版本
使用许可
本模型库版权由MoHub版权所有,未经许可,不得用于商业用途。