@ -36,6 +36,7 @@ def parse_args(add_args=None):
parser = argparse . ArgumentParser ( description = ' Bridge between CARLA and openpilot. ' )
parser = argparse . ArgumentParser ( description = ' Bridge between CARLA and openpilot. ' )
parser . add_argument ( ' --joystick ' , action = ' store_true ' )
parser . add_argument ( ' --joystick ' , action = ' store_true ' )
parser . add_argument ( ' --high_quality ' , action = ' store_true ' )
parser . add_argument ( ' --high_quality ' , action = ' store_true ' )
parser . add_argument ( ' --dual_camera ' , action = ' store_true ' )
parser . add_argument ( ' --town ' , type = str , default = ' Town04_Opt ' )
parser . add_argument ( ' --town ' , type = str , default = ' Town04_Opt ' )
parser . add_argument ( ' --spawn_point ' , dest = ' num_selected_spawn_point ' , type = int , default = 16 )
parser . add_argument ( ' --spawn_point ' , dest = ' num_selected_spawn_point ' , type = int , default = 16 )
@ -112,7 +113,7 @@ class Camerad:
dat = messaging . new_message ( pub_type )
dat = messaging . new_message ( pub_type )
msg = {
msg = {
" frameId " : image . frame ,
" frameId " : frame_id ,
" transform " : [ 1.0 , 0.0 , 0.0 ,
" transform " : [ 1.0 , 0.0 , 0.0 ,
0.0 , 1.0 , 0.0 ,
0.0 , 1.0 , 0.0 ,
0.0 , 0.0 , 1.0 ]
0.0 , 0.0 , 1.0 ]
@ -239,6 +240,7 @@ class CarlaBridge:
msg . liveCalibration . validBlocks = 20
msg . liveCalibration . validBlocks = 20
msg . liveCalibration . rpyCalib = [ 0.0 , 0.0 , 0.0 ]
msg . liveCalibration . rpyCalib = [ 0.0 , 0.0 , 0.0 ]
Params ( ) . put ( " CalibrationParams " , msg . to_bytes ( ) )
Params ( ) . put ( " CalibrationParams " , msg . to_bytes ( ) )
Params ( ) . put_bool ( " WideCameraOnly " , not arguments . dual_camera )
self . _args = arguments
self . _args = arguments
self . _carla_objects = [ ]
self . _carla_objects = [ ]
@ -333,10 +335,13 @@ class CarlaBridge:
return camera
return camera
self . _camerad = Camerad ( )
self . _camerad = Camerad ( )
road_camera = create_camera ( fov = 40 , callback = self . _camerad . cam_callback_road )
road_wide_camera = create_camera ( fov = 120 , callback = self . _camerad . cam_callback_wide_road ) # fov bigger than 120 shows unwanted artifacts
self . _carla_objects . extend ( [ road_camera , road_wide_camera ] )
if self . _args . dual_camera :
road_camera = create_camera ( fov = 40 , callback = self . _camerad . cam_callback_road )
self . _carla_objects . append ( road_camera )
road_wide_camera = create_camera ( fov = 120 , callback = self . _camerad . cam_callback_wide_road ) # fov bigger than 120 shows unwanted artifacts
self . _carla_objects . append ( road_wide_camera )
vehicle_state = VehicleState ( )
vehicle_state = VehicleState ( )
@ -504,6 +509,7 @@ class CarlaBridge:
def close ( self ) :
def close ( self ) :
self . started = False
self . started = False
self . _exit_event . set ( )
self . _exit_event . set ( )
for s in self . _carla_objects :
for s in self . _carla_objects :
try :
try :
s . destroy ( )
s . destroy ( )
@ -522,17 +528,23 @@ if __name__ == "__main__":
q : Any = Queue ( )
q : Any = Queue ( )
args = parse_args ( )
args = parse_args ( )
carla_bridge = CarlaBridge ( args )
try :
p = carla_bridge . run ( q )
carla_bridge = CarlaBridge ( args )
p = carla_bridge . run ( q )
if args . joystick :
if args . joystick :
# start input poll for joystick
# start input poll for joystick
from tools . sim . lib . manual_ctrl import wheel_poll_thread
from tools . sim . lib . manual_ctrl import wheel_poll_thread
wheel_poll_thread ( q )
wheel_poll_thread ( q )
else :
else :
# start input poll for keyboard
# start input poll for keyboard
from tools . sim . lib . keyboard_ctrl import keyboard_poll_thread
from tools . sim . lib . keyboard_ctrl import keyboard_poll_thread
keyboard_poll_thread ( q )
p . join ( )
keyboard_poll_thread ( q )
finally :
p . join ( )
# Try cleaning up the wide camera param
# in case users want to use replay after
Params ( ) . delete ( " WideCameraOnly " )