4. 实验流程到机器人动作的映射

实验机器人工作站能否稳定复现实验,关键不在于机械臂本身有多快,而在于“实验意图”能否被无损地翻译成“机器人动作”。实验协议、SOP、工艺卡片描述的是实验目的与操作要求,而机器人需要的是带坐标、带参数、带时序、带条件判断的动作序列。本节讨论这条映射链的拆解方法与结构化表达方式。

一、三类输入文档的语义差异

实验协议通常来自科研文献或方法学描述,语言偏目的性,例如“将样品在 80 ℃ 孵育 15 min 后离心”。SOP 是实验室内部的操作规范,强调步骤顺序、安全与合规,但往往省略精确坐标和体积。工艺卡片则更接近制造现场,包含工位、耗材、节拍、参数上下限。三者共同构成映射的输入,但粒度不同:协议给“做什么”,SOP 给“按什么顺序做”,工艺卡片给“在哪个工位、用什么参数做”。

映射的第一步不是写代码,而是建立“动作原子库”。动作原子是机器人可执行的最小语义单元,例如 MoveTo、Pick、Place、Dispense、Aspirate、Incubate、Centrifuge、Read。每个原子绑定一组参数:目标位姿、速度、加速度、体积、温度、时间、容差。只有把协议中的动词与动作原子对齐,后续拆解才有依据。

二、从自然语言到结构化动作序列

以“取 200 μL 样品加入 96 孔板 A1 孔,混匀后 37 ℃ 静置 10 min”为例。拆解时先识别对象:样品管、移液枪、96 孔板、温控模块。再识别动作:取液、放液、混匀、转移、静置。最后绑定参数:体积 200 μL、孔位 A1、混匀次数 3、温度 37 ℃、时间 10 min。结构化表达可采用 JSON 或 YAML,便于版本管理和校验。

{
  "step_id": "S03",
  "source": "sample_tube_01",
  "target": "plate_96_A1",
  "actions": [
    {"op": "Aspirate", "volume_uL": 200, "tip": "T200"},
    {"op": "Dispense", "volume_uL": 200, "blowout": true},
    {"op": "Mix", "cycles": 3, "volume_uL": 150},
    {"op": "MoveTo", "device": "incubator", "slot": "A1"},
    {"op": "Incubate", "temp_C": 37, "duration_min": 10}
  ],
  "precondition": "plate_96_A1_empty",
  "postcondition": "plate_96_A1_loaded"
}

这种表达把“实验语义”与“设备指令”分离:上层是实验步骤,下层由工作站编排引擎翻译成具体设备的运动指令。分离的好处是,当移液枪型号更换时,只需替换设备驱动层,实验步骤不变。

三、映射中的关键约束与判断

映射不是一对一翻译,而是带约束的规划问题。常见约束包括:空间约束(机械臂可达性、孔位间距)、时间约束(孵育与离心的先后顺序)、资源约束(移液枪头数量、温控模块占用)、逻辑约束(先加样后混匀)。这些约束在结构化表达中应显式记录,例如用 depends_on 表示前置步骤,用 resource 表示占用设备。

另一个关键点是“可观测性”。机器人执行动作后,系统需要知道是否成功。因此每个动作原子应绑定一个可观测结果,例如移液后液面高度、抓取后夹爪力矩、孵育后温度反馈。没有观测的动作等于不可验证的动作,在实验场景中风险很高。

建议在动作序列中为每个步骤保留 expected_result 字段,例如“A1 孔液面上升 200 μL”或“夹爪闭合到位信号为 1”。这为后续异常检测和复盘提供依据。

四、结构化表达的层级与图示

完整的映射链可以分成四层:实验意图层、步骤语义层、动作原子层、设备指令层。下图展示了从实验协议到机器人动作序列的拆解关系,以及每层的关键对象与输出形式。

实验流程到机器人动作的四层映射 ① 实验意图层 输入:实验协议 / 文献方法 / 实验目标 输出:实验目的、样品、关键条件(温度、时间、体积) 示例:80 ℃ 孵育 15 min 离心 3000 rpm × 5 min 语义拆解 ② 步骤语义层 输入:SOP / 工艺卡片 / 操作顺序 输出:带顺序、条件、资源的步骤列表(step_id、depends_on) S01 取样品 → S02 加样 S03 混匀 → S04 孵育 动作原子绑定 ③ 动作原子层 输入:动作原子库(MoveTo / Pick / Dispense / Incubate …) 输出:带参数的动作序列(体积、坐标、速度、温度、时间) Aspirate 200 μL Incubate 37 ℃ / 10 min 设备指令翻译 ④ 设备指令层 输入:工作站编排引擎 / 设备驱动 / 通信协议 输出:机械臂轨迹、移液枪指令、温控指令、传感器反馈 MoveJ / MoveL 轨迹点 DO 信号 / 温度设定值

图中四层之间不是单向瀑布,而是带反馈的闭环:设备指令层执行后产生的传感器数据会回传到动作原子层,用于判断 expected_result 是否满足;若不满足,编排引擎可触发重试、跳过或报警。这种反馈机制是实验机器人区别于普通工业机器人的重要特征。

五、实操中的拆解检查清单

在实际项目中,建议按以下顺序检查映射是否完整。第一,协议中的每个动词是否都能找到对应动作原子;第二,每个动作原子是否都有明确的参数来源(来自工艺卡片还是人工输入);第三,步骤之间是否存在未声明的依赖;第四,每个步骤是否有可观测结果;第五,异常情况下是否有回退路径。以下是一份可直接使用的拆解检查表。

检查项 判断标准 示例
动作原子覆盖 协议动词均有对应原子 “混匀” → Mix(cycles=3)
参数完整性 体积、温度、时间、坐标齐全 200 μL / 37 ℃ / 10 min / A1
依赖显式化 前置步骤用 depends_on 标注 S04 depends_on S03
可观测结果 每步有 expected_result 液面上升 200 μL
异常回退 定义重试或跳过条件 移液失败 → 换枪头重试 1 次
不要把工艺卡片中的“建议参数”直接当作机器人执行参数。工艺卡片常给出范围(如 36~38 ℃),机器人需要确定值或带容差的设定值。映射时应明确取中值、取上限还是由实验设计决定,并记录决策依据。

结构化表达的最终产物是一份可执行动作序列文件,它既是编排引擎的输入,也是实验记录的一部分。建议在文件中保留 source_doc 字段,记录该步骤来自哪份协议或 SOP 的哪一条,便于追溯和审计。当实验方案变更时,只需修改对应步骤,而不必重写整个流程。

从实验协议到机器人动作的映射,本质上是把“实验知识”转化为“可执行知识”的过程。动作原子库是词汇表,结构化序列是语法,约束与观测是语义校验。三者齐备,实验机器人才能从“能动”走向“可信地动”。