CARLA integrates the C++ Library for Responsibility Sensitive Safety in the client library. This feature allows users to investigate behaviours of RSS without having to implement anything. CARLA will take care of providing the input, and applying the output to the AD systems on the fly.
This feature is a work in progress. Right now, it is only available for the Linux build.
The RSS library implements a mathematical model for safety assurance. It receives sensor information, and provides restrictions to the controllers of a vehicle. To sum up, the RSS module uses the sensor data to define situations. A situation describes the state of the ego vehicle with an element of the environment. For each situation, safety checks are made, and a proper response is calculated. The overall response is the result of all of the combined. For specific information on the library, read the documentation, especially the Background section.
This is implemented in CARLA using two elements.
- RssSensor is in charge of the situation analysis, and response generation using the ad-rss-lib.
- RssRestrictor applies the response by restricting the commands of the vehicle.
The following image sketches the integration of RSS into the CARLA architecture.
1. The server.
- Sends a camera image to the client. (Only if the client needs visualization).
- Provides the RssSensor with world data.
- Sends a physics model of the vehicle to the RssRestrictor. (Only if the default values are overwritten).
2. The client.
- Provides the RssSensor with some parameters to be considered.
- Sends to the RssResrictor an initial carla.VehicleControl.
3. The RssSensor.
- Uses the ad-rss-lib to extract situations, do safety checks, and generate a response.
- Sends the RssRestrictor a response containing the proper response and aceleration restrictions to be applied.
4. The RssRestrictor
- If the client asks for it, applies the response to the carla.VehicleControl, and returns the resulting one.
The RSS integration has to be built aside from the rest of CARLA. The ad-rss-lib comes with an LGPL-2.1 open-source license that creates conflict. It has to be linked statically into libCarla.
As a reminder, the feature is only available for the Linux build so far.
There are additional prerequisites required for building RSS and its dependencies. Take a look at the official documentation) to know more about this.
Dependencies provided by Ubunutu (>= 16.04).
sudo apt-get install libgtest-dev libpython-dev libpugixml-dev libproj-dev libtbb-dev
The dependencies are built using colcon, so it has to be installed.
pip3 install --user -U colcon-common-extensions
There are some additional dependencies for the Python bindings.
sudo apt-get install castxml pip install --user pygccxml pip install --user https://bitbucket.org/ompl/pyplusplus/get/1.8.1.zip
Once this is done, the full set of dependencies and RSS components can be built.
- Compile LibCarla to work with RSS.
- Compile the PythonAPI to include the RSS feature.
- As an alternative, a package can be built directly.
So far, the server provides the sensor with ground truth data of the surroundings that includes the state of other traffic participants and traffic lights.
When the client calls for it, the carla.RssRestrictor will modify the vehicle controller to best reach the desired accelerations or decelerations by a given response.
Due to the stucture of carla.VehicleControl objects, the restrictions applied have certain limitations. These controllers include
streering values. However, due to car physics and the simple control options these might not be met. The restriction intervenes in lateral direction simply by counter steering towards the parallel lane direction. The brake will be activated if deceleration requested by RSS. This depends on vehicle mass and brake torques provided by the carla.Vehicle.
In an automated vehicle controller it might be possible to adapt the planned trajectory to the restrictions. A fast control loop (>1KHz) can be used to ensure these are followed.
That sets the basics regarding the RSS sensor in CARLA. Find out more about the specific attributes and parameters in the sensor reference.
Open CARLA and mess around for a while. If there are any doubts, feel free to post these in the forum.