Skip to content

Commit a14e555

Browse files
author
spencer@primus
committed
Add ugv dataset and test for fov research
1 parent 95fde6b commit a14e555

7 files changed

Lines changed: 560 additions & 22 deletions

File tree

avapi/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import avapi.nuimages
66
import avapi.nuscenes
77
import avapi.opv2v
8+
import avapi.ugv
89
import avapi.visualize
910

1011

avapi/_dataset.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ def check_frame(self, frame):
131131
frame in self.frames
132132
), f"Candidate frame, {frame}, not in frame set {self.frames}"
133133

134+
def get_agents(self, frame: int) -> "DataContainer":
135+
return self._load_agents(frame)
136+
137+
def get_agent(self, frame: int, agent: int):
138+
agents = self.get_agents(frame)
139+
return [ag for ag in agents if ag.ID == agent][0]
140+
134141
def get_agent_set(self, frame: int) -> set:
135142
return self._load_agent_set(frame=frame)
136143

@@ -337,19 +344,25 @@ def save_objects(self, frame, objects, folder, file=None):
337344
os.makedirs(folder)
338345
self._save_objects(frame, objects, folder, file=file)
339346

347+
def _load_agents(self, frame):
348+
raise NotImplementedError
349+
350+
def _load_ego(self, frame, agent=None):
351+
raise NotImplementedError
352+
340353
def _load_frames(self, sensor):
341354
raise NotImplementedError
342355

343356
def _load_calibration(self, frame, sensor, reference):
344357
raise NotImplementedError
345358

346-
def _load_image(self, frame, camera, agent=None):
359+
def _load_image(self, frame, sensor, agent=None):
347360
raise NotImplementedError
348361

349-
def _load_semseg_image(self, frame, camera, agent=None):
362+
def _load_semseg_image(self, frame, sensor, agent=None):
350363
raise NotImplementedError
351364

352-
def _load_depth_image(self, frame, camera, agent=None):
365+
def _load_depth_image(self, frame, sensor, agent=None):
353366
raise NotImplementedError
354367

355368
def _load_lidar(self, frame, sensor, agent=None):
@@ -631,7 +644,7 @@ def __init__(
631644
self.nuX = nuX
632645
self.nuX_can = nuX_can
633646
if nuX_can is not None:
634-
self.vehicle_pose = self.nuX_can.get_messages(self.scene["name"], "pose")
647+
self.vehicle_pose = self.nuX_can.get_messages(self.scene, "pose")
635648
self.vehicle_pose_utime = np.array(
636649
[vp["utime"] for vp in self.vehicle_pose]
637650
)
@@ -695,6 +708,10 @@ def _get_sensor_file_name(self, frame, sensor=None, agent=None):
695708
def _load_frames(self, **kwargs):
696709
return self.frames
697710

711+
def _load_agent_set(self, frame: int) -> set:
712+
# TODO: this is slow...improve
713+
return {ag.ID for ag in self.get_agents(frame)}
714+
698715
def _load_calibration(self, frame, ego_reference, sensor=None, **kwargs):
699716
"""
700717
W := global "world" frame
@@ -775,7 +792,7 @@ def _load_ego(self, frame, **kwargs):
775792
box3d = Box3D(x_G_to_E_in_G, q_G_to_E, self.hwl, ID=-1)
776793

777794
# -- set up ego in global reference frame
778-
veh = VehicleState(obj_type="car")
795+
veh = VehicleState(obj_type="car", ID=1000)
779796
veh.set(
780797
t=t,
781798
position=x_G_to_E_in_G,

avapi/carla/dataset.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -285,13 +285,6 @@ def get_sensor_file(self, frame, timestamp, sensor, agent, file_type):
285285
def get_sensor_name(self, sensor, agent):
286286
return sensor
287287

288-
def get_agents(self, frame: int) -> "DataContainer":
289-
return self._load_agents(frame)
290-
291-
def get_agent(self, frame: int, agent: int):
292-
agents = self.get_agents(frame)
293-
return [ag for ag in agents if ag.ID == agent][0]
294-
295288
def _load_agent_set(self, frame: int) -> set:
296289
# TODO: this is slow...improve
297290
return {ag.ID for ag in self.get_agents(frame)}

avapi/nuscenes/dataset.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import List
55

66
import numpy as np
7+
from avstack.config import DATASETS
78
from avstack.geometry.transformations import matrix_cartesian_to_spherical
89
from scipy.interpolate import interp1d
910

@@ -26,10 +27,11 @@
2627
splits_scenes = None
2728

2829

30+
@DATASETS.register_module()
2931
class nuScenesManager(_nuManager):
3032
NAME = "nuScenes"
3133

32-
def __init__(self, data_dir, split="v1.0-mini", verbose=False):
34+
def __init__(self, data_dir, split="v1.0-mini", max_scenes=None, verbose=False):
3335
nusc = NuScenes(version=split, dataroot=data_dir, verbose=verbose)
3436
try:
3537
nusc_can = NuScenesCanBus(dataroot=data_dir)
@@ -40,8 +42,11 @@ def __init__(self, data_dir, split="v1.0-mini", verbose=False):
4042
self.scene_name_to_index = {}
4143
self.scene_number_to_index = {}
4244
self.index_to_scene = {}
43-
self.scenes = [sc["name"] for sc in nusc.scene]
44-
for i, sc in enumerate(nusc.scene):
45+
n_scenes = (
46+
len(nusc.scene) if max_scenes is None else min(len(nusc.scene), max_scenes)
47+
)
48+
self.scenes = [sc["name"] for sc in nusc.scene][:n_scenes]
49+
for i, sc in enumerate(nusc.scene[:n_scenes]):
4550
self.scene_name_to_index[sc["name"]] = i
4651
self.scene_number_to_index[int(sc["name"].replace("scene-", ""))] = i
4752
self.index_to_scene[i] = sc["name"]
@@ -128,13 +133,13 @@ def __init__(
128133
except Exception as e:
129134
logging.warning("Cannot find CAN bus data")
130135
nusc_can = None
131-
self.scene = scene
132-
self.scene_name = self.scene
136+
self.scene = scene["name"]
137+
self.sequence = scene # a dictionary
133138
self.framerate = 2
134139
self.sequence_id = scene["name"]
135140
self.splits_scenes = splits_scenes
136141
try:
137-
veh_speed = self.nuX_can.get_messages(self.scene["name"], "vehicle_monitor")
142+
veh_speed = self.nuX_can.get_messages(self.scene, "vehicle_monitor")
138143
except Exception as e:
139144
self.ego_speed_interp = None
140145
else:
@@ -151,14 +156,17 @@ def __init__(
151156

152157
def make_sample_records(self):
153158
self.sample_records = {
154-
0: self.nuX.get("sample", self.scene["first_sample_token"])
159+
0: self.nuX.get("sample", self.sequence["first_sample_token"])
155160
}
156-
for i in range(1, self.scene["nbr_samples"], 1):
161+
for i in range(1, self.sequence["nbr_samples"], 1):
157162
self.sample_records[i] = self.nuX.get(
158163
"sample", self.sample_records[i - 1]["next"]
159164
)
160165
self.t0 = self.sample_records[0]["timestamp"] / 1e6
161166

167+
def get_agents(self, frame: int) -> List:
168+
return [self._load_ego(frame=frame)]
169+
162170
def _load_lidar(
163171
self,
164172
frame,

avapi/ugv/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .dataset import UgvScenesManager
2+
3+
4+
__all__ = ["UgvScenesManager"]

0 commit comments

Comments
 (0)