Triangulate
SUMMARY
triangulate() reconstructs the calibration target's ChArUco corners in 3D from one synchronized frame, using the camera geometry from a prior calibrate() call, and validates the result against the board's known physical layout.
SUPPORTED TARGETS
Available only on CharucoTarget. Per-corner ArUco ids are required to match the same corner across cameras.
UNITS
points_3d are in the reference-camera frame in meters, as are neighbor_distances_m and plane_thickness_m. rms_per_camera is in pixels.
The Skill
python
report = calibrator.triangulate(image_lists, frame_index=0)Requires a successful calibrate() call first.
| Skill | Returns | Description |
|---|---|---|
triangulate(image_lists, frame_index=0) | TriangulationReport | Triangulate ChArUco corners from one synchronized frame and validate against board geometry. |
| Parameter | Type | Description |
|---|---|---|
image_lists | list[list[ndarray]] | image_lists[cam][frame], the same synchronized set passed to calibrate(). |
frame_index | int | Which synchronized frame to reconstruct. Default 0. |
The Code
python
from telekinesis.axon import MultiCameraCalibrator
from telekinesis.axon.targets import CharucoTarget
target = CharucoTarget(squares_x=6, squares_y=9, square_length=0.012, marker_length=0.009)
calibrator = MultiCameraCalibrator(target, num_cameras=3, reference_index=1)
calibrator.calibrate(image_lists)
report = calibrator.triangulate(image_lists, frame_index=0)
report.points_3d
report.neighbor_distances_m
report.plane_thickness_mTriangulationReport
| Field | Type | Description |
|---|---|---|
frame_index | int | Frame the report was computed on. |
points_3d | (N, 3) ndarray | Triangulated ChArUco corners, in the reference-camera frame. |
ids | ndarray | Corner ids aligned with points_3d rows. |
neighbor_distances_m | list[float] | Distances between physically adjacent corners, in meters, should match the board's known geometry. |
plane_thickness_m | float | Third singular value of the mean-centered point cloud, a proxy for board flatness, in meters. |
rms_per_camera | list[float] | Per-camera reprojection RMS (px); NaN when a camera saw nothing. |
counts_per_camera | list[int] | Per-camera count of corners used. |