3. 任务数据预处理
无人机集群在完成一次编队飞行或区域侦察任务后,各机载飞控、导航模块、任务载荷会分别记录自己的日志。这些日志汇总到地面站时,往往呈现出"多源、异步、异构"的特点:不同机型采样率不同,GPS 与 IMU 时间戳基准不同,个别架次存在丢包或传感器异常。若直接把这些原始数据送入航迹分析或任务评估模型,得到的结论很可能被脏数据带偏。因此,任务数据预处理是集群数据分析链条中不可跳过的一环,它要解决的核心问题可以概括为四件事:补全缺失、抑制噪声、对齐时间、统一坐标,最后再通过一次完整的数据清洗把结果固化下来。
缺失值处理:先判断"为什么缺",再决定"怎么补"
集群日志中的缺失通常分三类。第一类是随机丢包,例如某架无人机的遥测链路短暂中断,导致连续几帧位置数据为空;第二类是传感器失效,如磁力计受干扰后输出恒定值或空值;第三类是结构性缺失,例如某架次根本没有挂载红外载荷,对应字段整列为空。三类缺失的处理策略完全不同:随机丢包适合插值,传感器失效需要标记为无效而非强行填补,结构性缺失则应整列剔除或单独建模。
以位置数据为例,假设某机在 t=12.0s 到 t=12.4s 之间丢失了 5 帧 GPS 经纬度,采样周期为 0.1s。对于这种短时、连续、变化平滑的缺失,线性插值即可满足要求:
# 示例:对单机经纬度做线性插值(pandas)
df = df.set_index('timestamp').sort_index()
df[['lat', 'lon', 'alt']] = df[['lat', 'lon', 'alt']].interpolate(
method='linear', limit=5, limit_direction='both')
# limit=5 表示最多连续插补 5 帧,超过则保留 NaN 并标记为无效段
df['gap_flag'] = df['lat'].isna().astype(int)
这里的关键参数是 limit。如果缺失跨度超过 5 帧(0.5s),在高速机动场景下线性插值会明显偏离真实航迹,此时更稳妥的做法是保留空值并打上 gap_flag,让后续分析模块自行决定是否跳过该段。对于高度这类变化较慢的量,也可以采用前向填充 ffill,但必须同时记录填充标记,避免把"补出来的值"当成实测值使用。
噪声过滤:区分高频抖动与真实机动
无人机的位置、速度、姿态数据普遍带有高频噪声,来源包括 GPS 多路径效应、IMU 零偏、气流扰动等。噪声过滤的难点不在于"滤掉波动",而在于不能把真实的机动动作一起滤掉。一架无人机在 1s 内完成 30° 转向,这是真实机动;而位置在 0.1s 内跳动 2m,则更可能是噪声。
工程上常用两类方法。其一是滑动平均,实现简单,适合对实时性要求高、机动不剧烈的场景:
# 示例:5 帧滑动平均,窗口对应 0.5s
df['lat_smooth'] = df['lat'].rolling(window=5, center=True, min_periods=1).mean()
其二是低通滤波,如一阶巴特沃斯或卡尔曼滤波,能更好地保留机动响应。以速度信号为例,若采样率 10Hz,截止频率设为 1Hz,则一阶低通离散形式为:
alpha = dt / (RC + dt) # dt=0.1s, RC=1/(2*pi*fc)
v_filt[k] = alpha * v[k] + (1 - alpha) * v_filt[k-1]
选择截止频率时,应参考任务中无人机的最大机动频率。若编队飞行以平稳巡航为主,1Hz 足够;若包含快速避障,则需提高到 2~3Hz,否则会把真实加速度削平。过滤后建议对比原始与滤波曲线的残差,若残差在机动段明显增大,说明截止频率偏低,需要回调。
时间同步:把"各说各话"的时钟拉到同一基准
集群中每架无人机都有自己的本地时钟,GPS 秒脉冲、飞控晶振、载荷触发时刻之间可能存在几十毫秒到数秒的偏差。时间同步的目标是把所有记录统一到同一时间基准,通常选择 GPS 时间或地面站接收时间作为主时钟。
同步分两步。第一步是时钟偏差估计:利用各机 GPS 时间戳与本地时间戳的差值,拟合出偏移量和漂移率。第二步是时间重采样:把不同采样率的序列统一到同一时间网格上,例如统一为 10Hz。对于位置这类连续量,重采样用插值;对于事件标记(如"开始拍照"),则用最近邻匹配,避免插值产生不存在的事件时刻。
# 示例:将各机数据统一到 10Hz 公共时间轴
t_common = np.arange(t_start, t_end, 0.1)
df_sync = df.set_index('gps_time').reindex(
df.index.union(t_common)).interpolate().reindex(t_common)
同步完成后,务必检查同一时刻各机之间的相对位置是否连续。如果某架无人机在同步后出现"瞬移",多半是时钟偏差估计错误或插值跨越了缺失段,需要回到上一步重新处理。
坐标对齐:从各自经纬高到统一局部坐标系
各机 GPS 给出的是 WGS-84 经纬高,而编队间距、相对速度等分析更适合在局部平面坐标系中进行。常用做法是选取任务区域中心作为原点,建立东-北-天(ENU)局部坐标系:X 轴指向东,Y 轴指向北,Z 轴指向天。这样,任意一点的 ENU 坐标可由其经纬高与原点经纬高换算得到。
需要特别注意的是航向角的参照约定。本文及后续图示统一采用:航向角以正北为 0°,顺时针为正,范围 0°~360°。若原始日志使用"以正东为 0°、逆时针为正"的约定,必须先转换再进入后续分析,否则编队朝向分析会整体旋转 90°。
# 示例:经纬高转 ENU(简化平面近似)
dx = (lon - lon0) * 111320 * cos(radians(lat0)) # 东向
dy = (lat - lat0) * 110540 # 北向
dz = alt - alt0 # 天向
坐标对齐后,还应检查各机轨迹是否落在合理范围内。例如编队间距设计为 50m,若对齐后出现 500m 的异常间距,通常是某架无人机的经纬度单位或符号出错,需要逐架核对原始字段。
数据清洗实战:一次完整的处理闭环
把上述步骤串起来,一次典型的集群任务数据清洗流程如下:先按架次分组,剔除结构性缺失字段;再对位置、速度做缺失标记与短段插值;随后进行噪声过滤并对比残差;接着估计各机时钟偏差,统一重采样到 10Hz;最后转换到 ENU 坐标系,输出带质量标记的清洗数据集。整个过程中,每一步都应保留中间结果和标记字段,便于回溯。
清洗完成后,建议输出一份质量摘要,记录每架次的有效帧比例、插值帧数、滤波前后残差均值、时钟偏差估计值以及坐标转换后的最大间距。这些指标既是本次清洗的验收依据,也是后续航迹分析、任务评估的输入质量说明。只有把预处理做扎实,集群任务数据分析的结论才站得住脚。