083 运动控制中的坐标系变换:欧拉角与四元数一、从一次炸机事故说起去年调试四轴飞行器,飞控板是自研的STM32F4方案,IMU用的MPU9250。一切看起来都很完美——卡尔曼滤波跑得稳,PID参数调得顺。直到某天,我让飞机做一次简单的“低头-抬头”动作,结果它直接翻了个跟头,螺旋桨打在地上,电机轴弯了两根。事后复盘,问题出在坐标系变换上。我用了欧拉角做姿态表示,但在某个特定角度下,万向锁(Gimbal Lock)让俯仰和偏航耦合了。飞控以为自己在做俯仰,实际上偏航也在跟着转。这就是典型的“欧拉角陷阱”。从那以后,我的运动控制代码里,欧拉角只用来做可视化显示,内部运算全部换成四元数。今天这篇笔记,就把这些坑和解决方案掰开揉碎讲清楚。二、欧拉角:直观但危险欧拉角用三个角度描述刚体姿态:绕Z轴转(偏航Yaw)、绕Y轴转(俯仰Pitch)、绕X轴转(横滚Roll)。听起来很直观,对吧?但实际用起来,问题一个接一个。2.1 万向锁:不是理论问题,是工程灾难先看一个具体场景。假设你的无人机正在悬停,此时俯仰角接近90度(机头朝下)。这时候,偏航和横滚的旋转轴重合了——你失去了一个自由度。更可怕的是,当俯仰角经过90度时,偏航角会瞬间跳变180度。我踩过的坑:在PID控制器里直接对欧拉角做微分。当飞机快速通过俯仰90度时,偏航角从179度跳变到-179度,微分项直接爆炸,电机输出瞬间满油门。后果?上面说了,炸机。别这样写: