3. 日志获取方式

做无人机飞控这么多年,我越来越觉得——日志就是飞行器的「黑匣子」。没有日志,你连飞机为什么炸机都说不清楚。今天咱们就聊聊日志怎么拿到手。说白了,就三种路子:从SD卡里扒、通过MAVLink实时拽、或者上云端直接调。

这三种方式各有各的脾气。我建议你根据场景来选,别一根筋。

3.1 从SD卡读取日志

这是最传统、也最靠谱的方式。飞控板上插一张MicroSD卡,飞完拔下来,插电脑上读。嗯,就这么简单。

但这里头有几个坑,我踩过不止一次。

⚠️ 注意: SD卡的文件系统必须是FAT32或exFAT。我遇到过有人用NTFS格式的卡,飞控根本不认,飞了半天一条日志都没存下来。

日志文件一般长这样:

2024-03-15 14-32-10.log
2024-03-15 15-10-05.log
2024-03-16 09-22-33.log

文件名里带了时间戳,方便你按时间找。我个人习惯是每次飞行前格式化一次SD卡,避免旧日志把空间占满。

读取步骤:

  1. 断电后拔出SD卡
  2. 用读卡器连电脑
  3. 找到 /APM/LOGS/ 或 /logs/ 目录
  4. 把 .log 或 .bin 文件拷贝出来
  5. 用 Mission Planner 或 QGroundControl 打开分析
💡 小技巧: 如果你用的是Pixhawk,日志默认存在 APM/LOGS/ 下。但有些固件版本会存在 logs/ 里。找不到的时候,两个目录都翻翻。

SD卡读取的好处是数据完整,不受通信干扰。坏处是你得落地才能看,不能实时监控。我在项目里遇到过飞控在空中SD卡写满的情况,结果日志后半段全丢了。后来我养成了习惯——每次起飞前检查剩余空间。

3.2 通过MAVLink实时下载日志

这个方式就高级一点了。飞机还在天上飞,你就能通过数传电台或者4G模块,把日志一段一段拽下来。

MAVLink协议里专门有个命令叫 MAV_CMD_LOG_REQUEST_DATA。你想想看,地面站发一个请求,飞控就把指定地址的日志数据包发回来。说白了就是远程扒数据。

常用流程:

  1. 地面站发送 LOG_REQUEST_LIST 获取日志列表
  2. 选择要下载的日志序号
  3. 发送 LOG_REQUEST_DATA 逐块下载
  4. 接收并拼接数据包
  5. 保存为本地文件

代码示例(伪代码,实际用MAVLink SDK):

// 请求日志列表
mavlink_msg_log_request_list_send(
    MAVLINK_COMM_0,
    target_system,
    target_component,
    0,          // 起始序号
    0xFFFF,     // 结束序号
);

// 收到日志条目后,请求具体数据
mavlink_msg_log_request_data_send(
    MAVLINK_COMM_0,
    target_system,
    target_component,
    log_id,     // 日志ID
    0,          // 偏移地址
    0xFFFFFFFF  // 数据长度
);
⚠️ 注意: 实时下载会占用数传带宽。如果你用的是915MHz数传,速率只有几十kbps,下载一个大日志文件可能要十几分钟。我曾经在项目里一边飞一边下日志,结果数传链路被日志占满,遥控指令都发不过去了。嗯,那次差点炸机。

实时下载的好处是你能在飞行中发现问题。比如某个传感器数据异常,你当场就能看到日志里的原始值。坏处是——通信不稳定的话,下载会中断,日志文件就坏了。

💡 建议: 实时下载只适合小文件(比如参数文件、短时日志)。大日志还是老老实实落地后读SD卡吧。

3.3 云端日志管理平台

这个是我最近几年用得越来越多的方式。飞控通过4G模块或者Wi-Fi,把日志自动上传到云端。你坐在办公室,打开浏览器就能看。

市面上主流的平台有:

平台名称 特点 适用场景
ArduPilot Cloud 免费,与Mission Planner集成 个人开发者、小团队
DroneLogbook 支持多机管理,有分析工具 商业运营、巡检
FlytBase 企业级,支持API 大规模机群管理
自建平台 灵活,数据私有 军工、保密项目

云端平台的核心逻辑其实不复杂:

飞控 → 4G模块 → MQTT/HTTP → 云服务器 → 数据库 → Web前端

我参与过一个农业植保项目,20架无人机同时作业。每架飞机每10分钟上传一次日志片段。云端平台自动分析,发现哪架飞机的电机温度异常,直接弹窗报警。你想想看,要是靠人工去读SD卡,20架飞机得读到什么时候?

🔑 关键点: 云端日志管理不只是存储,更重要的是自动化分析。你可以设置规则——比如「电池电压低于3.5V时自动标记为异常」——平台会帮你筛选出有问题的日志。

但云端方式也有短板。网络覆盖不到的地方(比如深山、海上),日志就传不上来。我建议你做个混合方案:SD卡做本地备份,云端做远程监控。两套都跑,谁也不耽误谁。

三种方式对比

特性 SD卡读取 MAVLink实时下载 云端平台
实时性 低(落地后) 中(飞行中) 高(自动上传)
数据完整性 高 中(受通信影响) 中(受网络影响)
操作复杂度 低 中 高(需配置网络)
适用规模 单机 单机/小规模 大规模机群
成本 低(仅需SD卡) 中(需数传模块) 高(需4G/云服务)

我个人习惯是:日常调试用SD卡,飞行测试用MAVLink实时看关键参数,正式运营上云端。三种方式互补,别死磕一种。

💡 最后提醒一句: 不管你用哪种方式,拿到日志后第一件事——检查时间戳。我遇到过好几次日志时间不对,分析半天才发现是飞控的RTC电池没电了。嗯,这种低级错误,犯一次就够了。
日志获取方式知识体系 日志获取方式 从SD卡读取 拔卡 → 读卡器 → 拷贝 文件系统:FAT32 MAVLink实时下载 LOG_REQUEST_DATA 注意带宽占用 云端日志管理平台 4G/Wi-Fi上传 自动化分析 建议:SD卡做本地备份 + 云端做远程监控 = 最佳实践