host.camera_visualizer.routes.fields

Field model and AprilTag routes.

 1"""Field model and AprilTag routes."""
 2
 3
 4def get_field_tags() -> dict:
 5    """Get AprilTag positions from robotpy_apriltag field layout."""
 6    try:
 7        from robotpy_apriltag import AprilTagField, AprilTagFieldLayout
 8        layout = AprilTagFieldLayout.loadField(AprilTagField.kDefaultField)
 9        tags = []
10        for tag_id in range(1, 50):
11            pose = layout.getTagPose(tag_id)
12            if pose is None:
13                continue
14            t = pose.translation()
15            r = pose.rotation()
16            tags.append({
17                'id': tag_id,
18                'x': round(t.X(), 4),
19                'y': round(t.Y(), 4),
20                'z': round(t.Z(), 4),
21                'roll_deg': round(r.x_degrees, 1),
22                'pitch_deg': round(r.y_degrees, 1),
23                'yaw_deg': round(r.z_degrees, 1),
24            })
25        return {
26            'field_length': round(layout.getFieldLength(), 4),
27            'field_width': round(layout.getFieldWidth(), 4),
28            'tags': tags,
29        }
30    except Exception as e:
31        return {'error': str(e), 'tags': []}
def get_field_tags() -> dict:
 5def get_field_tags() -> dict:
 6    """Get AprilTag positions from robotpy_apriltag field layout."""
 7    try:
 8        from robotpy_apriltag import AprilTagField, AprilTagFieldLayout
 9        layout = AprilTagFieldLayout.loadField(AprilTagField.kDefaultField)
10        tags = []
11        for tag_id in range(1, 50):
12            pose = layout.getTagPose(tag_id)
13            if pose is None:
14                continue
15            t = pose.translation()
16            r = pose.rotation()
17            tags.append({
18                'id': tag_id,
19                'x': round(t.X(), 4),
20                'y': round(t.Y(), 4),
21                'z': round(t.Z(), 4),
22                'roll_deg': round(r.x_degrees, 1),
23                'pitch_deg': round(r.y_degrees, 1),
24                'yaw_deg': round(r.z_degrees, 1),
25            })
26        return {
27            'field_length': round(layout.getFieldLength(), 4),
28            'field_width': round(layout.getFieldWidth(), 4),
29            'tags': tags,
30        }
31    except Exception as e:
32        return {'error': str(e), 'tags': []}

Get AprilTag positions from robotpy_apriltag field layout.