3. 实验任务建模与描述语言
实验机器人任务调度要解决的核心问题,是把一段有物理约束、有资源竞争、有失败可能的实验流程,转换成调度器能够理解、能够推理、能够执行的形式化模型。同一段实验流程,用不同的描述语言建模,得到的调度能力差异很大:任务图擅长表达工序依赖,状态机擅长表达设备行为与协议交互,Petri网擅长表达并发、资源与死锁,PDDL擅长表达带前提条件和目标状态的规划问题。本节先说明这四种语言各自适合刻画实验流程的哪一面,再通过一个“样品前处理—检测”的转换案例,展示从实验协议文本到可调度模型的完整过程。
四种描述语言的定位与适用边界
任务图(Task Graph)把实验流程表示为一组节点和有向边:节点是操作单元,如“取样”“加液”“离心”“上机检测”,边表示先后约束或数据依赖。它最直接回答“哪些步骤必须先做、哪些可以并行”。例如样品A的“离心”与样品B的“加液”之间没有边,调度器就可以把它们分配到不同工位并行执行。任务图的局限在于,它通常只表达依赖,不表达资源容量、设备状态和失败恢复;当两台机械臂争用同一个样品架时,任务图本身无法判断是否冲突。
状态机(State Machine)把建模重点放在单个设备或单个协议的状态迁移上。以移液工作站为例,其状态可定义为:空闲→初始化→吸头装载→吸液→排液→退针→空闲,异常时进入“堵针报警”并等待人工清除。状态机适合描述设备可接受的命令序列、互斥状态和异常分支,是设备驱动层与协议层之间的契约。它的短板是状态数量随并发设备数组合爆炸,不适合直接描述多设备协同的全局调度。
Petri网(Petri Net)用库所(place)、变迁(transition)和托肯(token)描述并发与资源。库所表示条件或资源,如“样品架空闲”“移液通道可用”“离心机槽位空”,变迁表示事件,如“装载样品架”“启动离心”。托肯表示当前可用资源数量。Petri网的优势在于能显式表达资源容量与并发冲突,并可通过可达图分析死锁:如果两个变迁互相等待对方释放库所中的托肯,就存在死锁风险。实验流程中“机械臂等待离心机空闲、离心机等待机械臂卸载”就是典型场景。
PDDL(Planning Domain Definition Language)把建模提升到“目标规划”层面。它用谓词描述世界状态,如 (sample-at ?s ?pos)、(tip-loaded ?arm)、(centrifuge-free ?c),用动作模式描述前提与效果,如 load-centrifuge 的前提是样品在机械臂上且离心机空闲,效果是样品进入离心机、离心机被占用。给定初始状态和目标状态,规划器自动搜索动作序列。PDDL适合步骤顺序不固定、需要按目标自动重排的实验,但需要把连续量(温度、体积、时间)离散化或外挂约束检查。
转换案例:从实验协议到可调度模型
下面以一段典型实验协议为例,说明四种语言如何协同完成转换。协议原文为:“取2 mL样品至离心管,加入1 mL缓冲液,涡旋10 s,离心5 min(3000 rpm),取上清液200 μL加入96孔板,上机检测吸光度。”实验室配置为:1台移液工作站(单通道)、1台涡旋仪、1台离心机(4槽位)、1台酶标仪、1台机械臂负责转运。
第一步,抽取任务图。把协议拆成操作节点:T1取样、T2加液、T3涡旋、T4离心、T5取上清、T6上板、T7检测。依赖边为T1→T2→T3→T4→T5→T6→T7。若同时处理3个样品,则每个样品各有一条链,链间无依赖,可并行。此时任务图给出的是“逻辑并行度”,但尚未考虑移液工作站和离心机是共享资源。
第二步,为共享设备建立状态机。移液工作站的状态迁移为:Idle→LoadTip→Aspirate→Dispense→EjectTip→Idle;若吸液压力超限,进入ClogAlarm,需人工清除后回到Idle。离心机的状态为:Idle→LoadRotor→Spin→UnloadRotor→Idle,其中Spin期间转子锁死,不允许装载。状态机明确了“同一时刻设备只能处于一个状态”,这是后续资源互斥判断的依据。
第三步,用Petri网表达资源竞争。为离心机建立4个槽位托肯,为移液工作站建立1个通道托肯,为机械臂建立1个搬运托肯。变迁“装载离心机”需要同时满足:样品在机械臂上、离心机有空槽、机械臂可用。若3个样品同时到达离心步骤,只有4个槽位,不会阻塞;但若同时有5个样品,则第5个样品必须等待,此时Petri网可达图会显示“等待托肯”状态,调度器据此插入排队策略。若机械臂在等待离心机卸载时又持有移液通道,则可能出现死锁,需要在模型中规定资源申请顺序,例如“先申请机械臂,再申请离心机槽位”。
第四步,用PDDL描述目标与自动规划。定义谓词:(sample-at ?s ?loc)、(tip-loaded ?arm)、(centrifuge-free ?c)、(plate-ready ?p)。动作模式包括 pick-sample、add-buffer、vortex、load-centrifuge、spin、transfer-supernatant、read-absorbance。初始状态为样品在样品架、设备空闲;目标状态为 (absorbance-recorded ?s)。规划器输出动作序列后,还需把PDDL中的离散时间替换为实际时间参数:涡旋10 s、离心300 s、移液约8 s/次,再交给调度器做时间轴排布。
转换检查清单
| 检查项 | 对应语言 | 判断依据 |
|---|---|---|
| 工序依赖是否完整 | 任务图 | 每个操作节点都有前驱/后继,无孤立节点 |
| 设备状态是否互斥 | 状态机 | 同一设备不存在两个同时为真的状态 |
| 资源容量是否显式 | Petri网 | 每个共享资源有明确托肯数,可达图无死锁 |
| 目标是否可判定 | PDDL | 目标谓词可由动作效果达成,规划器可返回序列 |
| 时间参数是否落地 | 调度模型 | 每个动作有实际持续时间,时间轴无资源重叠冲突 |
完成上述转换后,调度器得到的不是一段固定脚本,而是一个带约束的模型:它知道哪些步骤必须串行、哪些设备同一时刻只能服务一个样品、哪些资源数量有限、目标状态是什么。当实验中途插入紧急样品或某台设备故障时,只需修改初始状态或资源托肯数,重新求解即可获得新的调度序列。这正是形式化描述语言相对于硬编码流程的价值所在。