030、姿态表示:方向余弦矩阵(DCM)

030、姿态表示:方向余弦矩阵(DCM) 飞控算法从入门到精通 · 030 · 姿态表示:方向余弦矩阵(DCM)一、一次炸机事故的复盘去年夏天,我在调试一架四轴飞行器的姿态解算模块。地面站里,欧拉角曲线在悬停时突然跳变——俯仰角从2度瞬间跳到-15度,紧接着飞机侧翻炸机。事后分析日志,发现是方向余弦矩阵(DCM)在更新时出现了数值漂移,导致旋转矩阵不再正交,最终姿态解算彻底崩掉。那次之后我意识到,很多人(包括当年的我)把DCM当成一个“数学工具”来用,却忽略了它在嵌入式环境下的工程陷阱。今天这篇笔记,就从DCM的本质讲起,重点说那些教科书不会告诉你的坑。二、DCM到底是什么?别被矩阵吓住方向余弦矩阵,本质上就是一个3x3的旋转矩阵。它的每一列(或每一行,取决于你用的坐标系约定)代表机体坐标系的一个轴在参考坐标系下的投影。举个例子:假设你有一个向量在机体坐标系下是[1,0,0](即机头方向),乘以DCM后得到它在NED坐标系下的坐标。这个矩阵的9个元素,每一个都是两个单位向量夹角的余弦值——所以叫“方向余弦”。但实际工程中,你根本不需要去算那些余弦值。DCM的更新靠的是陀螺仪角速度积分,而不是查三角函数表。这一点很重要:DCM是微分方程驱动的,不是静态几何计算出来的。三、DCM更新方程:这里踩过坑DCM的更新方程是:dC/dt = C * [ω]×其中[ω]×是角速度的反对称矩阵。