blob: f5e30a66e9927bf143d70e1c79a1c3fe0370f7ed [file] [log] [blame]
namespace frc971.vision.calibration;
table TransformationMatrix {
// The matrix data for a row-major 4x4 homogeneous transformation matrix.
// This implies the bottom row is (0, 0, 0, 1).
data:[float] (id: 0);
}
// Calibration information for a given camera on a given robot.
table CameraCalibration {
// The name of the camera node which this calibration data applies to.
node_name:string (id: 0);
// The team number of the robot which this calibration data applies to.
team_number:int (id: 1);
// Intrinsics for the camera.
//
// This is the standard OpenCV intrinsics matrix in row major order (3x3).
intrinsics:[float] (id: 2);
// Fixed extrinsics for the camera. This transforms from camera coordinates to
// robot coordinates. For example: multiplying (0, 0, 0, 1) by this results in
// the position of the camera aperture in robot coordinates.
fixed_extrinsics:TransformationMatrix (id: 3);
// Extrinsics for a camera on a turret. This will only be filled out for
// applicable cameras. For turret-mounted cameras, fixed_extrinsics defines
// a position for the center of rotation of the turret, and this field defines
// a position for the camera on the turret.
//
// The combination of the two transformations is underdefined, so nothing can
// distinguish between the two parts of the final extrinsics for a given
// turret position.
//
// To get the final extrinsics for a camera using this transformation,
// multiply (in order):
// fixed_extrinsics
// rotation around the Z axis by the turret angle
// turret_extrinsics
turret_extrinsics:TransformationMatrix (id: 4);
// This is the standard OpenCV 5 parameter distortion coefficients
dist_coeffs:[float] (id: 5);
// Timestamp for when the calibration was taken on the realtime clock.
calibration_timestamp:int64 (id: 6);
}
// Calibration information for all the cameras we know about.
table CalibrationData {
camera_calibrations:[CameraCalibration] (id: 0);
}
root_type CalibrationData;