4. 任务规划与调度模块集成

任务规划与调度模块是无人系统自主任务平台的“决策中枢”。它把上层下达的任务意图,翻译成无人系统可执行、可调度、可校验的动作序列,并在资源、时间、约束之间做出取舍。集成这一模块时,核心不是“把算法塞进系统”,而是打通四件事:任务怎么描述、任务怎么分解、任务按什么优先级与时间窗调度、规划算法以什么方式接入平台。

一、任务描述语言:把意图变成机器可读的契约

任务描述语言(Task Description Language, TDL)是规划模块的输入契约。它需要同时表达三层信息:任务目标(做什么)、约束条件(在什么限制下做)、执行语义(做到什么程度算完成)。在工程集成中,常用“结构化文本 + 参数表”的方式,而不是自由自然语言。例如一个区域侦察任务可描述为:

task_id: RECON_A03
type: area_recon
area: polygon[(116.20,39.90),(116.35,39.90),(116.35,40.02),(116.20,40.02)]
altitude: 120m ± 10m
speed: 12m/s
sensor: EO_IR
time_window: [2025-06-01T08:00, 2025-06-01T10:00]
priority: P2
completion: coverage ≥ 95% AND revisit ≤ 30min

集成时要注意:TDL 的字段必须与平台内部的任务对象模型一一映射,避免“描述语言一套、内部模型另一套”的双重维护。建议在平台中定义统一的 Task 对象,TDL 只作为序列化格式,解析后直接填充对象字段。这样规划算法、调度器、执行监控都面向同一份数据,减少集成缝隙。

二、任务分解:从高层任务到可执行原子动作

高层任务通常不能直接执行,需要分解为原子动作(如起飞、航点飞行、传感器开机、数据回传、降落)。分解的关键是保持约束可传递:父任务的时间窗、优先级、区域限制,必须能向下传递到子动作,否则调度器会丢失全局约束。

一种实用的分解方式是“任务树 + 约束继承”。以 RECON_A03 为例,可分解为:起飞 → 爬升到 120m → 按多边形边界生成扫描航线 → EO/IR 采集 → 数据回传 → 返航降落。每个子动作继承父任务的时间窗和优先级,同时可附加自身约束(如爬升阶段禁止传感器开机)。分解结果应输出为动作列表,每个动作带 action_id、precondition、effect、duration_est、resource 字段,供调度器使用。

任务规划与调度模块集成关系图 任务描述语言 TDL 目标 / 约束 / 完成条件 time_window priority / area / sensor 任务分解 任务树 + 约束继承 原子动作列表 precondition / effect 优先级调度 P0 > P1 > P2 > P3 时间窗约束校验 资源冲突消解 规划算法 A* / RRT CSP / 启发式 插件式接入 时间窗约束示意(示例) 08:00 08:30 09:00 09:30 10:00 RECON_A03 窗口 P1 任务 P2 任务 冲突区 集成要点 1. TDL 字段与平台 Task 对象一一映射,避免双重维护 2. 分解时约束向下继承,子动作携带 precondition / effect 3. 调度器先按优先级排序,再校验时间窗与资源冲突 4. 规划算法以插件接口接入,输入动作列表,输出可执行航路/时序

三、优先级调度与时间窗约束

调度器要解决的是“多个任务争抢有限资源”的问题。优先级通常分为 P0(紧急)、P1(高)、P2(中)、P3(低)。调度策略可采用“优先级抢占 + 时间窗校验”:先按优先级排序,再检查每个任务的时间窗是否与已排任务冲突。若冲突,低优先级任务让位,或调整到窗口内的其他时段。

时间窗约束有两种常见形式:硬窗口(必须在 [t_start, t_end] 内完成,否则任务失败)和软窗口(尽量在窗口内,超出可接受但降级)。集成时要在调度器中显式区分,硬窗口任务不满足时触发告警或重规划,软窗口任务可记录偏差并继续执行。

一个实用的调度判断逻辑是:对每个待排任务,计算其“最晚开始时间” = t_end - duration_est。若当前时间已超过最晚开始时间,则硬窗口任务标记为不可行,软窗口任务降级。调度结果输出为时间轴上的任务序列,每个任务带 planned_start、planned_end、assigned_resource。

四、规划算法接入方式

规划算法接入平台,推荐采用“插件式接口”,而不是把算法代码直接嵌入调度器。接口定义输入输出:输入是分解后的动作列表、约束集合、资源状态;输出是可执行航路或动作时序。平台负责调用、超时控制、结果校验和异常回退。

常见接入方式有三种:进程内调用(算法以库形式链接,延迟低,适合 A*、CSP 等轻量算法);进程间调用(算法独立进程,通过 gRPC/ROS 通信,适合 RRT* 等计算量大的算法);服务化调用(算法部署为远程服务,适合多机共享规划能力)。集成时要统一坐标系和时间基准,避免算法输出与平台执行之间出现“米/度”“秒/毫秒”混用。

集成检查建议:TDL 解析后字段完整率、分解后动作的 precondition/effect 覆盖率、硬窗口任务不可行告警率、算法调用超时率、规划结果与执行结果偏差。这些指标能快速暴露集成缝隙。

最后,规划与调度模块的集成不是一次性的,而是随任务类型增加持续迭代。建议先打通一条最小闭环:一个 TDL 任务 → 分解为 3~5 个动作 → 调度器排入时间窗 → 算法输出航路 → 执行监控回传状态。闭环跑通后,再逐步增加优先级抢占、多机协同、动态重规划等能力。