From 5fe9f1459c73d338bf6277dafc8654f92ee8b00a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20R=C4=85czy?= Date: Thu, 14 Dec 2023 20:51:06 -0800 Subject: [PATCH] metadrive: fix dual_camera mode (#30743) * Use wide cam in metadrive * 120 fov --- tools/sim/bridge/metadrive/metadrive_bridge.py | 4 ++-- tools/sim/bridge/metadrive/metadrive_process.py | 9 ++++++--- tools/sim/bridge/metadrive/metadrive_world.py | 6 +++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/tools/sim/bridge/metadrive/metadrive_bridge.py b/tools/sim/bridge/metadrive/metadrive_bridge.py index fa946e11e3835a..142a9e04620e93 100644 --- a/tools/sim/bridge/metadrive/metadrive_bridge.py +++ b/tools/sim/bridge/metadrive/metadrive_bridge.py @@ -36,7 +36,7 @@ def __init__(self, *args, **kwargs): cam = self.get_cam() cam.setPos(C3_POSITION) lens = self.get_lens() - lens.setFov(160) + lens.setFov(120) class RGBCameraRoad(CopyRamRGBCamera): def __init__(self, *args, **kwargs): @@ -116,4 +116,4 @@ def spawn_world(self): preload_models=False ) - return MetaDriveWorld(config) + return MetaDriveWorld(config, self.dual_camera) diff --git a/tools/sim/bridge/metadrive/metadrive_process.py b/tools/sim/bridge/metadrive/metadrive_process.py index 3ce89d7d418e33..d55ecd7ae5ee21 100644 --- a/tools/sim/bridge/metadrive/metadrive_process.py +++ b/tools/sim/bridge/metadrive/metadrive_process.py @@ -39,10 +39,13 @@ def arrive_destination_patch(self, vehicle): MetaDriveEnv._is_arrive_destination = arrive_destination_patch -def metadrive_process(dual_camera: bool, config: dict, camera_array, controls_recv: Connection, state_send: Connection, exit_event): +def metadrive_process(dual_camera: bool, config: dict, camera_array, wide_camera_array, controls_recv: Connection, state_send: Connection, exit_event): apply_metadrive_patches() road_image = np.frombuffer(camera_array.get_obj(), dtype=np.uint8).reshape((H, W, 3)) + if dual_camera: + assert wide_camera_array is not None + wide_road_image = np.frombuffer(wide_camera_array.get_obj(), dtype=np.uint8).reshape((H, W, 3)) env = MetaDriveEnv(config) @@ -92,8 +95,8 @@ def get_cam_as_rgb(cam): if terminated: reset() - #if dual_camera: - # wide_road_image = get_cam_as_rgb("rgb_wide") + if dual_camera: + wide_road_image[...] = get_cam_as_rgb("rgb_wide") road_image[...] = get_cam_as_rgb("rgb_road") rk.keep_time() diff --git a/tools/sim/bridge/metadrive/metadrive_world.py b/tools/sim/bridge/metadrive/metadrive_world.py index 3705f19a972f23..570c9cb4f5a2b5 100644 --- a/tools/sim/bridge/metadrive/metadrive_world.py +++ b/tools/sim/bridge/metadrive/metadrive_world.py @@ -15,6 +15,10 @@ def __init__(self, config, dual_camera = False): super().__init__(dual_camera) self.camera_array = Array(ctypes.c_uint8, W*H*3) self.road_image = np.frombuffer(self.camera_array.get_obj(), dtype=np.uint8).reshape((H, W, 3)) + self.wide_camera_array = None + if dual_camera: + self.wide_camera_array = Array(ctypes.c_uint8, W*H*3) + self.wide_road_image = np.frombuffer(self.wide_camera_array.get_obj(), dtype=np.uint8).reshape((H, W, 3)) self.controls_send, self.controls_recv = Pipe() self.state_send, self.state_recv = Pipe() @@ -23,7 +27,7 @@ def __init__(self, config, dual_camera = False): self.metadrive_process = multiprocessing.Process(name="metadrive process", target= functools.partial(metadrive_process, dual_camera, config, - self.camera_array, self.controls_recv, self.state_send, self.exit_event)) + self.camera_array, self.wide_camera_array, self.controls_recv, self.state_send, self.exit_event)) self.metadrive_process.start() print("----------------------------------------------------------")