【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

posted on 2026-01-12 13:11  ljbguanli  阅读(0)  评论(0)    收藏  举报