Skip to content

Commit 5c382b4

Browse files
authored
Add radar extrinsics to Calibration (#67)
1 parent 774eef9 commit 5c382b4

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

zod/data_classes/calibration.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import json
66
from dataclasses import dataclass
7-
from typing import Any, Dict
7+
from typing import Any, Dict, Optional
88

99
import numpy as np
1010

11-
from zod.constants import EGO, Camera, CoordinateFrame, Lidar
11+
from zod.constants import EGO, Camera, CoordinateFrame, Lidar, Radar
1212
from zod.data_classes.geometry import Pose
1313
from zod.utils.geometry import transform_points
1414

@@ -28,10 +28,16 @@ class CameraCalibration:
2828
field_of_view: np.ndarray # horizontal, vertical (degrees)
2929

3030

31+
@dataclass
32+
class RadarCalibration:
33+
extrinsics: Pose # radar pose in the ego frame
34+
35+
3136
@dataclass
3237
class Calibration:
3338
lidars: Dict[Lidar, LidarCalibration]
3439
cameras: Dict[Camera, CameraCalibration]
40+
radars: Optional[Dict[Radar, RadarCalibration]] = None
3541

3642
@classmethod
3743
def from_dict(cls, calib_dict: Dict[str, Any]) -> Calibration:
@@ -48,7 +54,14 @@ def from_dict(cls, calib_dict: Dict[str, Any]) -> Calibration:
4854
field_of_view=np.array(calib_dict["FC"]["field_of_view"]),
4955
),
5056
}
51-
return cls(lidars=lidars, cameras=cameras)
57+
58+
if "radar_extrinsics" in calib_dict["FC"]:
59+
radars = {
60+
Radar.FRONT: RadarCalibration(extrinsics=Pose(np.array(calib_dict["FC"]["radar_extrinsics"]))),
61+
}
62+
return cls(lidars=lidars, cameras=cameras, radars=radars)
63+
else:
64+
return cls(lidars=lidars, cameras=cameras)
5265

5366
@classmethod
5467
def from_json_path(cls, json_path: str) -> Calibration:
@@ -85,5 +98,12 @@ def get_extrinsics(self, frame: CoordinateFrame) -> Pose:
8598
return self.lidars[frame].extrinsics
8699
elif isinstance(frame, Camera):
87100
return self.cameras[frame].extrinsics
101+
elif isinstance(frame, Radar):
102+
if self.radars is None:
103+
err = "No radar calibration info available!"
104+
err += "\nPlease download the latest version of ZOD to access radar data. "
105+
err += "\nRadar is available for ZOD Sequences and Drives only."
106+
raise ValueError(err)
107+
return self.radars[frame].extrinsics
88108
else:
89109
raise ValueError(f"Unknown frame {frame}")

0 commit comments

Comments
 (0)