1. 课程导论与数据基础
大家好,欢迎来到这门实战课。
我是你们这门课的主讲人。做了十几年无人机系统,我见过太多因为遥测数据异常而炸机的案例。说实话,每次看到飞手一脸茫然地看着残骸,我都觉得特别可惜——明明数据里早就给出了警告信号。
这门课,就是要把这些信号教给你看懂。
1.1 什么是无人机遥测数据?
遥测数据,说白了就是无人机在空中实时传回来的「体检报告」。它记录了飞行器每一秒的状态:飞了多高、飞了多快、电池还有多少电、电机转速多少、GPS信号好不好……
我习惯把遥测数据分成三大类:
- 飞行状态数据:高度、速度、航向角、姿态角(俯仰/横滚/偏航)
- 系统健康数据:电池电压/电流/温度、电机转速、IMU加速度/角速度
- 环境与定位数据:GPS经纬度、卫星颗数、气压计高度、空速
你想想看,一架无人机每秒能产生几十到上百条这样的数据。一次30分钟的飞行,就是十几万条记录。数据量不小,但每一条都可能藏着关键信息。
核心观点:遥测数据不是冷冰冰的数字,它是无人机用「生命」在向你传递信息。学会读懂它,你就能提前预判故障。
1.2 常见异常类型——我踩过的坑
异常检测,就是找出那些「不对劲」的数据点。我在项目中遇到过各种各样的异常,归纳起来主要有这几类:
| 异常类型 | 典型表现 | 我踩过的坑 |
|---|---|---|
| 点异常 | 某个数值突然跳变,比如高度从100米瞬间变成-5米 | 有一次GPS受干扰,高度值直接跳到负值,飞控差点触发紧急降落 |
| 上下文异常 | 数值本身正常,但放在当前场景下不合理 | 悬停时电机转速突然飙升——其实是有阵风,但新手容易误判为故障 |
| 集合异常 | 单个数据正常,但一组数据组合起来有问题 | 电池电压正常、电流正常,但两者乘积(功率)异常——说明传感器校准有问题 |
| 趋势异常 | 数据缓慢偏离正常范围,比如电池电压持续下降过快 | 我曾经遇到过一块电池内阻变大,电压下降曲线明显变陡,但很多人没注意到 |
避坑指南:我曾经在一次飞行测试中,只关注了点异常,忽略了电池电压的缓慢下降趋势。结果飞到第18分钟时,电压突然跌穿保护阈值,飞机直接迫降在田里。从那以后,我每次做异常检测都会同时看「突变」和「渐变」两个维度。
1.3 数据采集与存储格式
数据怎么来的?通常有两种方式:
- 实时数传链路:无人机通过433MHz/900MHz/4G等链路,把数据包实时发回地面站
- 机载SD卡日志:飞控板(如Pixhawk、ArduPilot)会把所有原始数据记录在SD卡上,飞行结束后导出
存储格式方面,我主要用两种:
CSV格式——简单直接
CSV是最常见的格式,说白了就是逗号分隔的文本文件。每一列是一个参数,每一行是一个时间点。
timestamp,altitude,velocity,battery_voltage,motor_rpm
0.00,0.0,0.0,12.6,0
0.05,0.1,0.5,12.5,3200
0.10,0.3,1.2,12.4,4500
...
优点是人眼可读,Excel直接打开。缺点是文件大、读写慢。一次30分钟飞行,CSV文件可能轻松超过100MB。
我的习惯:小规模实验用CSV,方便快速查看。但做正式项目时,我强烈建议用Parquet。
Parquet格式——工业级选择
Parquet是列式存储格式,压缩率高、读写速度快。同样数据量,Parquet文件可能只有CSV的1/5大小,读取速度却能快10倍以上。
# 用pandas读取两种格式的对比
import pandas as pd
import time
# CSV读取
start = time.time()
df_csv = pd.read_csv('flight_data.csv')
print(f'CSV读取耗时:{time.time() - start:.2f}秒')
# Parquet读取
start = time.time()
df_pq = pd.read_parquet('flight_data.parquet')
print(f'Parquet读取耗时:{time.time() - start:.2f}秒')
嗯,这里要注意:Parquet虽然好,但需要安装pyarrow或fastparquet库。不过相信我,当你处理几十GB的遥测数据时,你会感谢这个选择的。
1.4 Python环境搭建
工欲善其事,必先利其器。我建议用Anaconda + Jupyter的组合,原因很简单:省心。
第一步:安装Anaconda
去官网下载Anaconda(Python 3.9+版本),一路默认安装就行。安装完成后,打开终端(Windows用Anaconda Prompt),验证一下:
conda --version
python --version
第二步:创建虚拟环境
我习惯每个项目建一个独立环境,避免包冲突。
conda create -n uav_anomaly python=3.9
conda activate uav_anomaly
第三步:安装必备库
pip install pandas numpy matplotlib seaborn scikit-learn
pip install pyarrow # 用于Parquet
pip install jupyter
第四步:启动Jupyter
jupyter notebook
浏览器会自动打开,新建一个Notebook,就可以开始了。
小建议:我习惯在Notebook开头先写一段「环境检查」代码,确保所有库都加载正常。别问我为什么——有一次我换了台电脑,忘了装pyarrow,结果读Parquet文件时报错,排查了半天。
1.5 本章知识体系
下面这张图,是我梳理的本章知识结构。你可以把它当作一张「地图」,后面每节课都会对应到其中的某个模块。
好了,这一章的内容就是这些。环境搭好了,数据格式了解了,异常类型心里有数了——下一章我们就可以开始动手分析真实数据了。
公众号:蓝海数据掘金营,可可精品资料库