CI: Drive a loop in MetaDrive (#32308)
	
		
	
				
					
				
			* finish failure on crossing any line
* update
* standardize queue messages
* update control_command_gen
* fix
* fix logic
* update closing type
* update test
* update logic
* update test
* add out of lane to local
* ci arrive_dest
* pytest integration
* update ci_config
* fix ruff
* move test termination to time
* better
* better order
* curve_len
* add buffer
* cleanup
* cleanup
* cleanup
* cleanup
* out_of_lane
* cleanup
* merge tests
* run 90s
* change test name
* local out of lane detect
* out_of_lane
* static anal
* cleanup
* test_duration
* change setup_class -> setup_create_bridge
* no print state during test
* new out_of_lane detect
* cleanup print in common.py
* fix
* fix
* check distance vs time
* cleanup
* cleanup increase check time
* minimum bridge test time
* wording
* cleanup
old-commit-hash: fe9a091f11
			
			
				pull/32103/head
			
			
		
							parent
							
								
									8499ca62ca
								
							
						
					
					
						commit
						b8fd64f3e7
					
				
				 8 changed files with 110 additions and 114 deletions
			
			
		| @ -1,92 +0,0 @@ | |||||||
| #!/usr/bin/env python |  | ||||||
| 
 |  | ||||||
| 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 create_map(): |  | ||||||
|   return dict( |  | ||||||
|     type=MapGenerateMethod.PG_MAP_FILE, |  | ||||||
|     lane_num=2, |  | ||||||
|     lane_width=3.5, |  | ||||||
|     config=[ |  | ||||||
|       { |  | ||||||
|         "id": "S", |  | ||||||
|         "pre_block_socket_index": 0, |  | ||||||
|         "length": 60, |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         "id": "C", |  | ||||||
|         "pre_block_socket_index": 0, |  | ||||||
|         "length": 60, |  | ||||||
|         "radius": 600, |  | ||||||
|         "angle": 45, |  | ||||||
|         "dir": 0, |  | ||||||
|       }, |  | ||||||
|     ] |  | ||||||
|   ) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class MetaDriveBridge(SimulatorBridge): |  | ||||||
|   TICKS_PER_FRAME = 5 |  | ||||||
| 
 |  | ||||||
|   def __init__(self, world_status_q, dual_camera, high_quality): |  | ||||||
|     self.world_status_q = world_status_q |  | ||||||
|     self.should_render = False |  | ||||||
| 
 |  | ||||||
|     super().__init__(dual_camera, high_quality) |  | ||||||
| 
 |  | ||||||
|   def spawn_world(self): |  | ||||||
|     sensors = { |  | ||||||
|       "rgb_road": (RGBCameraRoad, W, H, ) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if self.dual_camera: |  | ||||||
|       sensors["rgb_wide"] = (RGBCameraWide, W, H) |  | ||||||
| 
 |  | ||||||
|     config = dict( |  | ||||||
|       use_render=self.should_render, |  | ||||||
|       vehicle_config=dict( |  | ||||||
|         enable_reverse=False, |  | ||||||
|         image_source="rgb_road", |  | ||||||
|       ), |  | ||||||
|       sensors=sensors, |  | ||||||
|       image_on_cuda=_cuda_enable, |  | ||||||
|       image_observation=True, |  | ||||||
|       interface_panel=[], |  | ||||||
|       out_of_route_done=True, |  | ||||||
|       on_continuous_line_done=True, |  | ||||||
|       crash_vehicle_done=True, |  | ||||||
|       crash_object_done=True, |  | ||||||
|       arrive_dest_done=True, |  | ||||||
|       traffic_density=0.0, |  | ||||||
|       map_config=create_map(), |  | ||||||
|       map_region_size=2048, |  | ||||||
|       decision_repeat=1, |  | ||||||
|       physics_world_step_size=self.TICKS_PER_FRAME/100, |  | ||||||
|       preload_models=False |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     return MetaDriveWorld(world_status_q, config, self.dual_camera) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == "__main__": |  | ||||||
|   command_queue: Queue = Queue() |  | ||||||
|   world_status_q: Queue = Queue() |  | ||||||
|   simulator_bridge = MetaDriveBridge(world_status_q, True, False) |  | ||||||
|   simulator_process = simulator_bridge.run(command_queue) |  | ||||||
| 
 |  | ||||||
|   while True: |  | ||||||
|     world_status = world_status_q.get() |  | ||||||
|     print(f"World Status: {str(world_status)}") |  | ||||||
|     if world_status["status"] == "terminating": |  | ||||||
|       break |  | ||||||
| 
 |  | ||||||
|   simulator_process.join() |  | ||||||
| @ -0,0 +1,8 @@ | |||||||
|  | import pytest | ||||||
|  | 
 | ||||||
|  | def pytest_addoption(parser): | ||||||
|  |   parser.addoption("--test_duration", action="store", default=60, type=int, help="Seconds to run metadrive drive") | ||||||
|  | 
 | ||||||
|  | @pytest.fixture | ||||||
|  | def test_duration(request): | ||||||
|  |   return request.config.getoption("--test_duration") | ||||||
					Loading…
					
					
				
		Reference in new issue