IMU学习
️ 第一部分传感器的底裤它是干什么的IMU 就像是火箭的“小脑”核心由两组六轴或三组九轴微型传感器组成加速度计测“受力”测量直线方向上的加速度。看家本领静态时能感受到“地心引力”利用重力在坐标轴上的分摊通过反正切函数反推出火箭偏离垂直线的绝对倾斜角。死穴极度怕震动发动机一抖数据就乱跳。陀螺仪测“转速”测量设备旋转的角速度°/s。看家本领动态时极其平滑精准完全不怕直线震动。死穴“零点漂移”不认东南西北。要算角度只能靠速度 $\times$ 时间进行积分时间一长微小的误差就会无限累积漂移。算法融合卡尔曼滤波单片机把两者结合运动时相信陀螺仪静止时用加速度计修正陀螺仪的漂移取长补短。 第二部分六轴模式 vs 九轴模式关键选型这两者最核心的区别在于怎么处理 Z 轴自转/航向角的角度。属性六轴算法加速度计 陀螺仪九轴算法六轴 磁力计/指南针Z轴角度含义相对角度相当于秒表绝对角度相当于真指南针0° 的物理意义你在哪里点【设置零位】哪里就是 0°Y轴精准指向地理磁北时才是 0°软件置零按钮有效随时可以强制归零无效不以人的意志为转移它的死穴Z 轴时间长了会产生累计误差漂移极度怕强磁和电流干扰20cm内必死 火箭项目锁死【六轴模式】的根本原因九轴虽然能通过“磁力针”建立绝对坐标系知道 X 和 Y 轴指向地球的东南西北。但火箭内部有大电流、动力电池、以及频繁摆动的舵机全是强磁干扰源。如果开九轴磁力计会被瞬间“闪瞎”导致整个解算崩溃。而火箭升空只需要 X 和 Y 轴保持垂直Z 轴自转就算有漂移或者像钻头一样转圈完全不影响火箭直刺苍穹 第三部分空间感与角度理解如何写控制代码在软件设置为“水平安装”时IMU 平放Z 轴直指天空火箭头部。1. 独立运行的 X 轴与 Y 轴X 轴俯仰 Pitch负责前后点头。Y 轴横滚 Roll负责左右摇摆。物理独立它们各过各的完全可以出现 $X 60^{\circ}$向前暴倾、$Y 0^{\circ}$左右完美对称不歪的情况。2. 角度的范围与正负$\pm180^{\circ}$算法不是量两根线的夹角而是以垂直于地面的那根线作为 0° 起跑线通过重力向量的正负号来判断方向往正方向倒数字变正数$1^{\circ}, 2^{\circ}, 3^{\circ} \dots$ 直到横躺的 $90^{\circ}$。往反方向倒数字变负数$-1^{\circ}, -2^{\circ}, -3^{\circ} \dots$ 直到横躺的 $-90^{\circ}$。分界线火箭完全倒栽葱底朝天时度数在最底端汇合。179.9°跨过去就会瞬间突变成-179.9°。3. TVC推力矢量控制的伪代码逻辑在实际飞行中你只需要让 PID 控制环盯着0° 附近$\pm5^{\circ}$的微小晃动C// 目标让 X 和 Y 轴的 Error 永远趋近于 0 if (Angle_X 0) Move_Servo_X_Negative(); // 火箭向前歪喷嘴向前顶 if (Angle_X 0) Move_Servo_X_Positive(); // 火箭向后歪喷嘴向后顶 if (Angle_Y 0) Move_Servo_Y_Negative(); // 火箭向左歪喷嘴向左顶 if (Angle_Y 0) Move_Servo_Y_Positive(); // 火箭向右歪喷嘴向右顶 // Z轴角度变动火箭在自转随它去喷嘴不需要做任何补偿 第四部分关于“轨迹”的现实幻灭双重积分的陷阱理论上对加速度积分一次得速度积分两次得轨迹。但由于廉价 IMU 存在初始误差Noise位置误差会随时间的平方$t^2$级爆炸放大。单靠 IMU火箭起飞一分钟后测出来的轨迹就会偏出几百米。火箭轨迹的正确解法外援融合1. 垂直高度Z轴轨迹直接读 IMU 模块里内置的气压计数据。2. 水平移动X/Y轴轨迹外接一个GPS 模块传回地面。