4. 任务状态表示与检查点机制
无人系统在执行长航时侦察、区域搜索或编队运输任务时,一旦发生通信中断、能源告警、传感器故障或人为接管,任务并不会“从零开始”。真正决定恢复质量的,是系统在中断前是否把“任务进行到哪、环境是什么样、下一步该做什么”记录成了可重建的状态。本节围绕状态表示、检查点生成、持久化存储与恢复点选择四个环节展开,重点说明如何用可落地的数据结构与策略,让任务在中断后以最小代价继续。
一、任务状态表示:把“任务进行到哪”变成可存储的数据
任务状态不是单一变量,而是一组具有不同更新频率和恢复重要性的字段集合。工程上通常将其划分为四层:
- 任务层:任务编号、任务类型、当前阶段(如“搜索—识别—跟踪—返航”)、已完成子目标列表、剩余子目标队列。
- 空间层:当前位置(经纬高或局部坐标)、航向、速度、当前航段索引、已覆盖栅格集合或已访问航点序号。
- 感知层:已确认目标列表(含目标ID、类别、置信度、最近观测时间)、地图增量(新障碍、新可通行区域)、传感器标定参数版本。
- 资源层:剩余电量或燃料、通信链路质量、载荷工作状态、已消耗任务时间。
这四层中,任务层与空间层是恢复的“骨架”,感知层决定恢复后是否重复搜索,资源层决定是否还能继续。状态表示的关键是可序列化与可判定一致性:每个字段都应有明确的类型、单位和版本号,避免恢复时因结构变化导致解析失败。例如,用 JSON 表示一个搜索任务的状态片段:
{
"task_id": "SAR-2024-017",
"phase": "search",
"sub_goals": ["A3", "A4", "A5"],
"pose": {"lat": 31.2304, "lon": 121.4737, "alt": 120.0, "yaw": 45.0},
"covered_cells": ["r12c07", "r12c08", "r13c07"],
"targets": [{"id": "T-03", "cls": "vehicle", "conf": 0.87, "t": 1715000000}],
"battery_pct": 63.5,
"state_version": 7
}
其中 state_version 用于标识状态结构的版本,恢复时若版本不匹配,应触发迁移或拒绝恢复,而不是强行加载。
二、状态快照与增量检查点
状态快照是在某一时刻对全部状态字段做一次完整写入,优点是恢复逻辑简单、一致性强,缺点是数据量大、写入频繁时占用带宽与存储。对于状态字段多、更新频率高的系统,更常用的是增量检查点:只记录自上一个检查点以来发生变化的字段或事件。
增量检查点通常由“基快照 + 变更日志”组成。基快照周期性生成(例如每 60 秒或每完成一个子目标),变更日志则按事件追加,例如“进入 A4 区域”“发现目标 T-04”“电量降至 50%”。恢复时先加载最近一次基快照,再按顺序重放变更日志,即可重建中断前状态。判断是否值得写增量,可依据字段的变更频率与恢复必要性:位置、电量变化快且必须恢复,适合高频增量;任务编号、任务类型几乎不变,只需在基快照中记录一次。
下面这张图展示了从状态采集、快照/增量生成、持久化到恢复点选择的完整数据流,以及各环节的关键判断条件。
三、持久化存储:让检查点在掉电与故障后仍可读
检查点写入存储介质时,最怕的是“写了一半掉电”。因此持久化必须满足原子性与可校验性。常见做法是双副本加校验和:先写副本 A,写入完成后计算 CRC32 并记录;再写副本 B。恢复时优先读取校验通过的副本,若两者都失败,则回退到更早的检查点。
存储位置也需要分层考虑。机载 Flash 适合保存最近若干检查点,保证断链后本地可恢复;边缘节点或地面站适合保存更长时间的历史检查点,用于任务复盘或跨平台迁移。对于带宽受限的链路,增量日志可以压缩后上传,基快照则按需上传。一个可参考的存储策略是:机载保留最近 5 个基快照与 200 条增量日志,边缘节点保留最近 24 小时的全部检查点。
四、恢复点选择策略:不是“最近”就一定最好
恢复点选择的目标是:在状态一致性、任务连续性和资源可行性之间取得平衡。常用策略有三类:
- 最近一致检查点:选择时间上最近且校验通过的检查点,恢复代价最小,但可能落在某个子任务中间,导致部分动作重复。
- 子目标边界检查点:优先选择刚完成一个子目标时的检查点,恢复后从下一个子目标开始,避免重复搜索或重复搬运。
- 资源可支撑检查点:在候选检查点中,选择剩余电量或任务时间足以完成后续子目标的那个点;若都不满足,则选择返航点或安全悬停点。
实际系统中通常将三者组合成一条判断链:先筛出校验通过的检查点集合,再按“子目标边界优先”排序,最后用资源约束过滤。例如,某搜索任务在 T=180 s 时通信中断,最近检查点为 T=175 s(位于 A4 区域搜索中途),而 T=150 s 的检查点恰好完成 A3 子目标。若电量仅够再飞 90 s,则应选择 T=150 s 的检查点,直接进入 A4 区域,而不是从 T=175 s 继续,以免在 A4 内重复覆盖并耗尽电量。
综上,任务状态表示决定了“存什么”,快照与增量决定了“怎么存”,持久化决定了“存得住”,恢复点选择决定了“从哪继续”。四者共同构成任务中断恢复的检查点机制。工程实现时,建议先用最小字段集跑通“采集—写入—恢复”闭环,再逐步增加感知层与资源层的细粒度状态,避免一开始就追求全量快照而拖慢系统实时性。