Solves both unknown transforms of a hand-eye calibration from collected samples.
More...
template<moveit_pro::hand_eye_calibration::CalibrationMode mode>
class moveit_pro::behaviors::SolveHandEyeCalibration< mode >
Solves both unknown transforms of a hand-eye calibration from collected samples.
Registered once per camera arrangement: SolveEyeInHandCalibration (camera on the end effector, board fixed in the world) recovers the camera pose in the end effector frame and the board pose in the robot base frame; SolveEyeToHandCalibration (camera fixed in the world, board on the end effector) recovers the camera pose in the robot base frame and the board pose in the end effector frame. The ports are identical; only what the two recovered poses mean differs. The pose outputs are stamped with the frames the samples were recorded with; only the frame name is set, the timestamp stays zero (which TF consumers read as "latest available").
Synchronous by design: the solve is one small PnP per sample plus a fixed-size linear solve, so the tick cost grows only linearly with the number of collected samples.
The recovered camera pose is the camera optical frame (REP 103 optical convention: z forward, y down), not the camera mount link, because the board observations come from PnP in that frame.
| Data Port Name | Port Type | Object Type |
| samples | input | std::vector<moveit_pro::hand_eye_calibration::CalibrationSample> |
| camera_name | input | std::string |
| camera_info | input | sensor_msgs::msg::CameraInfo |
| camera_pose | output | geometry_msgs::msg::PoseStamped |
| board_mount_pose | output | geometry_msgs::msg::PoseStamped |
| used_sample_count | output | int |
| rotation_residual | output | double |
| translation_residual | output | double |