Skip to content

Setting Jubilee Tool Parking Positions

Overview

Before a tool can be reliably picked up and parked on the Jubilee machine, the tool's parking coordinates must be calibrated and saved. This procedure guides you through setting up the tool parking location, adjusting parking posts, and updating system macros.

Pre-Conditions

  • Jubilee is powered on and connected.
  • Bed is clear of obstacles.
  • Parking posts are loosely installed but adjustable.
  • Proper tool (e.g., pipette, camera) is available.
  • Access to Duet Web Control interface (for editing config.g and system macros).

Steps

1. Connect to the Machine

Connect to Jubilee and verify tool setup.

python
from science_jubilee.machine import Machine
from science_jubilee.tools import Tool

# Connect to machine (update address if needed)
m = Machine(address="192.168.1.2")

# View existing configured tools
m.configured_tools

2. Define Tool Metadata

Set tool number, name, and manhattan movement style.

python
tool_number = 1  # Tool index number
tool_name = "Camera"  # Human-readable name for tool
manhattan_offset = 0  # Default 0; adjusts XY movement separation

Optional: Set up a fine control panel (if available).

python
from CalibrationControlPanel import make_control_panel
control_panel = make_control_panel(m)

3. Add Tool to Duet Firmware

Generate the M563 tool definition command.

python
print(f'M563 P{tool_number} S"{tool_name}"')
  • Copy the output.
  • Paste it into the config.g file under the Tool Definitions section in Duet Web Control.
  • Save and restart the mainboard.

After rebooting:

python
# Home the machine
m.home_all()

4. Roughly Position Parking Post

  • Loosely install parking post using tee-nuts and M5 screws.
  • Allow movement for fine adjustment later.

5. Drop Bed

Lower the bed to avoid collisions.

python
m.move_to(z=150)

6. Pick Up the Tool

Manually position tool against lock carriage, then lock it.

python
m.tool_lock()

7. Find General Parking X/Y Position

Move machine near parking post location.

python
# Move close to parking post in X
m.move_to(x=110)

# Move close to parking post in Y
m.move_to(y=200)

Use fine jog controls (via control panel) to carefully position tool in front of parking post.

8. Record Y-Clear Position

Save the "y-clear" position (before engaging with parking post).

python
y_clear = float(m.get_position()['Y'])

9. Physically Adjust Parking Post

  • Slide the parking post along the rail to line up with tool X-position.
  • Adjust parking post height via top adjustment screw if needed.

10. Dock Fully Into Parking Post

  • Carefully jog forward (small increments, ~1mm steps) until tool seats into parking post dowels.
  • Verify correct alignment visually.

Use fine jog controls if needed:

python
control_panel

11. Record X/Y Parked Positions

Save the fully docked position.

python
pos = m.get_position()
x_park = float(pos['X'])
y_park = float(pos['Y'])

12. Finalize Physical Setup

  • Tighten tee-nuts to fix parking post on the rail.
  • Tighten height adjustment screws on the parking post.

13. Unlock and Back Out

Unlock the tool:

python
m.tool_unlock()

Jog carriage backward to safely clear tool and post.

python
control_panel

14. Update System Macros

You must update or create 3 macro files (tprex.g, tpostx.g, tfreex.g) for this tool.

Prepare Template Engine

python
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader("templates"))

Generate tpostx.g

python
template = env.get_template("tpost.g")
tpost_content = template.render(
    tool_number=tool_number,
    x_park=x_park,
    y_park=y_park,
    y_clear=y_clear,
    manhattan_offset=manhattan_offset
)

print(tpost_content)
  • Paste into tpost{tool_number}.g under Duet system macros.

Generate tfreex.g

python
template = env.get_template("tfree.g")
tfree_content = template.render(
    tool_number=tool_number,
    x_park=x_park,
    y_park=y_park,
    y_clear=y_clear,
    manhattan_offset=manhattan_offset
)

print(tfree_content)
  • Paste into tfree{tool_number}.g.

Generate tprex.g

python
template = env.get_template("tpre.g")
tpre_content = template.render(
    tool_number=tool_number,
    x_park=x_park,
    y_park=y_park,
    y_clear=y_clear,
    manhattan_offset=manhattan_offset
)

print(tpre_content)
  • Paste into tpre{tool_number}.g.

15. Test the Setup

Perform a test tool pickup and park cycle:

python
tool = Tool(tool_number, tool_name)
m.load_tool(tool)

# Pick up
m.pickup_tool(tool)

# Park
m.park_tool()

If docking/undocking motion is not perfect:

  • Adjust Y values slightly in the corresponding macro files.
  • Re-upload macros and test again.

Important Notes

  • Always move slowly near the parking posts to avoid collisions.
  • Always perform parking moves using manhattan style (separate X and Y motions).
  • After physical tightening, do not touch tool manually—use machine moves only.
  • A bad parking alignment can cause severe tool or post damage during auto toolchanges.

Pre-release documentation · Internal research use only · Not authorized for redistribution.