【AirSim 教程指南】Part 4:无人机物理引擎与动力学模拟(碰撞、风场、传感器噪声、飞行动力学) - 实践
AirSim 教程指南——Part 4:无人机物理引擎与动力学模拟(碰撞、风场、传感器噪声、飞行动力学)
面向准备进行 真实无人机仿真、控制算法验证(MPC / PID / RL) 的开发者
全面解析 AirSim 如何模拟无人机的动力学、环境扰动与噪声模型
让你的仿真结果“更像真机”,避免算法过拟合虚拟环境
目录
1. AirSim 中的无人机动力学:从六自由度到推进模型
2. 碰撞系统:检测、事件回调与恢复策略
3. 风场模型:风向、风速、阵风、湍流
4. 噪声系统:传感器噪声、动力噪声、IMU 噪声
5. 真机一致性:如何校准仿真让它接近你的无人机
1. AirSim 中的无人机动力学:从六自由度到推进模型
AirSim 的无人机动力学是基于一套 近真实的 6-DoF 刚体动力学 + 推进器模型——远比 Gazebo 的默认插件更轻、更快,也比 PX4 SITL 更易上手。
1.1 无人机在 AirSim 中的动力学框架(DRL / 控制算法必读)
AirSim 模拟了完整的无人机状态:
| 状态 | 说明 |
|---|---|
| 位置 Position (x, y, z) | NED 或世界坐标系 |
| 速度 Linear Velocity (vx, vy, vz) | 包含阻力 |
| 姿态 Orientation (Quaternion / Euler) | 控制 pitch/roll/yaw |
| 角速度 Angular Velocity | 受电机扭矩影响 |
| 推进器输出 Thrust / Torque | 对应四旋翼 4 电机 |
该 6-DoF 刚体动力学基于 Newton–Euler 方程:
线加速度:
[
a = \frac{1}{m}(F_{thrust} + F_{drag} + F_{gravity} + F_{wind})
]
角加速度:
[
\dot{\omega} = I^{-1}(M_{motors} - \omega \times I\omega)
]
这里最关键的,是 AirSim 把电机建模得非常“飞控化”。
1.2 四旋翼推进器模型:让算法对真机更鲁棒
四旋翼的推进力由以下参数控制:
| 参数 | 作用 |
|---|---|
motor/linear_drag_coefficient | 推进器随速度衰减 |
motor/min_thrust/ max_thrust | 推力上下限 |
motor/torque_constant | 电机扭矩 |
motor/spin_up_time | 舵机/电机延迟 |
这些参数决定了:
- PID 调参是否稳定
- RL agent 会不会“过拟合”理想动力学
- 飞行轨迹是否像真实无人机
- 是否会出现真实中的抖动、延迟、悬停漂移
如果你未来计划部署到实际无人机(如 PX4)——这些参数必须调得像真机。
2. 碰撞系统:检测、回调、恢复策略(对无人机最重要的部分)
相比地面机器人,无人机最怕的就是 不可控的碰撞反应。
AirSim 的碰撞系统包括:
- Mesh-based 精确碰撞检测
- 碰撞事件回调
- 可配置缓冲 / 弹性恢复
- 可关掉碰撞做路径规划测试
2.1 如何检测无人机是否撞机?
client.simGetCollisionInfo()
返回:
| 字段 | 解释 |
|---|---|
has_collided | 是否发生碰撞 |
impact_normal | 碰撞面法线(机体恢复方向) |
impact_point | 碰撞点 |
penetration_depth | 穿透距离(越大代表撞得越狠) |
object_name | 撞到什么 |
2.2 “撞机后怎么办?”——三种策略
策略 A:立即刹停(最接近真实)
client.moveByVelocityAsync(0,0,0,1)
策略 B:自动回弹(仿真常用)
读取 impact_normal,沿该方向反向推一点距离。
策略 C:忽略碰撞(路径规划 / RL 实验)
settings.json:
"EnableCollisionPassthrough": true
无人机会穿墙,但用于 SLAM / 规划 / 控制算法前期调试 非常方便。
3. 风场模型:风、阵风、湍流、扰动(无人机飞控最常用)
这是 AirSim 最被低估却对无人机算法至关重要的组件。
AirSim 支持:
- 恒定风 Constant Wind
- 随机阵风 Gusts
- 湍流 Turbulence
- 方向变化
- 垂直扰动(类似热气流)
3.1 开启风场
settings.json:
"Wind": {
"Enabled": true,
"WindDirection": [1, 0, 0],
"WindSpeed": 8
}
含义:
- 朝 X 正方向吹
- 风速 8 m/s(已接近小型无人机极限)
3.2 模拟阵风(强烈推荐)
"WindGust": {
"GustEnabled": true,
"Strength": 20,
"Duration": 0.8,
"Probability": 0.3
}
效果:
- 飞行中会突然强烈偏航
- 悬停时会产生随机漂移
- RL agent、MPC、PID 更加鲁棒
3.3 湍流噪声(让飞行更“真机”)
"Turbulence": {
"Enabled": true,
"Scale": 1.3
}
湍流会使:
- 姿态抖动
- 速度有随机噪声
- 导致相机画面轻微震动
这是模拟“真实空气环境”的关键。
4. 噪声系统(IMU、GPS、深度、相机、动力噪声)
无人机在真实世界中最头疼的问题:
- IMU 漂移
- GPS 跳变
- 推力不对称
- 气压计噪声
- 相机噪声
AirSim 内置这些噪声,可逐项开启。
4.1 IMU 噪声(控制系统最敏感)
IMU 噪声会影响:
- 姿态估计
- EKF / UKF
- 控制环震动
- 悬停稳态误差
settings.json:
"Imu": {
"NoiseScaleAccel": 0.2,
"NoiseScaleGyro": 0.05,
"BiasDrift": 0.001
}
开启后:
无人机悬停会摇晃,像真机一样会缓慢“漂走”。
4.2 电机噪声:不可控但真实的“推力不一致”
"MotorNoise": {
"Enabled": true,
"Variance": 0.07
}
影响:
- 悬停漂移更难控制
- PID/MPC 需要更强的鲁棒性
4.3 相机噪声(视觉算法必调)
可模拟:
- 高斯噪声
- 随机噪点
- 模糊
- 曝光偏移
"CaptureSettings":[
{
"ImageType": 0,
"NoiseEnabled": true,
"NoiseAmount": 0.02
}
]
5. 真机一致性:如何“校准”仿真让它接近你的无人机(核心)
重点在三个部分:
5.1 校准推进模型(必做)
- 用你的无人机测量 hover thrust
- 调整
"motor/max_thrust" - 让 AirSim 的 hover throttle 和真机一致
5.2 校准无人机重量和惯量
"VehicleMass": 1.15,
"InertialMatrix": [0.02, 0.02, 0.04]
惯性越大:
- 转弯更“钝”
- 控制更易稳
和真实无人机差距越小,你的控制算法越可靠。
5.3 校准噪声(防止仿真算法无法上真机)
最常见错误:
仿真无噪声 → 上真机直接炸机。
建议:
| 噪声 | 推荐值 |
|---|---|
| IMU 加速度噪声 | 0.2–0.5 |
| IMU 陀螺仪噪声 | 0.03–0.05 |
| GPS 噪声 | 0.5–1.2 m |
| 相机噪声 | 0.01–0.05 |
| 电机推力噪声 | 0.05–0.1 |
祝你天天开心,我将更新更多有意思的内容,欢迎关注!
最后更新:2025年12月
作者:Echo
浙公网安备 33010602011771号