add support for additional TraCI clients (#2885)

This commit is contained in:
patmalcolm91 2020-06-11 11:26:59 +02:00 committed by GitHub
parent c21e823850
commit cfee05feff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 7 deletions

View File

@ -10,12 +10,12 @@
* Added PythonAPI `carla.world.get_vehicles_light_states` to get all the car light states at once
* OpenDRIVE ingestion bugfixes
* Added Dynamic Vision Sensor (DVS) camera based on ESIM simulation http://rpg.ifi.uzh.ch/esim.html
* Added support for additional TraCI clients in Sumo co-simulation
* Added API functions `get_right_vector` and `get_up_vector`
* Added parameter to enable/disable pedestrian navigation in standalone mode
* Improved mesh split in standalone mode
* Fixed large RAM usage when loading polinomial geometry from OpenDRIVE
## CARLA 0.9.9
* Introduced hybrid mode for Traffic Manager

View File

@ -231,7 +231,7 @@ def synchronization_loop(args):
Entry point for sumo-carla co-simulation.
"""
sumo_simulation = SumoSimulation(args.sumo_cfg_file, args.step_length, args.sumo_host,
args.sumo_port, args.sumo_gui)
args.sumo_port, args.sumo_gui, args.client_order)
carla_simulation = CarlaSimulation(args.carla_host, args.carla_port, args.step_length)
synchronization = SimulationSynchronization(sumo_simulation, carla_simulation, args.tls_manager,
@ -282,6 +282,11 @@ if __name__ == '__main__':
default=0.05,
type=float,
help='set fixed delta seconds (default: 0.05s)')
argparser.add_argument('--client-order',
metavar='TRACI_CLIENT_ORDER',
default=1,
type=int,
help='client order number for the co-simulation TraCI connection (default: 1)')
argparser.add_argument('--sync-vehicle-lights',
action='store_true',
help='synchronize vehicle lights state (default: False)')

View File

@ -66,7 +66,7 @@ from util.netconvert_carla import netconvert_carla
# ==================================================================================================
def write_sumocfg_xml(cfg_file, net_file, vtypes_file, viewsettings_file):
def write_sumocfg_xml(cfg_file, net_file, vtypes_file, viewsettings_file, additional_traci_clients=0):
"""
Writes sumo configuration xml file.
"""
@ -79,6 +79,8 @@ def write_sumocfg_xml(cfg_file, net_file, vtypes_file, viewsettings_file):
gui_tag = ET.SubElement(root, 'gui_only')
ET.SubElement(gui_tag, 'gui-settings-file', {'value': viewsettings_file})
ET.SubElement(root, 'num-clients', {'value': str(additional_traci_clients+1)})
tree = ET.ElementTree(root)
tree.write(cfg_file, pretty_print=True, encoding='UTF-8', xml_declaration=True)
@ -109,14 +111,15 @@ def main(args):
cfg_file = os.path.join(tmpdir, current_map.name + '.sumocfg')
vtypes_file = os.path.join(basedir, 'examples', 'carlavtypes.rou.xml')
viewsettings_file = os.path.join(basedir, 'examples', 'viewsettings.xml')
write_sumocfg_xml(cfg_file, net_file, vtypes_file, viewsettings_file)
write_sumocfg_xml(cfg_file, net_file, vtypes_file, viewsettings_file, args.additional_traci_clients)
sumo_net = sumolib.net.readNet(net_file)
sumo_simulation = SumoSimulation(cfg_file,
args.step_length,
host=None,
port=None,
sumo_gui=args.sumo_gui)
sumo_gui=args.sumo_gui,
client_order=args.client_order)
# ---------------
# synchronization
@ -240,6 +243,16 @@ if __name__ == '__main__':
default=0.05,
type=float,
help='set fixed delta seconds (default: 0.05s)')
argparser.add_argument('--additional-traci-clients',
metavar='TRACI_CLIENTS',
default=0,
type=int,
help='number of additional TraCI clients to wait for (default: 0)')
argparser.add_argument('--client-order',
metavar='TRACI_CLIENT_ORDER',
default=1,
type=int,
help='client order number for the co-simulation TraCI connection (default: 1)')
argparser.add_argument('--sync-vehicle-lights',
action='store_true',
help='synchronize vehicle lights state (default: False)')
@ -266,4 +279,4 @@ if __name__ == '__main__':
else:
logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
main(args)
main(args)

View File

@ -308,7 +308,7 @@ class SumoSimulation(object):
"""
SumoSimulation is responsible for the management of the sumo simulation.
"""
def __init__(self, cfg_file, step_length, host=None, port=None, sumo_gui=False):
def __init__(self, cfg_file, step_length, host=None, port=None, sumo_gui=False, client_order=1):
if sumo_gui is True:
sumo_binary = sumolib.checkBinary('sumo-gui')
else:
@ -330,6 +330,8 @@ class SumoSimulation(object):
logging.info('Connection to sumo server. Host: %s Port: %s', host, port)
traci.init(host=host, port=port)
traci.setOrder(client_order)
# Retrieving net from configuration file.
self.net = _get_sumo_net(cfg_file)