无人机仿真开发需要的基础知识
做无人机仿真(如 AirSim/Colosseum/PX4)时,会反复用到下面这些概念。
一、坐标系与姿态
1.1 常用坐标系
| 坐标系 | 含义 | 仿真里的用法 |
|---|---|---|
| NED(North-East-Down) | 北-东-地,x 北、y 东、z 向下 | AirSim、PX4、很多飞控用 NED 做「世界系」 |
| ENU(East-North-Up) | 东-北-天,z 向上 | 部分视觉、ROS 用 ENU |
| 机体系(Body) | 原点在质心,x 前、y 右、z 下(NED 约定) | 传感器输出、推力/力矩、角速度 pqr 都在机体系 |
仿真里要先约定世界系是 NED 还是 ENU,所有公式、接口统一,避免符号和轴搞反。
1.2 姿态的几种表示
| 表示 | 含义 | 优点 | 缺点 |
|---|---|---|---|
| 欧拉角(roll, pitch, yaw) | 绕 3 个轴依次转动的角度(° 或 rad) | 直观,便于调试、可视化 | 万向锁、插值不线性 |
| 四元数(q0,q1,q2,q3) | 4 个数表示旋转,单位四元数 | 无万向锁、积分简单、插值好 | 不直观 |
| 旋转矩阵(3×3) | 机体相对世界系的旋转 | 变换向量、推导公式方便 | 9 个数、有约束 |
仿真里内部状态常用四元数积分姿态,输入/输出可以再转成欧拉角(日志、地面站、ThunderView 等)。
1.3 欧拉角顺序
常见 ZYX(先 yaw 再 pitch 再 roll)。不同顺序会得到不同欧拉角,写公式、对接口时要和飞控/文档一致(例如 PX4、AirSim 用哪种顺序)。
二、刚体运动学与动力学
2.1 状态量(你要积分的东西)
| 量 | 维度 | 单位 | 含义 |
|---|---|---|---|
| 位置 | 3(x,y,z) | m | 质心在世界系下的位置 |
| 速度 | 3(vx,vy,vz) | m/s | 质心在世界系下的线速度 |
| 姿态 | 4 或 3 | 四元数或欧拉角 | 机体相对世界系的朝向 |
| 角速度 | 3(p,q,r 或 ωx,ωy,ωz) | rad/s | 机体系下的旋转快慢 |
仿真里通常维护:位置、速度、四元数、角速度,每步用动力学算加速度和角加速度,再积分更新状态。
2.2 平动方程(牛顿第二定律)
- 重力:世界系下一般为 (0, 0, +g) 或 (0, 0, −g),取决于 NED/ENU 和 g 的符号约定。
- 推力:由桨产生,在机体系下通常是沿机体 z 轴;要乘以机体→世界的旋转矩阵再加到世界系合力里。
- 阻力:与速度相关, 或 ,系数即前面说的线阻力系数。
仿真里:每步算总力 → a = F/m → 对 a 积分得 v,再积分得 position。
2.3 转动方程(欧拉方程)
- I:转动惯量矩阵,常用对角 Ixx, Iyy, Izz(机体主轴惯量)。
- ω:机体系角速度 (p, q, r)。
- M:总力矩(桨产生的力矩 + 角阻力等);ω × (Iω) 是陀螺项,不能省。
仿真里:已知 M 和当前 ω,可解出 ,积分得 ω;再用 ω 积分/更新四元数(有标准微分方程)。
三、多旋翼的力与力矩
3.1 单桨推力与力矩
- 推力:(n 转速,D 桨径,ρ 空气密度, 推力系数)。
- 反扭力矩:( 功率系数)。
- 仿真里常用简化:推力 ∝ 指令² 或线性,再配合 C_T / C_P 或查表。
3.2 四桨如何产生合力/力矩
- 总推力:四桨推力之和,沿机体 z 轴(再转到世界系参与平动)。
- 滚转力矩:左右桨推力差 × 臂长。
- 俯仰力矩:前后桨推力差 × 臂长。
- 偏航力矩:两对桨反扭之差(CW/CCW 各两个)。
分配关系写成 4×4 或 4×1 的混控矩阵,和 PX4/SimpleFlight 的混控一致,仿真出来的响应才像实机。
3.3 阻力(线阻力 / 角阻力)
- 线阻力:(或与 成正比),减缓平动。
- 角阻力:,减缓转动。
LinearDragCoefficient / AngularDragCoefficient、火箭形与 X 四旋翼的差异,就是这些系数。
四、数值积分(时间推进)
4.1 为什么需要积分
动力学给出的是加速度 和角加速度 ;要得到下一时刻的位置、速度、姿态、角速度,必须对时间积分。
4.2 常用方法
| 方法 | 公式思路 | 精度 | 计算量 | 适用 |
|---|---|---|---|---|
| 欧拉 | 一阶 | 小 | 快速原型、大步长时易发散 | |
| RK2(中点) | 用半步斜率再算一步 | 二阶 | 中 | 折中 |
| RK4 | 用 4 个斜率加权 | 四阶 | 大 | 离线/高精度仿真常用 |
仿真步长 dt 要足够小(如 1–5 ms),否则高阶动力学会不稳定;和实机/飞控对比时,dt 最好和飞控控制周期同量级。
4.3 四元数积分
姿态不用欧拉角直接积分(会万向锁),而是用 ω 和当前四元数 q 的微分关系:
有标准离散化公式(如零阶保持、一阶积分),仿真里按一种写死并和文档一致即可。
五、传感器模型(仿真要「造」的数据)
5.1 IMU(加速度计 + 陀螺)
| 输出 | 物理量 | 仿真里怎么给 |
|---|---|---|
| 加速度计 | 比力(除去重力后的加速度) | 用当前 a(世界系)转到机体系,再减机体系下的重力,可加零偏/噪声 |
| 陀螺 | 机体角速度 ω | 直接用当前 ω,可加零偏/噪声 |
HIL 时,仿真把这两类数据发给飞控,所以单位、坐标系、符号要和 PX4 约定一致(NED、m/s²、rad/s)。
5.2 GPS
- 输出:经纬高、速度(或只位置)。
- 仿真:由世界系位置加原点偏移转成经纬高;速度由世界系速度或数值微分得到;可加延迟、噪声、多路径等。
5.3 磁强计、气压计
- 磁强计:与机体姿态、地磁矢量相关,仿真里按姿态和当地地磁方向算,再加噪声。
- 气压计:与高度、大气模型相关,仿真里可由高度换算气压,再加噪声。
这些在 AirSim/Colosseum 里大多已有模型,自研 FDM 时只要保证位姿、速度正确,传感器层可以后接。
六、控制与混控(和仿真的关系)
6.1 控制层级(典型)
- 位置环:目标位置 → 目标速度或加速度。
- 速度环:目标速度 → 目标姿态(如前倾角)或推力。
- 姿态环:目标姿态 → 目标角速度。
- 角速度环:目标角速度 → 力矩或桨指令。
- 混控:力矩/推力指令 → 四个电机指令。
仿真可以只做动力学(输入四电机指令,输出状态);飞控(或仿真里的简化控制器)负责上面各环。做 HIL 时,仿真只提供「机体真实状态→传感器」,控制全在真飞控里。
6.2 混控
把总推力 + 滚/俯/偏力矩 变成 4 个电机指令。X 四旋翼有标准 4×4 矩阵;火箭形公式相同,只是惯量、阻力不同导致响应不同,混控矩阵可以不变。
七、仿真专用注意点
7.1 实时与欠实时
- HIL:仿真要实时或略快于实时,否则飞控会「感觉」时间不对。
- 离线:可以超实时(大步长、少渲染),只关心轨迹和逻辑。
7.2 初始条件与稳定性
- 初始姿态要一致(如水平);初始角速度为 0 或小量;位置要在场景内。
- 质量、惯量、桨效、阻力要在合理范围,否则积分会发散(例如推力不足以悬停、惯量取错导致角速度爆炸)。
7.3 单位与符号
- 全用 SI:m, kg, s, rad, N, N·m。
- 重力方向、NED/ENU、欧拉角顺序、角速度正方向,全文档化并在代码里统一,避免「看起来公式对却飞反了」。
7.4 与实机对齐(数字孪生)
- 参数:质量、Ixx/Iyy/Izz、阻力、桨效 从称重、CAD、辨识来。
- 验证:同一操纵(阶跃油门、阶跃姿态)下,对比仿真 vs 实飞的角速度、高度、速度曲线,迭代调参数。
八、按主题的速查
| 你想做/理解… | 需要掌握 |
|---|---|
| 坐标系、画轨迹、对日志 | 坐标系(NED/ENU)、姿态表示(欧拉/四元数)、单位 |
| 写/改 6-DOF 动力学 | 平动/转动方程、推力/力矩、阻力、积分(欧拉/RK4)、四元数积分 |
| 和实机像 | 转动惯量 Ixx/Iyy/Izz、角速度、质量、阻力、桨效、参数获取与辨识 |
| 接飞控 HIL | 传感器模型(IMU/GPS)、单位与坐标系、实时与时间步长 |
| 调控制/混控 | 控制层级、混控矩阵、角速度环与姿态环 |
九、延伸概念速览
转动惯量(Ixx / Iyy / Izz)
描述绕机体三根轴转动时「有多难被拧动」:惯量越大,同样力矩下角加速度越小。单位 kg·m²。火箭形截击机通常 Izz 小、Ixx/Iyy 大,与短粗 X 四旋翼比例相反。
角速度(ω 或 p, q, r)
描述绕某轴转动的快慢,单位常用 rad/s。陀螺仪测的就是机体角速度;飞控用角速度做内环;仿真里对角速度积分得到姿态变化。