|
|
The CRS framework is a fully modular, configurable, and extendable platform to experiment with different kinds of control strategies for autonomous vehicles. Currently, it can be used to control miniature versions of cars.
|
|
|
|
|
|
This main page of the wiki explains the high-level idea behind CRS. More details can be found in other parts of the wiki.
|
|
|
|
|
|
If you need to know how to set up docker and CRS check out [The installation Guide](install) as well as [First Steps](setup/first-steps).
|
|
|
|
|
|
If you would like to know more about configuring and running different experiments, check out the [Configuration & Experiments](getting_started/experiments) section.
|
|
|
|
|
|
# Overview of the CRS Setup
|
|
|
## CRS for cars on hardware
|
|
|
CRS can be used to control Kyosho Mini-Z RC cars on a racing track. The general setup can be seen in the figure below.
|
|
|
|
|
|
![hardware__1_](uploads/db5f6684b076cbacea5a21a7a7444532/hardware__1_.png)
|
|
|
|
|
|
A computer where CRS is running is connected via Ethernet to the Vicon system. Vicon is measuring the RC car’s position and orientation and sends this via Ethernet to the computer. The ROS node vicon_bridge is handling this communication and publishes a message containing this information to ROS.
|
|
|
|
|
|
An [estimator node](/Ros-Estimators) subscribes to the Vicon measurement and computes the car’s state. The [controller node](/Ros-Controllers) subscribes to the estimate and publishes a suitable control input. At the same time, a [visualizer node](/Visualizer) also subscribes to the state estimate and graphically depicts the car on the track via RViz.
|
|
|
|
|
|
The [Wifi Com Node](/Wifi-com) then handles the communication between ROS and the wifi module that is located on top of the car in order to provide steering inputs.
|
|
|
|
|
|
## CRS for cars in simulation
|
|
|
To make software development easier and test controllers and estimators before deployment, this pipeline also exists purely in simulation.
|
|
|
|
|
|
![simulation__1_](uploads/f174f0baa30878fe5140ea275d18ebb7/simulation__1_.png)
|
|
|
|
|
|
In this case, serial_com and vicon_bridge are replaced by a [simulator node](ros-simulators), which simulates the vehicle's behavior while executing the controller node’s commands. The controller and estimator nodes remain the same as if CRS were running on hardware. This makes deployment easy after everything is running fine in simulation.
|
|
|
|
|
|
To make the simulation more realistic, the Vicon message published by the model can be perturbed by noise and delay. This can be used to test the controller’s robustness due to these effects. Additionally, we can make model-based controllers use different model parameters than the model to simulate model mismatch.
|
|
|
Next to the Vicon message, the simulator node still publishes the unperturbed car state to give some ground truth. In simulation, the controller can also subscribe to this ground truth state message directly to take the estimator out of the loop.
|
|
|
|
|
|
This true state is also visualized by the visualizer node, which subscribes to the model instead of the estimator in simulation.
|
|
|
|
|
|
|
|
|
## Using a collision backtracker
|
|
|
|
|
|
When tuning parameters in real-world experiments, the car might drive into the track boundaries and might not be able to recover from this accident.
|
|
|
|
|
|
In order to overcome this issue, collision detection and backtracking setup are integrated into the framework which allows for recovering from an accident.
|
|
|
|
|
|
![collision-handler](uploads/6285131ff20ca2fd9a3c0ef8693f462b/collision-handler.png)
|
|
|
|
|
|
When using the collision recovery system, three additional components are loaded as described in the wiki section [Backtrackers](backtrackers). First, the collision detector node detects a collision based on some predefined criteria (min distance moved, offset from the center line of the track). Once a collision is detected, the backtracker node is activated, which provides recovery inputs to the car. Finally, the input filter decides which control input to apply in order to bypass the control inputs from the controller. |
|
|
\ No newline at end of file |