Ink palette

The installed palette is calibration palette v11 (cad/calibration-palette-v11), one printed piece on a single longitudinal 2020 rail, secured by one accessible M4 screw. It carries six ink caps, a touch-trigger probe, a Raspberry Pi camera aimed at the probe ball, the drawing e-stop and an AprilTag on the base-mounted diamond seat. It is the only palette. It is independent of the robot URDF; its pose in the arm base is measured after every placement.

Source

Meaning

urdf/palette.urdf

The palette body and its fixed frames. Generated by the CAD build; do not edit

urdf/meshes/palette/calibration_palette_v11.stl, .glb

Body mesh (visual and collision) and the viewer’s copy

config/palette.yaml

The six slots, named after the URDF inkcap_* links; cap sizes; the arm that dips there

config/palette_geometry.json

Revision calibration_palette_v11, the URDF and body frame, the viewer mesh, the synthetic simulation pose, measured rim overrides (rim_z_m, none yet)

config/fiducials.json

targets.palette: AprilTag 36h11 ID 0, 46 mm black square

config/palette_load.yaml

Recorded cap contents

Frames

palette_root is the CAD frame. Its origin is on the probe axis at the rail tops (z = 0 is the top of the 2020 rails). +X points from the probe toward the Pi camera and the e-stop enclosure, +Y crosses the rail, and +Z is up.

Frame

Position (mm)

Meaning

palette_tag

68, −26, 8.2

The installed sticker’s centre on its surface, yawed 135° (below)

palette_probe_ball

0, 0, 55.6

Centre of the probe’s 2 mm ball

palette_camera

122, 0, 55.6

The Pi camera lens; its +X points at the ball

palette_estop

74, 40, 32

The upward-facing E-stop; its +X points up

Caps

The caps stand in an L-M-S-S-M-L crescent from +Y to −Y, on a 36.5 mm arc about the probe axis centred at 175°, on the side away from the enclosure. Adjacent holders keep a 3 mm edge gap.

Slot

Size

Centre X, Y (mm)

Floor Z (mm)

inkcap_large_1

large

−7.47, 35.73

18

inkcap_medium_1

medium

−25.85, 25.77

22

inkcap_small_1

small

−34.84, 10.88

22

inkcap_small_2

small

−36.20, −4.66

22

inkcap_medium_2

medium

−29.93, −20.89

22

inkcap_large_2

large

−13.56, −33.89

18

The inkcap_* frames are cap support floors, not rims. A rim is its floor plus the cap’s outside height from config/palette.yaml, which puts every rim 32 mm above the rail tops, flush with the holder tops. An entry in rim_z_m overrides the computed rim for that cap once it is measured.

config/palette.yaml states each cap by its outside: diameter_m across the rim, height_m from rim top to cap bottom, and wall_m for the rim, wall and base. Outside, the caps are 15 × 14, 11 × 10 and 8 × 10 mm (diameter × height; large, medium, small), in pockets of 15.6, 12.2 and 8.6 mm. The outside is what rests in the pocket and sets the rim height; the bore a tool enters is derived (ink_spec.CapSize.bore_diameter_m, .depth_m) and is a millimetre narrower. All six slots are assigned to the right arm; each placement still needs reach and clearance checks.

The palette tag

The same AprilTag 36h11 ID 0 sticker is reused. Its inventory retains the 46 mm black edge; the 60 mm CAD seat is centred at (68, -26) mm, with its surface at Z8. The seat is rotated 45 degrees. Sticker rotation is separate from seat rotation: the installed palette_tag frame must describe the printed pattern’s orientation, not assume it from the platform.

The installed pattern’s +X runs 135° from the palette’s +X (installed_tag in cad/calibration-palette-v11/design.json, confirmed). The overhead D555 measured it on 2026-09-30: of the seat’s four quarter turns, only 135° puts the probe’s top, the e-stop and the camera plate where the D555’s depth finds them. A re-applied sticker needs the same check.

The previous v10 tag transform and palette placement are retired; no old camera measurement is transplanted to the new print.

Measuring the palette pose

The probe calibration measures the station afresh in every run, never from a stored pose: tatbot ros station places it in the arm’s base from the overhead D555’s view of the palette tag, through the arm’s registration (ros/README.md §7). The arm registration and palette placement must describe the current rig.

Measure each arm separately:

tatbot ros station --arm right
tatbot ros station --arm left

The ROS stack measures the station afresh from the D555, validates the views, and carries the full palette_tag transform from urdf/palette.urdf into the arm base. The subsequent calibration run enforces freshness and checks for station movement. The earlier camera-scan placement (tatbot vision palette and its viewer preview) is retired. A missing placement never falls back to the synthetic simulation pose.

Simulation

The simulator loads the palette from urdf/palette.urdf and config/palette.yaml, with the tag from the fiducial inventory. It places the palette at simulation_root_xyz_m and simulation_root_quaternion_wxyz in config/palette_geometry.json, a synthetic scene pose that is never a hardware fallback.

Dipping

The 3RL needle cartridge dips; the ballpoint is a cartridge tool that never does. A dip aims by the station touch, the probe’s ball where the arm’s own touches found it, and the caps’ CAD offsets about it, not by the overhead fix alone (ros/README.md section 6).

The probe and the camera

The touch probe and the Pi camera are for tool-tip and station calibration at the ROS 2 stack’s palette station (ros/README.md section 7). The probe is normally closed, wired to the palette Pi’s GPIO27. The camera is an Arducam 64 MP autofocus module (OmniVision OV64A40) on the palette Pi’s CSI connector, aimed along −X at the probe ball 122 mm away. This mount now reaches the documented near-focus distance; focus and image scale must be checked on the installed camera. Measurements from the former 55 mm mount do not describe the new optical setup. The probe relay and the driver’s probe guard read the probe, and the probe calibration touches the tool’s tube end on its ball (ros/README.md §7); no software reads the camera yet.

Retired

The eight-cap rack and the three-tip volcano fixture (cad/palette-v2) are retired, with their meshes and their 81 mm ID 22 tag, and so is everything built on the fixture’s three pits: the planted-tip refinement of the palette pose, cup teaching, and the per-arm hand-guided recipe with its kinematic refinement. None of their commands or calibration phases exists now. cad/palette-v2 remains only because the integrated-station concept (cad/integrated-station-v1) reads its geometry. The v11 touch probe replaces the pits for tool-tip and station calibration.