3. 嵌入式平台选型与评估:MCU/DSP/FPGA选型、浮点与定点运算单元、实时操作系统(RTOS)选择
做惯导算法移植,选平台这事,我吃过不少亏。
早些年我接手一个无人机项目,团队拍脑袋选了某款高性能MCU,结果跑完初始对准,CPU占用率已经飙到85%。后面还要跑组合导航?想都别想。那次之后,我养成了一个习惯——先算账,再选型。
说白了,捷联惯导对硬件的要求就三条:算力够、精度准、实时稳。咱们一条一条拆开看。
3.1 MCU vs DSP vs FPGA:谁更适合跑惯导?
先给结论:没有绝对的王者,只有合适的搭配。
| 平台 | 优势 | 劣势 | 惯导场景适用性 |
|---|---|---|---|
| MCU(ARM Cortex-M系列) | 功耗低、外设丰富、生态成熟 | 算力有限,浮点运算慢 | 低动态、低更新率(≤200Hz) |
| DSP(TI C6000系列) | MAC运算快、SIMD指令集 | 控制能力弱、外设少 | 高更新率(1kHz+)、纯算法型 |
| FPGA(Xilinx Zynq系列) | 并行流水线、硬核浮点IP | 开发周期长、调试困难 | 多传感器融合、超高帧率 |
我个人习惯这样判断:如果更新率在400Hz以下,用带FPU的MCU就够了。超过1kHz,必须上DSP或FPGA。我做过一个光纤陀螺的项目,数据输出频率2kHz,MCU根本扛不住,换成C6748之后,CPU负载直接从95%降到40%。
核心观点:MCU做控制+通信,DSP做矩阵运算,FPGA做前端并行采集。三者可以混搭,但别让MCU干DSP的活。
3.2 浮点与定点运算单元:精度与速度的博弈
嗯,这里要注意。很多工程师觉得浮点运算精度高,就无脑选浮点。但实际项目中,浮点运算的代价是功耗和延迟。
举个例子,姿态更新中的四元数归一化,用单精度浮点(float32)做一次需要约80个时钟周期。如果用定点Q15格式,只需要20个周期。精度损失呢?我实测过,在1000次迭代后,定点与浮点的角度误差不超过0.001°。对于大多数MEMS惯导来说,这个误差完全可以接受。
为什么会这样?因为惯导算法中很多运算(比如CORDIC旋转、三角函数近似)天生适合定点实现。
我的经验:初始对准和粗对准阶段用浮点,进入纯惯性导航后切到定点。我在一个低功耗穿戴项目里这么干过,功耗降低了35%,精度几乎没变。
定点运算的避坑指南——我曾经因为Q格式选择不当,导致积分运算溢出,导航结果直接飞了。后来我总结了一套规则:
- 角速度积分:Q15(16位有符号,范围±32768,分辨率0.001°/s)
- 加速度积分:Q31(32位有符号,范围±2^31,分辨率0.0001g)
- 四元数更新:Q30(保留2位整数,30位小数)
你想想看,如果选错了Q格式,一个溢出就能让整个导航系统崩溃。所以定点运算的Q值选择,一定要先做极值分析。
3.3 实时操作系统(RTOS)选择:别让调度成为瓶颈
RTOS在惯导系统里不是可选项,是必选项。为什么?因为惯导有严格的时间确定性要求。
我见过有人用裸机跑惯导,中断里做姿态更新,主循环里做导航解算。结果呢?中断一多,姿态更新被延迟,导航精度直线下降。
RTOS的核心价值在于:把时间敏感的任务(IMU数据采集、姿态更新)放在高优先级线程,把非实时任务(日志、通信)放在低优先级。
| RTOS | 抢占式/协作式 | 最小调度延迟 | 适合场景 |
|---|---|---|---|
| FreeRTOS | 抢占式 | ~5μs | MCU平台、资源受限 |
| RT-Thread | 抢占式 | ~3μs | 国产化、组件丰富 |
| VxWorks | 抢占式+优先级继承 | ~1μs | 高安全、航空级 |
| μC/OS-III | 抢占式 | ~4μs | 工业控制、成熟稳定 |
我个人习惯用FreeRTOS,因为它轻量、免费、生态好。但要注意一点:FreeRTOS的tick中断默认是1ms,如果你的IMU更新率是1kHz,那tick中断和IMU中断会打架。解决办法是把tick频率提高到10kHz,或者用时间片轮转替代tick。
警告:不要在ISR里做矩阵求逆!我曾经在中断服务函数里直接调用姿态更新函数,结果因为求逆运算耗时太长,导致其他中断丢失。正确的做法是:ISR只做数据搬运,姿态更新放在高优先级任务里。
3.4 知识体系总览
下面这张图是我自己整理的选型决策流程,你可以参考一下:
这张图的核心逻辑是:先看更新率,再看精度要求,最后选RTOS。别跳步骤,跳了容易翻车。
3.5 实战建议
最后给几条实在的建议:
- 先做性能预算:把姿态更新、导航解算、传感器补偿的耗时算清楚,留出30%余量。我一般用Excel拉一张表,每项运算的时钟周期数都列出来。
- 浮点转定点要谨慎:先浮点仿真,确认精度损失在可接受范围,再转定点。别直接上硬件。
- RTOS的优先级别设太多:3-4级就够了。优先级多了,调度开销反而大。我见过有人设了16级优先级,结果大部分时间花在任务切换上。
- IMU中断优先级最高:这是铁律。IMU数据一旦丢失,导航精度就没了。日志、通信、显示都可以等,IMU不能等。
一句话总结:选平台不是选最贵的,是选最合适的。算力够用、精度达标、实时可控,就是好平台。
公众号:蓝海资料掘金营,微信deep3321