飞控数据基础:传感器与日志格式
做飞控仿真也好,真机试飞也罢,你手里最值钱的东西就是数据。没有数据,你连飞机为什么炸了都说不清楚。这一章咱们就聊聊飞控数据到底有哪些种类,它们各自什么脾气,以及日志文件该怎么看。
核心观点:飞控数据是四类传感器的融合结果——IMU、GPS、气压计、磁力计。每种传感器都有自己的频率、精度和局限,理解这些是后续数据质量分析的前提。
2.1 四大传感器数据家族
飞控系统里,传感器就那么几种。我刚开始接触Pixhawk时,总觉得传感器越多越好。后来发现,每种传感器都有它的“舒适区”和“死穴”。
2.1.1 IMU(惯性测量单元)
IMU是飞控的“内耳”,负责感知自身的加速度和角速度。它由三轴加速度计和三轴陀螺仪组成,有些还包含磁力计(但通常磁力计单独归类)。
- 加速度计:测量三轴加速度(m/s²),包含重力分量。静止时,Z轴读数为9.8 m/s²左右。
- 陀螺仪:测量三轴角速度(rad/s或°/s),告诉你飞机转得有多快。
IMU的数据频率通常很高。在SITL仿真中,我习惯把IMU频率设在200Hz到400Hz之间。为什么这么高?因为姿态控制需要快速响应。你想想看,如果IMU每秒只报10次数据,飞机早就翻了个儿了。
| 传感器 | 典型频率(Hz) | 典型精度 | 我的经验值 |
|---|---|---|---|
| 加速度计 | 100 - 400 | ±0.01 m/s²(静态) | SITL中设200Hz够用 |
| 陀螺仪 | 100 - 400 | ±0.05 °/s(静态) | 真机建议400Hz |
避坑指南:我曾经在SITL仿真里把IMU频率降到50Hz,结果姿态解算直接发散。后来查了半天才发现是频率太低,导致积分误差累积太快。嗯,这里要注意:IMU频率不能低于控制环路频率的2倍。
2.1.2 GPS(全球定位系统)
GPS提供位置、速度和航向信息。它的数据频率比IMU低得多,通常只有5Hz到20Hz。精度方面,民用GPS的水平定位误差在2-5米左右,垂直误差更大。
我个人习惯在SITL仿真中把GPS设为10Hz,因为再高也没什么意义——GPS的更新率受卫星信号和接收机限制。真机测试时,我遇到过GPS信号被高楼遮挡的情况,位置数据直接跳变了几十米。所以,千万别把GPS当作唯一的位置来源。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 更新频率 | 5 - 20 Hz | SITL默认10Hz |
| 水平精度 | 2 - 5 m(CEP) | 受多径效应影响 |
| 垂直精度 | 4 - 8 m | 比水平差一倍 |
| 速度精度 | 0.1 - 0.5 m/s | 多普勒测速 |
2.1.3 气压计
气压计用来测量大气压强,进而推算高度。它的频率通常在25Hz到100Hz之间。精度嘛,静态条件下可以做到±0.1米,但一有风或者温度变化,误差就大了。
我记得有一次在SITL仿真中,故意给气压计加了噪声,结果高度控制出现了明显的抖动。后来我加了一阶低通滤波,才把问题压下去。说白了,气压计数据必须滤波,否则没法用。
2.1.4 磁力计
磁力计测量地球磁场,用来确定航向(偏航角)。它的频率一般在50Hz到100Hz。但磁力计有个大问题——容易受干扰。电机、电源线、甚至地下的钢筋都会让它“发疯”。
警告:磁力计校准不是可有可无的步骤。我曾经在真机上没做磁力计校准就起飞,结果飞机在空中画圈。后来发现是机架上的电流产生了干扰磁场。SITL仿真中虽然没这个问题,但你得学会如何处理磁力计数据。
2.2 数据频率与精度:匹配的艺术
不同传感器的数据频率差异很大。IMU跑得飞快,GPS慢吞吞,气压计和磁力计居中。飞控系统需要把这些数据融合起来,才能得到稳定可靠的姿态和位置估计。
为什么会这样?因为每种传感器都有它的“短板”:
- IMU:短期精度高,但长期积分会漂移。
- GPS:长期稳定,但更新慢,且容易丢星。
- 气压计:高度测量稳定,但受天气影响。
- 磁力计:航向测量稳定,但易受干扰。
飞控里的卡尔曼滤波器就是干这个的——把高频但会漂移的IMU数据,和低频但稳定的GPS/气压计/磁力计数据融合起来。你想想看,如果没有这个融合,光靠IMU积分,10秒后位置误差就能到几十米。
关键点:数据融合的前提是理解每种传感器的频率和精度。如果你采集的数据本身质量差,再好的滤波器也救不了。这就是为什么我们要做数据质量分析。
2.3 日志文件格式:bin与log
ArduPilot和PX4的日志文件主要有两种格式:.bin和.log。我刚开始用的时候也搞不清楚区别,后来踩过坑才明白。
2.3.1 .bin格式(二进制)
.bin是二进制格式,体积小、写入快。飞控在飞行中主要用这种格式记录数据。它的结构是:
- 文件头:包含固件版本、参数等元信息。
- 消息块:每条消息包含时间戳、消息类型ID和数据。
- 结束标记:文件结束标识。
解析.bin文件需要专门的工具,比如Mission Planner的日志查看器,或者mavlogdump.py脚本。
# 用mavlogdump.py解析bin文件
python mavlogdump.py --types GPS,IMU flight_log.bin
2.3.2 .log格式(文本)
.log是文本格式,可以直接用文本编辑器打开。它的优点是可读性强,但文件体积大,写入速度慢。通常只在调试时使用。
我个人习惯:真机飞行用.bin,SITL仿真调试用.log。为什么?因为仿真时数据量不大,文本格式方便我直接查看和搜索。
| 特性 | .bin格式 | .log格式 |
|---|---|---|
| 存储方式 | 二进制 | 文本(ASCII) |
| 文件大小 | 小(约1/5) | 大 |
| 写入速度 | 快 | 慢 |
| 可读性 | 需工具解析 | 可直接查看 |
| 适用场景 | 真机飞行 | SITL调试 |
2.4 知识体系总览
下面这张图把本章的核心内容串起来了。你可以看到传感器数据如何汇聚到日志文件,以及频率和精度在其中的作用。
这张图把本章的知识点串起来了。从四种传感器出发,到频率和精度这两个关键属性,再到日志文件的两种格式。你可以在后续章节中反复参考这张图。
个人建议:刚开始做SITL仿真时,别急着调参数。先花点时间把日志文件的结构搞清楚。我见过太多人连.bin和.log都分不清,就开始分析数据——结果分析了个寂寞。