Labware Transport
See Modules for the module model and the comparison of the three transport mechanisms (reach, rotation, lifecycle). This guide covers the procedural API for each.
For deep-dive vendor detail: CO-RE Gripper, iSWAP, Bravo Gripper, IPG.
Prerequisites
- A running liquid handler connector connected to the UniteLabs platform
- A plate or other labware on the deck
Connect to the Device
from unitelabs.liquid_handling.hamilton import MicrolabSTAR
hamilton = MicrolabSTAR(
name="Microlab STAR",
)
await hamilton.initialize()
from unitelabs.liquid_handling.hamilton import MicrolabSTAR
hamilton = MicrolabSTAR(
name="Microlab STAR",
)
await hamilton.initialize()
from unitelabs.liquid_handling.agilent import Bravo
bravo = Bravo(
name="Bravo",
)
await bravo.configure()
await bravo.initialize()
await bravo.activate()
Arrange the Deck
from unitelabs.labware import Standard96Plate
from unitelabs.labware.hamilton import PLT_CAR_L5MD_A00
plate_carrier = PLT_CAR_L5MD_A00()
plate = Standard96Plate()
plate_carrier[0] = plate
hamilton.deck.add(plate_carrier, track=1)
from unitelabs.labware import Standard96Plate
from unitelabs.labware.hamilton import PLT_CAR_L5MD_A00
plate_carrier = PLT_CAR_L5MD_A00()
plate = Standard96Plate()
plate_carrier[0] = plate
hamilton.deck.add(plate_carrier, track=1)
from unitelabs.labware.plates import Standard96Plate
plate = Standard96Plate(identifier="DestinationPlate_96Well")
bravo.deck.add(plate, location=5)
Set Up the Transport Module
The CO-RE gripper paddle storage location varies by setup. Configure the locations and channel indices that correspond to your instrument, then pick up the paddles. Two consecutive channels must be used to pick up the paddles.
from unitelabs.labware import Vector
core_gripper_locations = (
Vector(x=796, y=105, z=225),
Vector(x=796, y=79, z=225),
)
await hamilton.core_gripper.configure(
park_location=core_gripper_locations,
channels=(6, 7),
)
await hamilton.core_gripper.pick_up_gripper()
The iSWAP module deactivates other tools automatically before any operation. An explicit activate() is optional since SDK ≥ 0.2.1.
await hamilton.iswap.activate() # optional
No setup required; the Bravo gripper is always available.
Pick Up Labware
await hamilton.core_gripper.pick_up_from(
plate_carrier[0],
strength=30, # grip pressure 0–99
move_speed=128.7, # mm/s on z-axis
close_speed=277.8, # mm/s closing gripper
)
Further parameters such as grip width and grip height are determined based on the definition of the labware that is being picked up. See the CO-RE gripper guide for a full list of available parameters.
Verify the carrier site is now empty and the gripper holds the plate:
assert plate_carrier[0].get() == None
assert hamilton.core_gripper.get() == plate
from unitelabs.liquid_handling.hamilton.modules.iswap.interfaces import Direction
await hamilton.iswap.pick_up_from(
plate_carrier[0],
pick_up_direction=Direction.LEFT,
strength=30,
)
Further parameters such as grip width and grip height are determined based on the definition of the labware that is being picked up. See the iSWAP guide for a full list of available parameters.
Verify:
assert plate_carrier[0].get() == None
assert hamilton.iswap.get() == plate
Direction defines which side the iSWAP arm approaches from: FRONT, RIGHT, BACK, or LEFT. When omitted, the iSWAP uses its current orientation. See the iSWAP vendor guide for details on the positional reference frame.Pass the labware object directly. The gripper moves to the plate's current deck location.
await bravo.gripper.pick_up(plate)
Verify:
assert bravo.deck.is_location_empty(5)
assert bravo.gripper.get() == plate
Optional parameters: grip_gap, width_offset, movement_velocity, gripper_velocity, pick_up_offset.
Put Down Labware
Labware can only be placed on carrier sites.
await hamilton.core_gripper.put_down(
carrier_site=plate_carrier[4],
pressure=0, # pressure on bottom
move_speed=128.7, # mm/s on z-axis
)
assert hamilton.core_gripper.get() == None
assert plate_carrier[4].get() == plate
await hamilton.iswap.put_down(
carrier_site=plate_carrier[4],
drop_direction=Direction.LEFT,
)
assert hamilton.iswap.get() == None
assert plate_carrier[4].get() == plate
Pass the target deck site.
await bravo.gripper.put_down(bravo.deck[7])
assert bravo.gripper.get() is None
assert bravo.deck.get_labware_at_location(7) == plate
Transfer Shorthand
Combine pick-up and put-down in a single call.
The CO-RE gripper does not have a dedicated transfer method. Use pick_up_from followed by put_down.
# Transfer labware to a carrier site
await hamilton.iswap.transfer(
plate,
target=plate_carrier[4],
pick_up_direction=Direction.LEFT,
drop_direction=Direction.LEFT,
)
# Transfer between two sites without a labware reference
await hamilton.iswap.transfer_from(
source=plate_carrier[0],
target=plate_carrier[4],
)
# Transfer labware to another deck location
await bravo.gripper.transfer(plate, target=bravo.deck[1])
# Transfer between deck sites without a labware reference
await bravo.gripper.transfer_from(
source=bravo.deck[1],
target=bravo.deck[9],
)
Deactivate / Return Module
In order to return the CO-RE gripper to its storing location, use put_down_gripper command:
await hamilton.core_gripper.put_down_gripper()
The put_down_gripper command will be executed automatically if another module is used.
To park the iSWAP on the back of the instrument, use home command or activate any other tool:
await hamilton.iswap.home()
The Bravo gripper is always ready, so no explicit deactivation is needed. It is deactivated automatically when a pipetting operation begins.