第二章 坐标系与运动学基础
各位同学,欢迎来到第二章。说实话,坐标系和运动学是无人机飞控的“地基”。我见过不少新手,一上来就调PID、跑路径规划,结果飞机在天上乱转,最后发现是坐标系搞反了。嗯,咱们今天就把这个地基打牢。
2.1 地球坐标系与机体坐标系
无人机要飞,首先得知道“我在哪”和“我朝哪”。这就涉及到两个最核心的坐标系。
地球坐标系,也叫导航坐标系。说白了,就是固定在地球上的一个参考系。通常我们用北-东-地(NED)或者东-北-天(ENU)。我个人习惯用NED,因为和重力方向一致,算起来直观。你想想看,高度下降时,Z轴数值是正的,多符合直觉。
机体坐标系,是固定在无人机身上的。原点在质心,X轴指向机头,Y轴指向右翼,Z轴指向下。这个坐标系会随着飞机姿态变化而变化。
我在项目中遇到过一个问题:有个飞控员把GPS的经纬度直接当成平面坐标用,结果飞机飞出去500米就偏了200米。为什么?因为地球是圆的,经纬度是球面坐标,不是平面坐标。这里需要做投影转换,比如用UTM投影。
核心要点: 地球坐标系是“世界”,机体坐标系是“自我”。所有路径规划最终都要转换到地球坐标系下执行。
2.2 欧拉角与四元数
飞机姿态怎么描述?最直观的是欧拉角:俯仰角(Pitch)、滚转角(Roll)、偏航角(Yaw)。
但欧拉角有个致命问题——万向锁。当俯仰角接近±90°时,滚转和偏航会耦合,丢失一个自由度。我记得第一次做特技飞行时,飞机一个筋斗翻过去,姿态解算直接炸了,就是因为万向锁。
所以,实际工程中我们更常用四元数。四元数用四个数表示旋转,没有奇点,计算效率也高。它长这样:
q = w + x*i + y*j + z*k
其中 w^2 + x^2 + y^2 + z^2 = 1
你可能会问:“四元数这么抽象,怎么用?”其实在代码里,我们通常用库函数做转换。比如从欧拉角转四元数:
// 伪代码示例:欧拉角转四元数
function eulerToQuaternion(roll, pitch, yaw):
cy = cos(yaw * 0.5)
sy = sin(yaw * 0.5)
cp = cos(pitch * 0.5)
sp = sin(pitch * 0.5)
cr = cos(roll * 0.5)
sr = sin(roll * 0.5)
w = cr * cp * cy + sr * sp * sy
x = sr * cp * cy - cr * sp * sy
y = cr * sp * cy + sr * cp * sy
z = cr * cp * sy - sr * sp * cy
return (w, x, y, z)
我的经验: 在飞控中,姿态更新用四元数,人机交互显示用欧拉角。这样既避免了万向锁,又方便调试。
2.3 无人机运动学模型
运动学模型,说白了就是“力怎么产生运动”。对于四旋翼,我们通常做简化:
- 位置运动: 由四个电机的总升力控制垂直方向,由姿态倾斜产生水平加速度。
- 姿态运动: 由电机差速产生力矩,控制俯仰、滚转、偏航。
我给大家一个简化的运动学方程:
// 位置运动学(忽略空气阻力)
ddot_x = (F_total / m) * (cos(phi)*sin(theta)*cos(psi) + sin(phi)*sin(psi))
ddot_y = (F_total / m) * (cos(phi)*sin(theta)*sin(psi) - sin(phi)*cos(psi))
ddot_z = (F_total / m) * (cos(phi)*cos(theta)) - g
// 姿态运动学(小角度近似)
dot_phi = p + q*sin(phi)*tan(theta) + r*cos(phi)*tan(theta)
dot_theta = q*cos(phi) - r*sin(phi)
dot_psi = (q*sin(phi) + r*cos(phi)) / cos(theta)
嗯,这里要注意,小角度近似只在姿态角小于30°时有效。我做航拍无人机时,客户要求大角度机动,就不能用这个近似了,得用完整的四元数运动学。
2.4 动力学模型简介
动力学模型比运动学更进一步,它考虑“力是怎么产生的”。对于四旋翼,核心是电机转速到力和力矩的映射。
| 控制量 | 电机关系 | 物理意义 |
|---|---|---|
| 总升力 (F_total) | F1 + F2 + F3 + F4 | 控制垂直运动 |
| 滚转力矩 (τ_phi) | L * (F2 - F4) | 控制左右倾斜 |
| 俯仰力矩 (τ_theta) | L * (F1 - F3) | 控制前后倾斜 |
| 偏航力矩 (τ_psi) | M * (F1 - F2 + F3 - F4) | 控制旋转 |
其中L是电机到质心的距离,M是反扭矩系数。每个电机的力F_i ≈ k * ω_i²,k是升力系数。
避坑指南: 我曾经在调试时发现飞机起飞后一直往一边偏,查了三天,最后发现是四个电机的升力系数k不一致。所以,装机后一定要做电机标定,确保每个电机的响应一致。
知识体系总览
下面这张图,是我自己梳理的本章知识结构。你可以把它当作一个“地图”,学完后再回来看,会更有感觉。
好了,这一章的内容就到这里。坐标系、欧拉角、四元数、运动学、动力学——这些概念你可能会觉得有点枯燥,但相信我,它们是后续所有路径规划算法的“语言”。没有这个基础,你写的代码在天上就是一堆乱码。
下一章,我们会进入路径规划的核心——搜索算法。到时候你会发现,今天学的坐标系转换,就是搜索算法的“眼睛”。