CARLA with AGL¶
As part of the agl-demo-control-panel application, carla_to_CAN
and record_playback.py
scripts provide a way to record CAN messages generated during a CARLA simulation. The can_messages.txt
playback file generated, can then be used to to playback the messages via CLI or GUI.
Setting up CARLA¶
You can follow the steps provided in the CARLA documentation for installing CARLA.
We recommend using the CARLA V0.9.15, and using the supported Python version to run the carla_to_CAN.py
script (Other releases have not been validated).
Note: Use a version of python compatible with CARLA to create the venv (Python 3.9 tested with CARLA V0.9.15)
-
Running the CARLA Server
# Move to the installation directory $ cd /path/to/CARLA_<version> # Start the CARLA Server $ ./CarlaUE4.sh # To run using minimum resources $ ./CarlaUE4.sh -quality-level=Low -prefernvidia
You may also add the
-RenderOffScreen
flag to start CARLA in off-screen mode. Refer to the various rendering options for more details.Another way of running the CARLA server without a display is by using CARLA in Docker.
-
Starting a Manual Simulation
# Navigate to directory containing the demo python scripts # $ cd /path/to/CARLA_<version>/PythonAPI/examples
Create a Python virtual environment and resolve dependencies
Tip: If facing issues running the$ python3 -m venv carlavenv $ source carlavenv/bin/activate $ pip3 install -r requirements.txt # Start the manual_control.py script $ python3 manual_control.py
manual_control.py
script, you may try removingnumpy
version fromrequirements.txt
and comment out line385
from the script.. . . class KeyboardControl(object): """Class that handles keyboard input.""" def __init__(self, world, start_in_autopilot): self._autopilot_enabled = start_in_autopilot self._ackermann_enabled = False self._ackermann_reverse = 1 if isinstance(world.player, carla.Vehicle): self._control = carla.VehicleControl() self._ackermann_control = carla.VehicleAckermannControl() self._lights = carla.VehicleLightState.NONE # world.player.set_autopilot(self._autopilot_enabled) <<------ # disable autopilot world.player.set_light_state(self._lights) elif isinstance(world.player, carla.Walker): . . .
Converting CARLA data into CAN¶
The carla_to_CAN.py
script can be run run alongside an existing CARLA simulation to fetch data and convert it into CAN messages based on the agl-vcar.dbc file.
While the record_playback.py
script is responsible for recording amd playing back the CAN data for later sessions.
NOTE: This does not require the CARLA server to be running.
To access these scripts, clone the AGL Demo Control Panel project.
# Move to the Scripts directory
$ cd /path/to/agl-demo-control-panel/
# Fetch the agl-vcar.dbc file
$ wget -nd -c -P Scripts "https://git.automotivelinux.org/src/agl-dbc/plain/agl-vcar.dbc"
$ cd Scripts/
Create a Python (3.9) virtual environment and resolve dependencies.
$ python3 -m venv carlavenv
$ source carlavenv/bin/activate
$ pip3 install -r requirements.txt
# Optionally, set up the vcan0 interface
$ ./vcan.sh
-
Converting CARLA Data into CAN
$ python -u carla_to_CAN.py --interface vcan0 # OR $ python -u carla_to_CAN.py --interface vcan0 --host <carla_server_ip> --port <carla_server_port>
-
Recording and Playback of CAN messages
$ python -u record_playback.py # OR $ python -u record_playback.py --interface (or) -i can0 # default vcan0
CLI Options:
- 1: Captures CAN messages and writes them into 'can_messages.txt'
- 2: Replays captured CAN messages
- 3: Exit
CAN interface to AGL Demo Platform¶
To use the carla_to_CAN.py
and record_playback.py
scripts to send messages on the CAN interface, one can use the CAN bus or use CAN over Ethernet using cannelloni.
cannelloni is available in AGL, just add IMAGE_INSTALL:append = " cannelloni"
to your conf/local.conf
.
To set up the CAN interface between the Host system and the target machine(s) refer to the cannelloni docs.