很多玩大疆的朋友,飞了几年机,素材存了一堆,却从来没认真看过飞机自己生成的这些文件。等到真出了问题——比如说飞着飞着突然失控掉下来,或者返航高度设置错误导致撞楼——才想起来去翻记录,结果打开文件夹一看,一堆.DAT、.txt、.SRT,完全不知道哪个对应哪个,更不知道怎么从里面挖出有用信息。
我最早碰这个,是因为一次挺窝火的“炸机”。当时飞机悬停状态下突然自己往右飘,我打杆拉回来,结果它越飘越快,最后撞树。大疆客服让我传飞行记录,我心里想,啥是飞行记录?后来折腾了半天才搞明白,原来飞机和遥控器里都存着完整的飞行数据,只是平时根本没人去注意。从那以后,我把DJI的各种文件格式、读取方式、分析逻辑从头到尾摸了一遍,今天这篇就当是给同好们的一份详细解读,把我踩过的坑和摸索出来的方法一次性说清楚。
这篇文章主要面向三类人:一是飞丢、炸机之后需要做事故分析的用户,二是想拿飞行数据做精细化复盘的老飞手,三是做无人机维修、二手检测的从业者。无论你是哪一种,看完这篇你至少能知道大疆无人机的文件都存在哪、每种文件的格式和内容是什么、怎么把里面的数据读出来并正确解读,以及哪些工具能帮你少走弯路。
1. 开始之前:大疆无人机的文件有哪几类,各自有什么用
大疆无人机在飞行过程中会生成多种文件,分布在飞机本体、遥控器、手机App三个终端上。很多人以为只有TF卡里的照片和视频是“素材”,实际上飞机内部的存储芯片里还记录着海量飞行参数,这些才是事故分析和飞行复盘的关键。
1.1 三个终端的文件构成一览
先捋一下大疆的文件都“藏”在哪几个位置,这决定了你之后找数据的方向。
飞机机身(以Mavic、Air、Mini系列为例),主要产生三类文件:一是相机拍摄的照片和视频,存储在TF卡或内置存储中;二是飞行数据记录文件,也就是常说的.DAT文件,存在机身内部存储器里,对应每一次飞行的完整参数流;三是缓存的缩略图和部分元数据文件,通常也在内置存储中。其中.DAT文件是事故分析时最核心的“黑匣子”数据。
遥控器方面,大疆很多机型(尤其是带屏遥控器)也会生成一个.DAT文件,对应的是遥控器端的指令记录,包括摇杆输入、按键操作、遥控器和飞机之间的通信质量等等。对于不带屏幕的普通遥控器,数据则通过手机App记录。
手机App端是最容易被忽视的,但其实也是普通用户最方便获取数据的地方。飞前飞后打开DJI Fly或DJI GO,App会在本地目录生成flightRecord文件夹,里面存放以.txt或.dat为后缀的飞行记录文件,这些记录包含了飞行时间、飞行轨迹、高度、速度、姿态角、电机转速、电池电压、GPS信号、遥控信号等关键信息。更重要的是,App里的文件后缀虽然是.txt或.dat,但实际内容是加密的,不能直接用文本编辑器打开,需要用专门工具解析。
1.2 每种文件的格式特征与命名规则
先说机身.DAT文件。以大疆Mini 3 Pro为例,当飞机完成一次飞行后,会在内置存储中生成一个名字类似DJI_20240615_102443_001.DAT的文件,命名规则是DJI_拍摄日期_时间_序号。早期机型(如Phantom 4、Mavic 2)的.DAT文件命名可能略有差异,有些是FC_20240615_102443.DAT这样的前缀,但逻辑都是按时间排序。这个文件内部是二进制格式,记录了从电机解锁到电机停转的全部过程,采样频率非常高(部分参数能达到100Hz甚至更高),所以单个文件体积往往在几十MB到几百MB不等。
再说手机App日志。在iOS设备上,DJI Fly的飞行日志存储在App的Documents目录下;Android设备上则位于Android/data/dji.xxx.v5/目录下。不同机型、不同App版本的路径不完全一样,但你只要在手机文件管理器里搜索flightRecord就能找到那个文件夹。里面的文件后缀名一般是.txt(旧版DJI GO)或.dat(新版DJI Fly),但真实格式是经过加密和压缩的,直接打开是乱码。后面我会专门讲怎么解析它们。
最后是媒体文件本身。照片和视频也包含了大量元数据,比如拍摄地点的经纬度、海拔、飞行器型号、云台姿态、镜头参数等等,这些信息以EXIF格式嵌入在文件头部。用EXIF读取工具就能看到,甚至用Windows系统的文件属性就能查看一部分。这部分虽然不像飞行日志那样能还原整个飞行过程,但在需要证明“照片是在哪里拍的”时非常有用。
提示:如果你发现飞机的内置存储或手机里找不到对应日期的飞行记录,先别急着判定文件损坏。很多情况下是App没有自动同步,或者飞行时根本没连接手机。养成飞行结束后打开App查看飞行记录的习惯,比事后翻找要省事得多。
2. 飞行记录文件深度剖析:机身.DAT与手机日志到底有什么不同
很多人第一次接触飞行记录时会疑惑:为什么手机日志里已经能看到飞行轨迹了,还要去解析机身的.DAT文件?两者记录的内容和侧重点其实完全不一样,理解这个区别,你才知道在什么场景下该用哪个文件。
2.1 机身.DAT文件:飞控级的“原始录音”
机身.DAT文件是飞控系统直接写入的原始数据流,它的地位相当于航空器上的飞行数据记录器(FDR,就是我们常说的“黑匣子”)。这个文件记录的数据维度非常全,远不止手机App里那几十个字段。
以Mavic 3的.DAT文件为例,里面大致包含以下信息:
- IMU传感器原始数据:三轴加速度计、三轴陀螺仪的原始输出,单位是m/s²和rad/s,带时间戳
- 气压计数据:由气压换算出来的气压高度和垂直速度
- GPS数据:卫星数量、经纬度、海拔、水平速度、垂直速度、位置精度(HDOP/VDOP)
- 电机数据:四颗电机的转速(早期电机记为RPM,新机型直接反推为PWM值)、电流、温度
- 电池数据:电压、电流、剩余电量、电芯电压、电池温度、放电电流
- 姿态数据:俯仰角、横滚角、偏航角,以及角速度
- 控制数据:飞控输出的PWM值、遥控器输入的摇杆原始值
- 状态信息:飞行模式(定位、姿态、返航、一键短片等)、告警标志位(低电量、卫星数不足、前视避障失效等)
- 机臂角度、螺旋桨状态、传感器校准状态等其他杂项
正因为这些数据以二进制方式连续记录,所以解析起来比手机日志难得多,但信息含量也高得多。举个例子,手机日志只会告诉你“高度从50米掉到了20米”,而.DAT文件里可以看到掉高度的那0.5秒内,四个电机的转速分别发生了什么变化、IMU的加速度计报了什么样的异常值、飞控当时发出了什么告警——这才是还原事故真相的关键。
2.2 手机App日志:面向事件的友好记录
手机App日志(flightRecord目录下的.dat/.txt文件)则可以理解为飞控数据的一个“摘要”版本。它由App在飞行过程中实时向飞控请求数据,再按一定频率记录下来。它的记录频率通常只有1Hz到10Hz(具体取决于App版本和飞行模式),字段数会精简到几十个,主要包括时间、经纬度、高度、速度、姿态角、电池电压、剩余电量、飞行模式、遥测信号强度、卫星数、返航点信息等。
手机日志的好处是解析门槛低。你可以直接用大疆官方的DJI Fly飞行记录查看器(网页版)、AirData等第三方平台上传解析,几秒钟就能生成飞行轨迹和基础参数图表。它也是大疆客服在分析问题时首先要求你提供的东西。
但要注意,手机日志有一个致命限制:它的数据可能不连续。如果飞行过程中手机与遥控器之间的连接断开了(比如飞行距离过远、手机锁屏导致App后台休眠、数据线松动),App就会在日志中留下断档,断开期间的数据只能从机身.DAT文件里找。
2.3 什么时候必须上.DAT文件
根据我处理过的案例经验,大致可以按下面这张表判断该用哪份数据:
| 场景 | 首选数据源 | 说明 |
|---|---|---|
| 飞行轨迹回放、速度高度统计 | 手机日志 | 足够直观,解析快,工具多 |
| 电池电压骤降、动力不足 | 机身.DAT | 手机日志里电池数据太稀疏,看不出电压跌落瞬间的细节 |
| 姿态异常、突然漂移 | 机身.DAT | 需要看IMU原始数据来确认传感器是否跳变 |
| GPS信号丢失、返航异常 | 机身.DAT + 手机日志配合 | 手机日志看时间线,.DAT看卫星数和健康度细节 |
| 电机动力异常、桨叶受损 | 机身.DAT | 电机转速记录只在.DAT里 |
| 大疆客服要求提交证据 | 手机日志优先 | 客服的工单系统只收flightRecord导出的文件 |
可以看出,手机日志更多是“宏观记录”,机身.DAT才是“微观证据”。当你需要做严谨的事故分析时,不要只依赖手机日志,一定要想办法把机身.DAT也导出来。
注意:机身.DAT文件在飞机物理损坏时可能无法读取,因为存储芯片可能损坏或飞控板断裂。如果飞机还能上电或能通过数据线连接电脑,尽量第一时间导出。千万别等飞机彻底没电了再去导,存储芯片在没电状态下数据不会丢,但读卡器或数据线连接不稳定的情况下反复断电可能造成数据不完整。
3. 照片与视频的隐藏信息:EXIF元数据解读与批量提取
飞行日志聊完了,接下来聊聊最常见的照片和视频文件。大部分人的认知停留在“照片就是照片”,但实际上大疆在每张照片和每段视频里都嵌入了一整套元数据。做无人机测绘、航拍取证,或者单纯想整理素材库,读元数据都能省很多事。
3.1 一张航拍照片里藏了多少信息
以大疆Air 3拍摄的一张JPG照片为例,用EXIF阅读器打开,你会发现除了常见的相机型号、光圈、快门、ISO、焦距之外,还有这么几类跟无人机强相关的字段:
- GPS经纬度(GPSLatitude/GPSLongitude),记录的是相机拍摄时的实际位置
- GPS高度(GPSAltitude),高于海平面的绝对高度
- 飞行器偏航角(FlightYawDegree),拍摄时机头的朝向
- 云台俯仰角(GimbalPitchDegree),镜头俯仰角度
- 云台横滚角(GimbalRollDegree)
- 飞行器滚转角、俯仰角(FlightRollDegree/FlightPitchDegree)
- 相对高度(RelativeAltitude),相对于起飞点的高度
- 航线方向、速度、水平距离等扩展字段
这些字段大多数情况下用于后期影像管理软件自动分类,比如Lightroom可以按拍摄地点把照片铺在地图上。而在事故分析中,EXIF信息也能辅助判断拍摄当时的飞机状态,尤其是当飞行日志缺失时,EXIF能提供飞行末段的位置和时间参考。
3.2 用Python批量提取航拍照片元数据
手动一张张右键看属性效率太低。我一般直接用Python的exifread或者Piexif库来批量提取。下面是实际试过的一套脚本,能把一个文件夹里所有航拍照片的关键参数一次性导出成CSV。
import os import csv import exifread folder = "./DJI_photos" output = "./photo_meta.csv" fields = [ "FileName", "DateTimeOriginal", "GPSLatitude", "GPSLongitude", "GPSAltitude", "RelativeAltitude", "FlightYawDegree", "GimbalPitchDegree", "CameraModel" ] rows = [] for name in os.listdir(folder): if name.lower().endswith((".jpg", ".jpeg")): path = os.path.join(folder, name) with open(path, "rb") as f: tags = exifread.process_file(f, details=False) row = [name] for tag in fields[1:]: raw = tags.get(f"EXIF {tag}") or tags.get(f"GPS {tag}") or tags.get(f"Image {tag}") if raw: row.append(str(raw)) else: row.append("") rows.append(row) with open(output, "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(fields) writer.writerows(rows) print(f"Done, {len(rows)} files exported to {output}")运行前记得先装库:
pip install exifread跑完输出的CSV可以直接拖进Excel或Python的pandas里继续处理。如果你是摄影爱好者,也可以把GPS信息导入到Google Earth生成拍摄轨迹,这个思路在整理长途旅行航拍素材时特别实用。
注意:大疆的DNG原始格式(RAW)文件同样包含EXIF信息,但字段名有时跟JPG不完全一致。如果脚本读不到某个字段,先拿一张DNG测试,用exifread打印所有可读标签看看实际字段名,再改脚本,别硬套。
3.3 视频文件的SRT字幕坐标信息
大疆在录制视频时,默认会生成一个同名的.SRT字幕文件,很多朋友以为这只是个可有可无的文本,实际上它每几秒就记录一次时间、经纬度、高度和云台参数。格式大概长这样:
00:00:02,500 --> 00:00:05,000 GPS(31.123456,121.654321) H(120.5m) D(-30.2m) Y(182.3°) P(-45.0°)这里H对应海拔高度,D对应相对起飞点高度,Y是机头偏航,P是云台俯仰。用这个文件,即使原始视频被各种平台压缩过,你还是能找回拍摄地点的原始坐标。我处理过不少二手无人机买卖纠纷,卖方提供的视频被微信转发过多轮,画质已经糊了,但一打开SRT文件,拍摄地点清清楚楚——这份文件经常被忽略,但确实是个很硬核的信息源。
4. 从文件到结论:异常飞行判读的一次完整实操
纸上谈兵没意思,下面走一遍完整的异常飞行分析流程。假设你遇到一次“悬停突然掉高、打杆没反应”的事故,飞机没摔坏太多,存储还完好。接下来我按我自己习惯的顺序一步步来。
4.1 导出文件并准备解析环境
第一步是从飞机里导出.DAT文件。将飞机开机或连接电脑,在存储目录里找到当天的.DAT文件,拷贝到电脑上。接着从手机App里找到对应的flightRecord文件。如果你的手机App还能正常打开日志列表,最快的方式是把日志导出为“飞行记录”文件(DJI Fly里叫“导出/Exports”),这个文件后缀是.dat,其实内部是带加密头的JSON结构。
然后用解析工具。我最常用的组合是:先拖进AirData网页版快速看轨迹和基础曲线,再用本地工具解析.DAT看原始参数。AirData免费版够用,上传后它会自动识别机型、生成3D轨迹回放和几十个参数曲线图,非常直观。
4.2 从告警与报警标志开始看
拿到AirData的曲线后,别急着去看姿态曲线,先看“告警事件”列表。告警事件是App根据飞控标志位整理出来的,比如“电池电压过低”“GPS卫星数不足”“前视避障传感器错误”等。这些事件能帮你快速划定时间窗口:比如告警显示在飞行第2分30秒出现了“动力电机过载”,那么之后的分析就集中在2分20秒到2分40秒这一段。
这次“悬停掉高”事故的日志显示,在2分30秒前后出现了一条“电机转速不一致”的告警。这个信息很关键,至少说明问题出在动力系统而不是飞控软件或GPS。
4.3 参数联动:电压、转速、姿态角相互验证
划定时间窗口后,重点看以下几组参数:
- 电池电压:有没有瞬间掉压?如果四节电芯里某一节电压明显低于其他三节,说明该电芯内阻异常,大电流放电时电压崩溃,导致飞控判定动力不足。
- 电机转速:四颗电机的PWM输出是否一致?如果有一个电机的PWM突然冲到顶而其他三个没跟上,说明那个电机的负载异常(可能桨叶损伤、电机卡阻),或者飞控正在用最大输出补偿姿态偏差。
- 姿态角变化:横滚角和俯仰角有没有在那几秒内发生快速震荡?这能反映飞机是否产生了难以控制的偏转趋势。
- 摇杆输入:遥控器的摇杆原始值是怎样的?如果用户确实没有打杆,飞机却在横滚方向持续偏转,那就要怀疑IMU漂移或电机输出不平衡。
在我们这个案例里,电压曲线在第2分28秒出现了一个明显的尖峰跌落,八电芯电压从正常的3.85V跌到3.5V,同时右后电机PWM瞬间从45%跳到78%。两者联动,可以判断是右后电机遇到了额外阻力,导致飞控尝试用更大的输出补偿,高电流又进一步拉低了整组电池电压。姿态曲线的轻微右倾也印证了补偿动作。
当然,只看曲线还不够,最好再结合气压计高度看是否持续掉高。果然,从2分29秒到2分33秒,高度从悬停的15米缓慢掉到了11米,同时垂直速度显示持续为负。这样基本可以下结论:动力系统异常(大概率是右后电机或桨叶)导致悬停时无法保持高度,飞控一直在饱和输出尝试补救,但电池电压下降快,最终触发了低电压保护和迫降逻辑。
4.4 对应到实际处理方法
分析完成后,处置建议就很明确了:拆下右后机臂的电机和桨叶检查,确认是否桨叶变形、电机轴承卡顿;顺手检查四颗电机的磁钢位置是否正常;之后对电池做一次完整充放电循环,看看单电芯压降是否还在健康范围内。如果电机正常、电池循环多次后电压依旧均衡,说明这次是偶然的外部阻力(比如碰到了细树枝),可以继续飞,否则建议更换对应组件。
这次实操下来你会发现,读日志不是单纯地盯着一根曲线看,而是要像破案一样把多组参数拼接起来——电压告诉你能不能供电,转速告诉你电机是否出力,姿态告诉你飞机实际状态,三个维度对上才叫证据链完整。
5. 常用工具与避坑清单:从官方到第三方的选型建议
工具选不对,效率差十倍。我把这几年用过的工具按官方、第三方、脚本三档整理了一份清单,顺便把使用频率和坑点也写上,方便你直接照抄作业。
5.1 官方与主流工具对比
| 工具名称 | 定位 | 能做什么 | 已知缺点 |
|---|---|---|---|
| DJI Fly / DJI GO App | 官方App | 本机飞行记录管理、导出截图和数据包 | 只保留最近飞行记录,老记录会被覆盖 |
| DJI Assistant 2 | 官方调参软件 | 升级固件、校准IMU、导出部分飞行数据 | 不同机型版本不同,导出数据格式不够直白 |
| DJI Flight Log Viewer(网页) | 官方网页版日志解析 | 上传.dat日志,生成轨迹回放和参数图表 | 只支持手机日志,不支持机身.DAT |
| AirData UAV Cloud | 第三方云端平台 | 极佳的轨迹回放和参数曲线,支持事故分析模式 | 免费版功能有限,导出原始参数需要付费 |
| CsvView / DatCon | 第三方本地工具 | 把.DAT文件转成CSV,再结合CsvView绘图 | 需要一定上手时间,对新机型支持有延迟 |
| 自写Python解析脚本 | 完全可控 | 针对特定机型分析特定参数,自由度高 | 需要懂C#基础,不推荐没编程经验的人用 |
如果你完全零基础,我的建议是:手机日志用DJI Flight Log Viewer快速回放,稍微进阶一点用AirData做事故分析,然后等需要深挖.DAT文件时再上DatCon/CsvView这类工具。千万别一开始就啃.DAT转CSV,那会劝退你。
5.2 笔记本上的CsvView/DatCon操作步骤
以DatCon转.DAT为例,操作流程大概是:
- 从GitHub或官网下载适配你系统的DatCon和CsvView。
- 把.DAT文件拖进DatCon窗口,DatCon会识别机型。
- 选择输出CSV的路径,点击转换。完成后会生成一个包含几十列参数的CSV文件。
- 用CsvView导入生成的CSV,左侧选择要显示的参数,右侧就会自动出曲线图。
这个流程看着简单,但有几个容易踩的坑:一是DatCon对非常新的机型支持很慢,新机刚发布头几个月里,往往只有老外做的预览版支持;二是.DAT文件如果经过手机App的“导出并清除”操作,可能被截断,导致DatCon解析时报错;三是转换后的CSV列名跟机型强相关,不要用A机型的列名去套B机型。
注意:解析.DAT文件时一定要确认从飞机拷贝出来的文件是完整的。大疆飞机通过USB连接电脑时,部分机型会在电脑上弹出两个存储盘:一个是TF卡,一个是内部存储。.DAT文件通常在内置存储的
MISC或FlightData目录下。如果你直接拔插USB导致文件拷贝中断,日志就是截断的,后面解析必出怪问题。
5.3 尽量别用“数据恢复软件”硬扫描存储卡
还有一个建议:不到万不得已,不要用市面上的通用数据恢复软件去扫飞机的TF卡。很多飞友炸机后拿Recuva之类工具扫了一晚上,恢复出一堆RDAT、PDS等奇怪后缀的文件,开心坏了,结果发现没有一个能解析。原因是大疆在写入文件时并不是简单地连续存储,日志文件可能被分片写在多个区域,恢复工具只能捞出碎片。真要恢复数据,先尝试飞机自身上电拷贝,再尝试把TF卡插到读卡器上直接打开,这类通用恢复软件通常在最后一步才会用到。
6. 常见问题排查实录与修复技巧
读日志这件事,十次里有八次会遇到奇奇怪怪的问题。下面几个是我自己踩过、也帮身边飞友处理过的典型问题,列成速查表,遇到类似情况不用慌。
6.1 常见问题速查
| 问题现象 | 可能原因 | 建议解决思路 |
|---|---|---|
| 手机flightRecord里找不到某次飞行 | 没连手机飞、App清除过缓存、记录被覆盖 | 先看机身.DAT,如果没有只能接受数据缺失 |
| .DAT文件拖进DatCon报错“Unsupported” | 机型太新/太老,DatCon版本不支持 | 更新DatCon到master最新版,或者去GitHub翻Issue找适配版 |
| 两种日志轨迹无法对齐 | 手机日志与机身日志时间基准不同 | 以机身.DAT时间为基准,手机日志做整体时间偏移 |
| 照片EXIF没有GPS信息 | 拍摄时GPS信号弱,或关闭了“记录位置信息” | 调取同航段视频SRT文件手工补充 |
| 视频SRT文件丢失 | App设置关闭了字幕,或转码时删除 | 如果原始文件还在,相机设置里重新打开“字幕”再录一段测试 |
| 日志显示“传感器异常”但飞得没毛病 | 校准后未重启飞机 | 关机重启,重新校准IMU或指南针 |
6.2 一个实例:日志文件时间错乱导致轨迹偏出天际
有次一个朋友反馈,飞机明明飞在小区里,日志解析出来轨迹却显示在几公里外的另一条街上。我一看他的日志,发现一个典型问题:手机系统时间在飞行前被改过(他为了拍照改了时区),导致App记录的时间戳与实际UTC时间错位。AirData解析时按本地时间换算,直接把轨迹定位到错误位置。
解决办法也很简单:在DJI Fly里重新设置“自动同步时间”,然后对比日志中的GPS时间戳和手机时间戳,手动计算偏移值;如果实在对不上,优先以.SRT文件或照片EXIF里的GPS时间为准,重新组织轨迹线。
6.3 一个实例:无告警状态下的不明掉高
另一个印象深刻的案例是,一位飞友的Air 2S在稳定飞行时突然掉高5米,但日志里没有任何一条告警事件。我拿到.DAT转的CSV后,先看了电池电压曲线——没有骤降;再看电机转速——四个都正常;最后看气压计高度曲线才发现,在掉高前2秒气压计高度有个快速向上跳变,紧接着又快速回落。这个现象说明气压计受到干扰(比如机身上方气流顶到气压计口),飞控把气压计的瞬时尖峰误判成了“高度升高”,于是主动降低油门去追错误的目标高度。
这种案例最能说明问题:如果只依赖手机日志里的高度数据,你只能看到“掉高5米”这个结果,而.DAT里气压计的原始变化趋势才是真正的诱因。分析时多看一层原始传感器,结论完全不同。
最后再说几句
我在实际整理这些大疆无人机文件的过程中,最大的体会就是:日志分析不是靠某个单一工具就能解决的,而是需要在手机日志、机身.DAT、照片EXIF、视频SRT之间来回交叉验证。每一份文件都像是一块拼图,单独看都有限,拼在一起才能还原出一台无人机最真实的飞行状态。
如果你现在手上正好有一台炸过机或飞丢过的无人机,建议先别急着送修或找客服扯皮,自己按这篇文章的方法,把手机日志和机身.DAT导出来,先看告警事件,再看电压、转速、姿态三组参数的联动曲线。很多时候结论自己就能看出来——电机过载、电池单节落后、气压计被气流干扰,这些原因在数据面前根本藏不住。
最后再分享一个小技巧:我每次飞行结束,都把当天拍摄的JPG、视频SRT、手机flightRecord以及机身.DAT文件按日期归档,统一存到一个文件夹里,并给文件名加上“正常/异常”的备注。这样几个月后如果飞机出问题,我可以直接把整个归档发给分析工具,省去翻找历史的痛苦。养成这个习惯之后,处理事故的速度真的会快很多。