3. 任务链基本概念与建模
任务链不是把若干动作简单排成一条线,而是把“要达成什么、由谁在什么条件下做、做完后系统处于什么状态、消耗了哪些资源”组织成可执行、可验证的整体。要设计出可落地的任务链,首先必须统一核心术语的含义,再理解任务之间的时序、逻辑与资源依赖,最后选择合适的建模方法并确定建模粒度。
3.1 核心术语:任务、子任务、动作、约束、资源、状态
在无人系统任务规划中,这六个术语构成任务链的最小语义集合,它们之间存在明确的层级与引用关系:
- 任务(Task):面向目标的可交付单元,例如“对A区完成一次侦察覆盖”。任务有明确的完成判据,通常由多个子任务组成。
- 子任务(Subtask):任务分解后的中间目标,例如“起飞并爬升至120 m”“沿蛇形航线扫描A区”“回传图像并降落”。子任务仍可继续分解,直到可被动作直接实现。
- 动作(Action):不可再分或不再分解的执行原语,直接对应平台能力,例如“设置航向角”“开启相机”“悬停5 s”。动作是任务链真正落到执行器上的最小单位。
- 约束(Constraint):限制任务链可行解的条件,分为时序约束(如“必须在B之前完成A”)、逻辑约束(如“A与B互斥”)、资源约束(如“同一时刻仅一架无人机占用起降点”)和物理约束(如最小转弯半径、续航时间)。
- 资源(Resource):执行动作所需占用的有限对象,包括平台、载荷、通信链路、频谱、起降位、算力与能源。资源具有容量与占用时间两个关键属性。
- 状态(State):系统在某一时刻的完整描述,例如“无人机位于(120, 300, 120),电量78%,相机开启,链路正常”。状态是判断任务能否推进、动作是否生效的依据。
一个常见误区是把“任务”和“动作”混用。判断标准很简单:如果某单元需要判断“是否达成目标”,它是任务或子任务;如果它只描述“执行什么指令”,它是动作。任务链的可执行性,恰恰取决于从任务到动作的分解是否完整、约束是否被显式表达。
3.2 时序、逻辑与资源三类依赖
任务链中节点之间的关系可归纳为三类依赖,它们共同决定执行顺序与可行性:
- 时序依赖:规定先后关系,如“爬升完成后才能进入航线”“图像回传完成后才能降落”。时序依赖只约束顺序,不约束是否必须执行。
- 逻辑依赖:规定条件与选择关系,如“若目标识别成功则跟踪,否则重新扫描”“A与B互斥,只能选其一”。逻辑依赖决定分支与条件触发。
- 资源依赖:规定对有限资源的占用与释放,如“起降位同一时刻只允许一架无人机使用”“相机与激光雷达共用供电通道,不能同时满功率工作”。资源依赖往往不是顺序问题,而是并发容量问题。
三类依赖必须分别建模。只画顺序箭头会丢失逻辑分支与资源冲突;只做资源分配会忽略时序与条件。实际任务链中,一个节点可能同时受三类依赖约束,例如“在起降位空闲(资源)且前序侦察完成(时序)且天气满足条件(逻辑)时执行降落”。
3.3 三种主流建模方法
状态机(State Machine)适合状态清晰、转移条件明确的场景。它把系统描述为有限状态集合与转移函数,例如无人机任务可建模为“待命→起飞→爬升→巡航→侦察→返航→降落→完成”,每条转移边标注触发事件与守卫条件。状态机的优点是语义直观、易于验证死锁与不可达状态;缺点是状态数随并发对象增加而膨胀,多机协同时容易出现状态爆炸。
Petri网(Petri Net)适合表达并发、资源竞争与同步。库所(Place)表示条件或资源,变迁(Transition)表示动作或事件,托肯(Token)表示当前可用资源或已满足条件。例如用两个库所分别表示“起降位空闲”和“无人机待降落”,一个变迁表示“降落”,变迁触发需同时消耗两个托肯并释放“起降位空闲”。Petri网的强项是能形式化分析可达性、有界性与冲突,适合多机共享资源、任务并发的场景;代价是模型规模较大,非专业读者理解门槛较高。
行为树(Behavior Tree)适合表达分层决策与可复用行为。它由控制节点(顺序、选择、并行)和叶节点(条件、动作)组成,从根节点按tick机制向下执行。顺序节点要求子节点依次成功,选择节点在任一子节点成功时返回成功,并行节点可同时执行多个分支。行为树的优点是模块化、可读性强、便于在线调整优先级,广泛用于单机自主任务与机器人行为组织;缺点是对严格时序与资源容量的形式化验证支持弱于Petri网。
三种方法并非互斥。工程中常见组合是:用状态机描述平台级任务阶段,用Petri网分析多机资源冲突,用行为树组织单机内部的动作选择与异常恢复。
3.4 建模粒度与可执行性权衡
建模粒度决定任务链的“分辨率”。粒度过粗,任务链无法直接执行,例如只写“完成侦察”而不说明航线、高度、相机参数与触发条件;粒度过细,模型节点数量急剧膨胀,规划与验证成本上升,且容易把平台底层控制细节混入任务层。
一个实用的粒度判断原则是:动作层应止于平台可接受指令的接口。如果平台提供“飞往航点”接口,则“飞往航点”就是一个动作,不必再分解为“设置航向—调整油门—稳定姿态”。如果平台只提供速度与角速度指令,则“飞往航点”应作为子任务,由若干动作组成。粒度选择应与执行接口、验证需求和通信周期匹配。
可执行性还取决于约束是否可判定。例如“尽快完成侦察”无法直接判定,应转化为“在T+300 s内完成A区覆盖,覆盖率≥95%”。资源约束也应给出容量与占用时间,如“起降位容量1,单次占用90 s”。只有约束可量化、状态可观测,任务链才具备可执行与可验证的基础。
3.5 建模检查清单(可直接使用)
| 检查项 | 合格判据 | 常见问题 |
|---|---|---|
| 任务完成判据 | 每个任务有可观测、可量化的完成条件 | 只写“完成侦察”,无覆盖率/时间要求 |
| 动作接口匹配 | 动作层与平台指令接口一致 | 把底层控制混入任务层 |
| 时序约束 | 所有先后关系显式标注 | 依赖隐含在文字描述中 |
| 逻辑分支 | 条件与互斥关系完整 | 只画成功路径,无异常分支 |
| 资源容量 | 每个共享资源有容量与占用时间 | 忽略起降位、链路、供电冲突 |
| 状态可观测 | 状态变量可由传感器或系统日志获得 | 使用不可观测的抽象状态 |
| 粒度一致 | 同一层级节点粒度相当 | 同一层混有任务与动作 |