Manual Labware Deck Calibration (Slot Offset Recording)
Overview
When installing a Lab Automation Deck onto Jubilee, you must record the precise x/y offset positions for each slot to ensure reliable operation. This procedure steps through the full calibration process, including moving, probing, saving offsets, and generating a new calibrated deck configuration.
Note: You can use any tool to perform calibration, but a pipette tool with a tip installed is recommended for precision.
Pre-Conditions
- Jubilee machine is powered on and connected.
- A Lab Automation Deck (or other deck) is physically installed.
- Machine is homed.
- Pipette tool is available and loaded (or another precise tool).
- A pipette tip is manually installed if using a pipette.
Steps
1. Connect to the Machine
Create a connection to the Jubilee machine.
from science_jubilee.machine import Machine
# Connect to the machine
m = Machine(address="192.168.1.2")2. Drop Bed for Safety
Lower the bed to create room for movement.
m.move_to(z=150)3. Load and Pick Up Tool
Load your calibration tool (typically a pipette).
from science_jubilee.tools import Tool
# Initialize and load the tool
tool = Tool(index=3, name="Pipette")
m.load_tool(tool)
m.pickup_tool(tool)Important: If using a pipette, manually install a tip before continuing.
4. Set Up Calibration Metadata
Prepare basic deck metadata for calibration output.
deck_type = "Lab Automation Deck"
num_slots = 6
num_sharps_containers = 0
slot_type = "SLAS Standard Labware"
plate_material = "Aluminum"
mask_material = "Delrin"
offset_corner = "bottom_left" # Corner without flexure
slot_data = {}5. Define Slot Data Recording Function
Create a helper function to capture current machine position for each slot.
def set_slot_data(slot_index: int):
position = m.get_position()
slot_offset = [float(position['X']), float(position['Y'])]
slot_data[slot_index] = slot_offset6. Probe and Record Slot Positions
Move carefully to each slot, fine-tune manually, and record offsets.
General Movement Safety
- Move approximately toward slot.
- Slowly lower Z-axis using Duet Web Control (e.g., Z-5, then Z-0.5).
- Adjust X and Y manually to align with the chosen corner (no flexure element).
- Do not overshoot! Always lower Z cautiously.
Slot Calibration
Example for Slot 0:
# Move roughly near slot 0
m.move_to(x=30, y=30)
# Manually fine-tune position via Duet Web Control
# ...
# Save slot 0 offset
slot_index = 0
set_slot_data(slot_index)
# Raise bed before moving
m.move_to(z=100)Example for Slot 1:
# Move ~140mm right to next slot
m.move(dx=140)
# Manually fine-tune again
# ...
slot_index = 1
set_slot_data(slot_index)
m.move_to(z=100)Example for Slot 2:
m.move(dx=-140, dy=100)
# Fine-tune
slot_index = 2
set_slot_data(slot_index)
m.move_to(z=100)(Repeat similarly for Slots 3, 4, and 5.)
Optional: Sharps Containers
If installed, record offset for sharps container manually.
# Move manually near sharps container
# ...
slot_index = -1
set_slot_data(slot_index)7. Save Calibration File
After all offsets are collected, save the calibrated deck configuration.
from science_jubilee.machine import get_root_dir
from jinja2 import Environment, FileSystemLoader
# Define file name
file_name = "my-calibrated-deck"
deck_config_path = os.path.join(get_root_dir(), "science_jubilee", "decks", "deck_definition", f"{file_name}.json")
# Load calibration template
env = Environment(loader=FileSystemLoader("templates"))
template = env.get_template("lab_automation_deck_template.json")
# Render and write
calibration_contents = template.render(
deck_type=deck_type,
num_slots=num_slots,
num_sharps_containers=num_sharps_containers,
slot_type=slot_type,
plate_material=plate_material,
mask_material=mask_material,
offset_corner=offset_corner,
slot_data=slot_data,
)
with open(deck_config_path, 'w') as f:
f.write(calibration_contents)8. Remove Pipette Tip and Park Tool
Manually remove the tip (if used), then park the tool safely.
# Remove tip manually
# Park tool
m.park_tool()Important Notes
- Always move slowly and incrementally while lowering Z — crashes can damage tools.
- Always touch the same corner for every slot (e.g., bottom_left).
- Double-check that slots are aligned before saving calibration.
- If machine loses connection mid-calibration, reconnect and continue.