Cameras and calibration

You can configure camera settings through TANDEM:

tandem rig show                                   # the robot, the cameras, and which have extrinsics
tandem rig set robot.type panda_robotiq           # a Panda
tandem rig set cameras.external_2.serial SERIAL   # roles: hand, external, external_2

Extrinsics. Every configured camera needs extrinsics before a session can start. tandem rig show and tandem doctor list the missing ones. They go in calibration.json (tandem rig path --calibration prints where it is), one entry per camera, keyed by serial:

{
  "14846828": {"pose": [0.0266, 0.0705, -0.1392, -0.4509, -0.0045, -1.5620]},
  "32439448": {"pose": [0.1532, -0.5827, 0.4410, -2.0843, 0.0126, 0.1964]}
}

pose is [x, y, z, roll, pitch, yaw] in meters and radians (xyz Euler). For the wrist camera it is relative to the end effector; for an external camera it is relative to the robot's base. The full format is in Configuration.

To fill it in:

  • External cameras: calibrate each from DROID's GUI with the ChArUco board, as DROID's calibration guide describes. DROID writes droid/calibration/calibration_info.json in the same format. Copy each "<serial>_left" entry into the rig's file under the bare serial ("32439448_left" becomes "32439448").
  • Wrist camera: run tandem runtime run calibrate-wrist-cam, following TiPToP's guide but skipping its Bamboo controller step (the shim replaces it). It writes the entry for you.
  • Any other tool: write the entry yourself. A 4×4 transform T becomes T[:3, 3] followed by Rotation.from_matrix(T[:3, :3]).as_euler("xyz").

Check the result with tandem runtime run viz-calibration (the wrist camera) or tandem runtime run viz-calibration --camera external. tandem runtime run runs TiPToP's scripts with your NUC address, cameras and calibration file. Recalibrate a camera whenever it moves.

TANDEM · Princeton Robot Planning and Learning Back to top