# Dora Calibration Node Minimal eye-in-hand calibration node for a camera mounted on the robot gripper. ## Inputs - `image` (configurable via `IMAGE_INPUT`): image stream with metadata containing `encoding` and `shape` or `width/height`. - `camera_info` (optional): `[fx, fy, cx, cy]` float array with distortion in metadata. - `tcp_pose`: `[x, y, z, roll, pitch, yaw]` from `dora_ulite6` in mm/deg. ## Controls (OpenCV Window) - `q` quit - `r` restart calibration (clear observations and start over) ## Environment Variables | Variable | Default | Description | | --- | --- | --- | | `IMAGE_INPUT` | `image` | Image input name | | `CAMERA_INFO_INPUT` | `camera_info` | Camera info input name | | `POSE_INPUT` | `tcp_pose` | Robot pose input name | | `STATUS_INPUT` | `status` | Robot status input name (used for command completion) | | `COMMAND_OUTPUT` | `robot_cmd` | Output name for robot command messages | | `POSES_FILE` | `config/calibration_poses.yml` | YAML file path for calibration poses | | `POSE_UNITS` | `m` | Units for poses file (`m` or `mm`) | | `MOVE_SPEED` | _(unset)_ | Move speed override (mm/s) | | `OUTPUT_FILE` | `calibration.npz` | Output calibration file (observations saved as `{name}_observations.npz`) | | `METHOD` | `TSAI` | Hand-eye method (TSAI, PARK, HORAUD, ANDREFF, DANIILIDIS) | | `SQUARES_X` | `4` | ChArUco board squares X | | `SQUARES_Y` | `6` | ChArUco board squares Y | | `SQUARE_LENGTH` | `0.04` | Square length (m) | | `MARKER_LENGTH` | `0.03` | Marker length (m) | | `AUTO_RUN` | `true` | Automatically iterate poses and capture | | `WAIT_AFTER_MOVE` | `2.0` | Seconds to wait after a move before capture | | `MOVE_HOME_ON_START` | `true` | Move to calibration home when starting | | `HOME_X` | `200` | Calibration home X (mm) | | `HOME_Y` | `0` | Calibration home Y (mm) | | `HOME_Z` | `300` | Calibration home Z (mm) | | `HOME_ROLL` | `180` | Calibration home roll (deg) | | `HOME_PITCH` | `0` | Calibration home pitch (deg) | | `HOME_YAW` | `0` | Calibration home yaw (deg) | | `MIN_CORNERS` | `6` | Minimum ChArUco corners required for pose | | `LOG_INTERVAL` | `2.0` | Seconds between console detection logs | | `AUTO_SOLVE` | `true` | Automatically solve and save after last pose | ## Notes - Calibration runs automatically: moves through poses, captures, and saves results. - For safe operation, keep a clear workspace around the robot.