name: opentrons-gripper description: Opentrons Flex 夹持器 - 在实验台位置、模块、废物槽和离线存储之间自动化移动实验室器皿,具有精确定位和偏移控制,实现无需手动干预的板转移 allowed-tools: [“*”]
Opentrons Flex 夹持器
概述
Opentrons Flex 夹持器 支持完全自动化的实验室器皿移动,无需人工干预。它可以在实验台槽位、硬件模块、废物槽和离线存储之间精确移动板、储液器和吸头架,并可进行可选的偏移调整。
核心价值: 在协议执行期间消除手动板转移。自动在模块之间移动实验室器皿,实现无需暂停用户干预的复杂多步骤工作流程。
平台: 仅适用于 Opentrons Flex(不适用于 OT-2)
何时使用
在以下情况下使用夹持器技能:
- 自动在实验台位置之间移动实验室器皿
- 在硬件模块(温度模块、加热摇床模块、磁性块等)之间转移板
- 将板加载到吸光度读取器或热循环仪上
- 在废物槽中处置实验室器皿
- 移动实验室器皿到/从离线存储
- 自动化否则需要手动干预的工作流程
不要在以下情况下使用:
- 使用 OT-2 机器人(夹持器仅适用于 Flex)
- 实验室器皿不可夹持(缺乏兼容的几何结构/特征)
- 对于精细操作更倾向于手动控制
- 移液器可以在不移动整个实验室器皿的情况下完成任务
快速参考
| 操作 | 方法 | 关键参数 |
|---|---|---|
| 移动实验室器皿 | protocol.move_labware() |
labware, new_location, use_gripper=True |
| 带偏移移动 | protocol.move_labware() |
pick_up_offset, drop_offset |
| 移动到模块 | protocol.move_labware() |
labware, module_object, use_gripper=True |
| 处置到废物槽 | protocol.move_labware() |
labware, waste_chute, use_gripper=True |
| 移动离线 | protocol.move_labware() |
labware, OFF_DECK, use_gripper=True |
| 手动移动 | protocol.move_labware() |
use_gripper=False(暂停等待用户) |
平台要求
仅适用于 Opentrons Flex
- API 版本: 2.15+(支持夹持器)
- 机器人类型: 必须指定
"robotType": "Flex"
基本用法
在实验台槽位之间移动
from opentrons import protocol_api
metadata = {'apiLevel': '2.19'}
requirements = {"robotType": "Flex", "apiLevel": "2.19"}
def run(protocol: protocol_api.ProtocolContext):
# 加载实验室器皿
source_plate = protocol.load_labware("corning_96_wellplate_360ul_flat", "C1")
# 移动实验室器皿到新实验台槽位
protocol.move_labware(
labware=source_plate,
new_location="D2",
use_gripper=True
)
实验台槽位格式(两者都适用):
- 坐标格式:“A1”, “B2”, “C3”, “D1”(适用于 Flex 的首选)
- 数字格式:“1”, “2”, “3” 等(OT-2 旧版,仍兼容)
移动到硬件模块
# 加载模块和实验室器皿
temp_mod = protocol.load_module("temperature module gen2", "D1")
plate = protocol.load_labware("corning_96_wellplate_360ul_flat", "C2")
# 移动板到温度模块
protocol.move_labware(
labware=plate,
new_location=temp_mod,
use_gripper=True
)
移动到废物槽
# 加载废物槽
waste_chute = protocol.load_waste_chute()
# 处置使用过的板
protocol.move_labware(
labware=used_plate,
new_location=waste_chute,
use_gripper=True
)
移动离线
from opentrons.protocol_api import OFF_DECK
# 移动实验室器皿离线(到存储)
protocol.move_labware(
labware=archive_plate,
new_location=OFF_DECK,
use_gripper=True
)
# 稍后:从离线存储取回
protocol.move_labware(
labware=archive_plate,
new_location="B3",
use_gripper=True
)
使用案例: 通过暂时存储实验室器皿离线来释放实验台空间
位置偏移
使用偏移向量微调拾取和放置位置:
基本偏移语法
protocol.move_labware(
labware=plate,
new_location="D2",
use_gripper=True,
pick_up_offset={"x": 0, "y": 0, "z": 2}, # 拾取时提高 2mm
drop_offset={"x": 0, "y": 0, "z": 1} # 放置时提高 1mm
)
偏移单位: 毫米 坐标:
- x: 左(-)/ 右(+)
- y: 后(-)/ 前(+)
- z: 下(-)/ 上(+)
何时使用偏移
拾取偏移:
- 实验室器皿比预期高/低
- 适配器或自定义实验室器皿具有非标准高度
- 确保正确的夹持器接合
放置偏移:
- 确保在模块或适配器上正确放置
- 适应非标准着陆表面
- 避免与实验台特征碰撞
示例:自定义实验室器皿
# 自定义深孔板需要更高拾取
custom_plate = protocol.load_labware("custom_deepwell_96", "C1")
protocol.move_labware(
labware=custom_plate,
new_location="D1",
use_gripper=True,
pick_up_offset={"x": 0, "y": 0, "z": 3}, # 拾取时提高 3mm
drop_offset={"x": 0, "y": 0, "z": 0} # 标准放置
)
手动移动替代方案
设置 use_gripper=False 以暂停协议等待用户手动移动实验室器皿:
# 暂停手动移动
protocol.move_labware(
labware=delicate_plate,
new_location="D3",
use_gripper=False # 协议暂停,用户手动移动板
)
使用案例: 精细实验室器皿、不可夹持物品或故障排除
模块集成
温度模块
temp_mod = protocol.load_module("temperature module gen2", "D1")
plate = protocol.load_labware("corning_96_wellplate_360ul_flat", "C2")
# 移动到温度模块
protocol.move_labware(plate, temp_mod, use_gripper=True)
# 设置温度
temp_mod.set_temperature(4)
protocol.delay(minutes=5)
# 移动离模块
protocol.move_labware(plate, "C2", use_gripper=True)
temp_mod.deactivate()
加热摇床模块
关键: 在夹持器操作前打开实验室器皿锁闩
hs_mod = protocol.load_module("heaterShakerModuleV1", "D1")
adapter = hs_mod.load_adapter("opentrons_96_flat_bottom_adapter")
plate = protocol.load_labware("corning_96_wellplate_360ul_flat", "C2")
# 移动板到模块前打开锁闩
hs_mod.open_labware_latch()
# 移动板到加热摇床
protocol.move_labware(plate, hs_mod, use_gripper=True)
# 关闭锁闩以摇动
hs_mod.close_labware_latch()
hs_mod.set_and_wait_for_temperature(37)
hs_mod.set_and_wait_for_shake_speed(500)
protocol.delay(minutes=10)
hs_mod.deactivate_shaker()
hs_mod.deactivate_heater()
# 移除板前打开锁闩
hs_mod.open_labware_latch()
# 移动板离模块
protocol.move_labware(plate, "C2", use_gripper=True)
热循环仪模块
关键: 在夹持器操作前打开盖
tc_mod = protocol.load_module("thermocyclerModuleV2")
plate = protocol.load_labware("opentrons_96_wellplate_200ul_pcr_full_skirt", "C2")
# 移动板到热循环仪前打开盖
tc_mod.open_lid()
# 移动板到热循环仪
protocol.move_labware(plate, tc_mod, use_gripper=True)
# 关闭盖并运行 PCR
tc_mod.close_lid()
tc_mod.set_lid_temperature(105)
# ... PCR 循环 ...
# 移除板前打开盖
tc_mod.open_lid()
# 移动板离热循环仪
protocol.move_labware(plate, "C2", use_gripper=True)
磁性块(Flex)
mag_block = protocol.load_module("magneticBlockV1", "D1")
mag_plate = protocol.load_labware("biorad_96_wellplate_200ul_pcr", "C2")
# 移动板到磁性块以进行磁珠分离
protocol.move_labware(mag_plate, mag_block, use_gripper=True)
# 等待磁珠收集
protocol.delay(minutes=3)
# 移液上清液(磁珠被磁铁吸附)
pipette.transfer(150, mag_plate.wells(), waste.wells())
# 移动板离磁铁以进行重悬
protocol.move_labware(mag_plate, "C2", use_gripper=True)
吸光度板读取器
关键: 读取器盖在夹持器操作前必须打开
reader = protocol.load_module("absorbanceReaderV1", "D3")
assay_plate = protocol.load_labware("corning_96_wellplate_360ul_flat", "C2")
# 初始化读取器
reader.close_lid()
reader.initialize(mode="single", wavelengths=[450])
# 移动板到读取器前打开盖
reader.open_lid()
# 移动板到读取器
protocol.move_labware(assay_plate, reader, use_gripper=True)
# 关闭盖并读取
reader.close_lid()
data = reader.read()
# 移除板前打开盖
reader.open_lid()
# 移动板离读取器
protocol.move_labware(assay_plate, "C2", use_gripper=True)
常见模式
多模块工作流程
# 带模块转移的 DNA 提取
sample_plate = protocol.load_labware("biorad_96_wellplate_200ul_pcr", "C1")
hs_mod = protocol.load_module("heaterShakerModuleV1", "D1")
mag_block = protocol.load_module("magneticBlockV1", "D2")
temp_mod = protocol.load_module("temperature module gen2", "D3")
# 1. 在加热摇床上裂解
hs_mod.open_labware_latch()
protocol.move_labware(sample_plate, hs_mod, use_gripper=True)
hs_mod.close_labware_latch()
hs_mod.set_and_wait_for_temperature(56)
hs_mod.set_and_wait_for_shake_speed(1000)
protocol.delay(minutes=15)
hs_mod.deactivate_shaker()
hs_mod.deactivate_heater()
hs_mod.open_labware_latch()
# 2. 在磁性块上磁珠结合
protocol.move_labware(sample_plate, mag_block, use_gripper=True)
protocol.delay(minutes=3)
pipette.transfer(150, sample_plate.wells(), waste.wells())
# 3. 在温度模块上洗脱(冷)
protocol.move_labware(sample_plate, temp_mod, use_gripper=True)
temp_mod.set_temperature(4)
pipette.transfer(50, elution_buffer, sample_plate.wells())
# 4. 返回实验台
protocol.move_labware(sample_plate, "C1", use_gripper=True)
temp_mod.deactivate()
板堆叠工作流程
# 顺序处理多个板
plates = [
protocol.load_labware("corning_96_wellplate_360ul_flat", "C1"),
protocol.load_labware("corning_96_wellplate_360ul_flat", "C2"),
protocol.load_labware("corning_96_wellplate_360ul_flat", "C3")
]
reader = protocol.load_module("absorbanceReaderV1", "D3")
reader.close_lid()
reader.initialize(mode="single", wavelengths=[600])
reader.open_lid()
for i, plate in enumerate(plates):
# 读取每个板
protocol.move_labware(plate, reader, use_gripper=True)
reader.close_lid()
data = reader.read(export_filename=f"plate_{i+1}_od600")
reader.open_lid()
# 移动到离线存储
protocol.move_labware(plate, OFF_DECK, use_gripper=True)
废物管理
# 处置使用过的消耗品
waste_chute = protocol.load_waste_chute()
# 使用吸头架后
protocol.move_labware(empty_tips, waste_chute, use_gripper=True)
# 处理样品板后
protocol.move_labware(used_plate, waste_chute, use_gripper=True)
动态实验台空间管理
# 通过移动非活跃实验室器皿离线来释放实验台空间
storage = OFF_DECK
# 初始设置 - 板从实验台开始
plate_1 = protocol.load_labware("corning_96_wellplate_360ul_flat", "B1")
plate_2 = protocol.load_labware("corning_96_wellplate_360ul_flat", "B2")
plate_3 = protocol.load_labware("corning_96_wellplate_360ul_flat", "B3")
# 处理板 1
# ... 在 plate_1 上的操作 ...
# 移动板 1 离线以释放空间
protocol.move_labware(plate_1, storage, use_gripper=True)
# 处理板 2
# ... 在 plate_2 上的操作 ...
# 需要时取回板 1
protocol.move_labware(plate_1, "B1", use_gripper=True)
可夹持实验室器皿
夹持器只能移动具有兼容几何结构的实验室器皿。
兼容特征
实验室器皿必须具有以下之一:
- 夹持器兼容边缘 - 用于夹持器爪的扩展唇或脊
- 侧边握把 - 侧边的凹痕或特征
- Opentrons 认证实验室器皿 - 已验证夹持器兼容性
检查兼容性
大多数 Opentrons 实验室器皿和主要品牌(Corning、NEST、Axygen、Bio-Rad)都夹持器兼容。在协议部署前检查实验室器皿定义或测试。
不可夹持实验室器皿
不可夹持实验室器皿的示例:
- 没有握把特征的非常小管或瓶
- 不规则形状容器
- 无夹持器考虑的自定义实验室器皿
- 精细或易碎物品
解决方案: 使用 use_gripper=False 提示手动移动,或使用适配器。
最佳实践
- 在夹持器移动前打开模块盖/锁闩 - 加热摇床、热循环仪、吸光度读取器需要
- 使用描述性变量名 - 清晰跟踪实验室器皿移动
- 首先用模拟测试 - 在硬件上运行前验证夹持器移动
- 添加协议注释 - 记录移动实验室器皿的原因
- 规划实验台布局 - 最小化不必要移动,优化效率
- 策略性使用 OFF_DECK - 为复杂协议释放实验台空间
- 检查实验室器皿兼容性 - 部署前确保实验室器皿可夹持
- 谨慎使用偏移 - 仅在必要时进行正确定位
- 考虑手动回退 - 为故障排除准备
use_gripper=False备份 - 正确处理 - 使用废物槽处理使用过的消耗品以维护工作空间
常见错误
❌ 移动板到加热摇床时锁闩关闭:
protocol.move_labware(plate, hs_mod, use_gripper=True) # 错误:锁闩关闭
✅ 正确:
hs_mod.open_labware_latch()
protocol.move_labware(plate, hs_mod, use_gripper=True)
❌ 移动板到热循环仪时盖关闭:
protocol.move_labware(plate, tc_mod, use_gripper=True) # 错误:盖关闭
✅ 正确:
tc_mod.open_lid()
protocol.move_labware(plate, tc_mod, use_gripper=True)
❌ 移动不可夹持实验室器皿:
# 无夹持器特征的自定义实验室器皿
protocol.move_labware(custom_tubes, "D2", use_gripper=True) # 错误:无法夹持
✅ 正确:
# 对不可夹持实验室器皿使用手动移动
protocol.move_labware(custom_tubes, "D2", use_gripper=False)
❌ 忘记指定 use_gripper:
protocol.move_labware(plate, "D2") # 默认 use_gripper=False,暂停协议
✅ 正确:
protocol.move_labware(plate, "D2", use_gripper=True) # 明确使用夹持器
❌ 移动到已占用位置:
plate_1 = protocol.load_labware("corning_96_wellplate_360ul_flat", "C1")
plate_2 = protocol.load_labware("corning_96_wellplate_360ul_flat", "C2")
protocol.move_labware(plate_1, "C2", use_gripper=True) # 错误:C2 被 plate_2 占用
✅ 正确:
# 先移动 plate_2,然后 plate_1
protocol.move_labware(plate_2, OFF_DECK, use_gripper=True)
protocol.move_labware(plate_1, "C2", use_gripper=True)
故障排除
夹持器无法夹持实验室器皿:
- 验证实验室器皿具有夹持器兼容特征
- 检查实验室器皿是否正确放置在实验台/模块上
- 尝试调整 pick_up_offset(增加 z)
- 对非兼容实验室器皿使用
use_gripper=False
夹持器碰撞错误:
- 确保模块盖打开(热循环仪、吸光度读取器)
- 验证加热摇床锁闩打开
- 检查实验台布局是否有障碍物
- 确认目标位置清晰
移动后实验室器皿未正确放置:
- 调整 drop_offset 以确保正确放置
- 检查模块/适配器与实验室器皿的兼容性
- 验证目标表面水平且清晰
协议意外暂停:
- 检查是否指定了
use_gripper=True - 验证协议是否启用夹持器
- 确保实验室器皿可夹持
OFF_DECK 移动错误:
- 导入 OFF_DECK 常量:
from opentrons.protocol_api import OFF_DECK - 跟踪实验室器皿位置 - 如果不在 OFFDECK,则无法移动
- 确保足够的离线存储槽
高级技术
条件性夹持器使用
# 对标准实验室器皿使用夹持器,对自定义使用手动
def move_smart(protocol, labware, destination, is_grippable=True):
if is_grippable:
protocol.move_labware(labware, destination, use_gripper=True)
else:
protocol.comment(f"请手动移动 {labware} 到 {destination}")
protocol.move_labware(labware, destination, use_gripper=False)
move_smart(protocol, standard_plate, "D2", is_grippable=True)
move_smart(protocol, custom_tubes, "D3", is_grippable=False)
偏移校准辅助
# 测试偏移以找到最佳值
def test_gripper_offset(protocol, labware, destination, z_offset_range):
for z in z_offset_range:
protocol.comment(f"测试拾取偏移 z={z}")
protocol.move_labware(
labware,
destination,
use_gripper=True,
pick_up_offset={"x": 0, "y": 0, "z": z}
)
protocol.pause("检查拾取是否成功。继续以继续。")
# 移动回
protocol.move_labware(labware, "C1", use_gripper=True)
# 运行测试
test_gripper_offset(protocol, test_plate, "D2", z_offset_range=[0, 1, 2, 3])
板轮转模式
# 通过处理站轮转板
def process_plate_carousel(protocol, plates, processing_station):
"""通过单一模块处理多个板。"""
for i, plate in enumerate(plates):
protocol.comment(f"处理板 {i+1}/{len(plates)}")
# 移动到处理站
protocol.move_labware(plate, processing_station, use_gripper=True)
# 处理(例如:读取吸光度)
# ... 处理步骤 ...
# 移动到归档
protocol.move_labware(plate, OFF_DECK, use_gripper=True)
process_plate_carousel(protocol, [plate1, plate2, plate3], reader_module)
实验台布局规划
高效夹持器工作流程的技巧:
- 保持高流量位置可访问 - 将频繁移动的实验室器皿放在中心实验台位置
- 逻辑分组模块 - 按工作流程顺序排列模块以最小化移动距离
- 为吸光度读取器保留第 4 列 - 如果使用读取器,整个第 4 列是暂存区
- 使用 OFF_DECK 存储 - 释放实验台空间用于活跃实验室器皿
- 规划废物槽访问 - 确保夹持器可以到达废物槽无障碍
示例高效布局:
1 2 3 4
A [板] [模块1] [读取器] [保留]
B [板] [模块2] [读取器] [保留]
C [吸头] [试剂] [读取器] [保留]
D [吸头] [废物] [读取器] [保留]
与暂存区槽位集成
Flex 暂存区槽位(第 4 列:A4, B4, C4, D4)用于:
- 吸光度读取器盖存储(自动)
- 临时实验室器皿存放
- 夹持器中间位置
重要: 当加载吸光度读取器时,第 4 列不能用于实验室器皿。
API 版本要求
- 最低 API 版本: 2.15(引入夹持器支持)
- 推荐: 2.19+ 以获取完整功能支持
- 机器人类型: 必须是 Opentrons Flex
附加资源
- 夹持器文档: https://docs.opentrons.com/v2/new_protocol_api.html#protocol_api.ProtocolContext.move_labware
- 实验室器皿库: https://labware.opentrons.com/(检查夹持器兼容性)
- Opentrons 支持: https://support.opentrons.com/
相关技能
opentrons- 主 Opentrons Python API 技能opentrons-heater-shaker- 加热摇床模块(需要夹持器集成)opentrons-absorbance-reader- 吸光度板读取器(需要夹持器)opentrons-magnetic-block- 磁性块(设计用于夹持器工作流程)opentrons-thermocycler- 热循环仪模块(夹持器兼容)opentrons-temperature-module- 温度模块(夹持器兼容)