飞控数据基础:传感器与日志格式

做飞控仿真也好,真机试飞也罢,你手里最值钱的东西就是数据。没有数据,你连飞机为什么炸了都说不清楚。这一章咱们就聊聊飞控数据到底有哪些种类,它们各自什么脾气,以及日志文件该怎么看。

核心观点:飞控数据是四类传感器的融合结果——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 知识体系总览

下面这张图把本章的核心内容串起来了。你可以看到传感器数据如何汇聚到日志文件,以及频率和精度在其中的作用。

飞控数据种类与日志格式知识体系 飞控数据知识体系 IMU 加速度计+陀螺仪 GPS 位置+速度+航向 气压计 高度测量 磁力计 航向测量 数据频率 数据精度 日志文件格式 .bin(二进制) .log(文本) 理解传感器特性 → 选择合适频率 → 采集高质量数据 → 正确解析日志

这张图把本章的知识点串起来了。从四种传感器出发,到频率和精度这两个关键属性,再到日志文件的两种格式。你可以在后续章节中反复参考这张图。

个人建议:刚开始做SITL仿真时,别急着调参数。先花点时间把日志文件的结构搞清楚。我见过太多人连.bin和.log都分不清,就开始分析数据——结果分析了个寂寞。