blob: e6357606348b2989287e92dd97479918f640a6a3 [file] [log] [blame]
Milind Upadhyaycd677a32022-12-04 13:06:43 -08001namespace frc971.vision;
2
milind-u3f5f83c2023-01-29 15:23:51 -08003table Position {
4 x:double (id: 0);
5 y:double (id: 1);
6 z:double (id: 2);
7}
8
9table Quaternion {
10 w:double (id: 0);
11 x:double (id: 1);
12 y:double (id: 2);
13 z:double (id: 3);
14}
15
Milind Upadhyaycd677a32022-12-04 13:06:43 -080016// Represents 3d pose of an april tag on the field.
17table TargetPoseFbs {
18 // AprilTag ID of this target
19 id:uint64 (id: 0);
20
Yash Chainanibd6c6e52023-02-18 19:31:32 -080021 // Pose of target relative to either the field origin or camera.
milind-u09fb1252023-01-28 19:21:41 -080022 // To get the pose of the target, do:
milind-u3f5f83c2023-01-29 15:23:51 -080023 // Translation3d(position.x(), position.y(), position.z()) *
24 // Quaterniond(orientation.w(), orientation.x(), orientation.y(), orientation.z())
25 position:Position (id: 1);
26 orientation:Quaternion (id: 2);
milind-u681c4712023-02-23 21:22:50 -080027
28 // Minimum decision margin (confidence) for this april tag detection.
29 // Only filled out if this pose represents a live detection.
30 // NOTE: Detections with a decision margin less than
31 // FLAGS_min_decision_margin in aprilrobotics.cc are already filtered
32 // out before sending.
33 confidence:double (id: 3);
milind-ufc8ab702023-02-26 14:14:39 -080034
35 // Object-space error of the tag from pose estimation.
36 // Only filled out if this pose represents a live detection.
37 // Tags which are seen completely usually have a pose_error < 1e-6,
38 // and a higher error could imply that part of the tag is being blocked.
39 // NOTE: not filtered by aprilrobotics.cc so that we can log
40 // more detections.
41 pose_error:double (id: 4);
milind-uf5b3b4b2023-02-26 14:50:38 -080042
43 // A measure of how much distortion affected this detection.
44 // Only filled out if this pose represents a live detection.
45 // This is computed as the average distance between the distorted
46 // corners and undistorted corners, normalized by the image size
milind-u60e7fe52023-02-26 16:13:50 -080047 // and the maximum expected distortion to be between 0-1.
milind-uf5b3b4b2023-02-26 14:50:38 -080048 // NOTE: not filtered by aprilrobotics.cc so that we can log
49 // more detections.
50 distortion_factor:double (id: 5);
Milind Upadhyaycd677a32022-12-04 13:06:43 -080051}
52
53// Map of all target poses on a field.
milind-u09fb1252023-01-28 19:21:41 -080054// There are two possible uses for this:
55// 1. Static april tag poses on the field solved for by TargetMapper.
Yash Chainanibd6c6e52023-02-18 19:31:32 -080056// 2. List of detected april poses relative to the camera.
Milind Upadhyaycd677a32022-12-04 13:06:43 -080057table TargetMap {
58 target_poses:[TargetPoseFbs] (id: 0);
Milind Upadhyay05652cb2022-12-07 20:51:51 -080059
milind-u09fb1252023-01-28 19:21:41 -080060 // Unique name of the field (for use case 1.)
Milind Upadhyay05652cb2022-12-07 20:51:51 -080061 field_name:string (id: 1);
milind-u09fb1252023-01-28 19:21:41 -080062
63 // End-of-frame timestamp for the frame with tag detections.
64 // (for use case 2.).
65 monotonic_timestamp_ns:int64 (id: 2);
Maxwell Hendersonfebee252023-01-28 16:53:52 -080066}
67
68root_type TargetMap;