mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-08-04 20:05:38 +08:00
e475d10adc
* lil more ruff * no exclusions! * rm nb exception * and generated * not used * c408 * random * all * unittest is fine
94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
import math
|
|
from multiprocessing import Queue
|
|
|
|
from metadrive.component.sensors.base_camera import _cuda_enable
|
|
from metadrive.component.map.pg_map import MapGenerateMethod
|
|
|
|
from openpilot.tools.sim.bridge.common import SimulatorBridge
|
|
from openpilot.tools.sim.bridge.metadrive.metadrive_common import RGBCameraRoad, RGBCameraWide
|
|
from openpilot.tools.sim.bridge.metadrive.metadrive_world import MetaDriveWorld
|
|
from openpilot.tools.sim.lib.camerad import W, H
|
|
|
|
|
|
def straight_block(length):
|
|
return {
|
|
"id": "S",
|
|
"pre_block_socket_index": 0,
|
|
"length": length
|
|
}
|
|
|
|
def curve_block(length, angle=45, direction=0):
|
|
return {
|
|
"id": "C",
|
|
"pre_block_socket_index": 0,
|
|
"length": length,
|
|
"radius": length,
|
|
"angle": angle,
|
|
"dir": direction
|
|
}
|
|
|
|
def create_map(track_size=60):
|
|
curve_len = track_size * 2
|
|
return {
|
|
"type": MapGenerateMethod.PG_MAP_FILE,
|
|
"lane_num": 2,
|
|
"lane_width": 4.5,
|
|
"config": [
|
|
None,
|
|
straight_block(track_size),
|
|
curve_block(curve_len, 90),
|
|
straight_block(track_size),
|
|
curve_block(curve_len, 90),
|
|
straight_block(track_size),
|
|
curve_block(curve_len, 90),
|
|
straight_block(track_size),
|
|
curve_block(curve_len, 90),
|
|
]
|
|
}
|
|
|
|
|
|
class MetaDriveBridge(SimulatorBridge):
|
|
TICKS_PER_FRAME = 5
|
|
|
|
def __init__(self, dual_camera, high_quality, test_duration=math.inf, test_run=False):
|
|
super().__init__(dual_camera, high_quality)
|
|
|
|
self.should_render = False
|
|
self.test_run = test_run
|
|
self.test_duration = test_duration if self.test_run else math.inf
|
|
|
|
def spawn_world(self, queue: Queue):
|
|
sensors = {
|
|
"rgb_road": (RGBCameraRoad, W, H, )
|
|
}
|
|
|
|
if self.dual_camera:
|
|
sensors["rgb_wide"] = (RGBCameraWide, W, H)
|
|
|
|
config = {
|
|
"use_render": self.should_render,
|
|
"vehicle_config": {
|
|
"enable_reverse": False,
|
|
"render_vehicle": False,
|
|
"image_source": "rgb_road",
|
|
},
|
|
"sensors": sensors,
|
|
"image_on_cuda": _cuda_enable,
|
|
"image_observation": True,
|
|
"interface_panel": [],
|
|
"out_of_route_done": False,
|
|
"on_continuous_line_done": False,
|
|
"crash_vehicle_done": False,
|
|
"crash_object_done": False,
|
|
"arrive_dest_done": False,
|
|
"traffic_density": 0.0, # traffic is incredibly expensive
|
|
"map_config": create_map(),
|
|
"decision_repeat": 1,
|
|
"physics_world_step_size": self.TICKS_PER_FRAME/100,
|
|
"preload_models": False,
|
|
"show_logo": False,
|
|
"anisotropic_filtering": False
|
|
}
|
|
|
|
return MetaDriveWorld(queue, config, self.test_duration, self.test_run, self.dual_camera)
|