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.
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_tools2. Define Tool Metadata
Set tool number, name, and manhattan movement style.
tool_number = 1 # Tool index number
tool_name = "Camera" # Human-readable name for tool
manhattan_offset = 0 # Default 0; adjusts XY movement separationOptional: Set up a fine control panel (if available).
from CalibrationControlPanel import make_control_panel
control_panel = make_control_panel(m)3. Add Tool to Duet Firmware
Generate the M563 tool definition command.
print(f'M563 P{tool_number} S"{tool_name}"')- Copy the output.
- Paste it into the
config.gfile under the Tool Definitions section in Duet Web Control. - Save and restart the mainboard.
After rebooting:
# 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.
m.move_to(z=150)6. Pick Up the Tool
Manually position tool against lock carriage, then lock it.
m.tool_lock()7. Find General Parking X/Y Position
Move machine near parking post location.
# 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).
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:
control_panel11. Record X/Y Parked Positions
Save the fully docked position.
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:
m.tool_unlock()Jog carriage backward to safely clear tool and post.
control_panel14. Update System Macros
You must update or create 3 macro files (tprex.g, tpostx.g, tfreex.g) for this tool.
Prepare Template Engine
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader("templates"))Generate tpostx.g
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}.gunder Duet system macros.
Generate tfreex.g
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
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:
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.