Skip to main content

2018 Nodes

Source: Adapted from the Carolo Cup 2018 Documentation.

In the ROS environment, a node is a small part of a software - an executable - that performs an individual task. If data is required in order to perform its task, the data can be collected using topics, reading persisted data etc. In the following sections, every node of the galaxis package will be introduced very briefly. Go into the particular node folder and read its readme for more details.

Debug​

Simply a small node that helps debugging the software by displaying the dual view along with useful information in that dual view, like the trajectory that is displayed in the top view image and the perspective view simultaneously.

The debug node also has an option to store every i-th image in order to record new tracks for labelling data.

You can use the debug node if you pass the -dn flag to the start script:

bash start.bash -dn

The debug node will automatically start if you start the software using the simulation.

ECU​

The task of this node is to transfer the target values-that were calculated in the maneuver planning and have been published using the topic galaxis/target_values-to the ECU in order to enforce the desired driving behavior physically.

There is also communication happening in the other direction. The ECU transfers a packet on a regular basis with information about the state of the car, such as the battery voltage, the state of the buttons and the values the time of flight sensors have measured.

Therefore, this node is simply a bridge between the two computers-the microcontroller on the ECU and the NVidia Jetson where the ROS software is running on-in case the simulation is running, the simulation adapter package contains a node that simply does the same tasks for communicating with the simulation.

Inverse Perspective Mapping​

The inverse perspective mapping (IPM)-formerly known as "Birdview"-transforms a given projective image into a top down view. The node is listening to the topic of the camera image (which should be /camera/image_raw) and instantaneously calculates the top view image, publishes this top view image eventually in an own message that contains the regular camera image (denoted as front view image) as well.

Lane Detection​

The lane detection module processes camera images in order to detect the lane markings that describe the course of the road. The output of the lane detection is a parameterized version of the lane that is ahead of the car. The maximal distance of the top view image is approximately 1.5m, i.e. the lane can be parametrized up to 1.5m with a certain confidence.

The node uses a Dual View Convolutional Neural Network (DVCNN) in its pipeline.

Line Detection​

The line detection is responsible for detecting perpendicular lines on the road, i.e. lines that have an angle of 90 degrees to the found lane parameterization.

This definition includes: stop lines and give-way lines. Start lines will be detected by the object detection.

Maneuver Planning​

The maneuver planning takes care of actually sending target values to the ECU node-resp. the simulation adapter if the simulation is currently running. Sending values to the ECU node will cause the car to move physically.

Moreover, the driver model, that is located in this node, is the brain of the car. Besides the trajectory, the driver model takes the regulations of the current area into account, i.e. regulations that have been enforced by traffic signs (like speed limits) etc.

Also, the car model that is located in this node as well, maintains a state of the car that will be taken into account for planning maneuvers. Last but not least, the car model also integrates functionality for the ego motion to complete the state description of the car. This is mainly due to performance issues since an extra ego motion node would have caused another node where messages need to get passed.

Mapping​

This node takes care of storing objects in the environment of the car. Objects that have been detected, independent of their type (obstacles, traffic signs, road surface markers etc.) are stored along with the lane in a local map. The center of this map is the car itself and the ego-motion is used to translate objects from the (i-1)-th frame to the i-th frame.

This node works fully reactive. This node won't do anything if nothing happens. A few callbacks are registered to particular topics and a service is offered for querying the latest map.

The mapping node is also responsible for finding parking lots by inferring spaces between found obstacles.

Object Detection​

The object detection node uses a neural network that receives camera images - top view and front view separately, detects objects and provides bounding boxes.

Some objects are clearly visible in the top view, but hard to spot (and label) in the front view, such as the no parking zones and the pedestrian crossing. Therefore, we run a network on the top view (1 channel image) and on the front view (3 channel image).

For the object detection, we use the darknet framework. The raw camera images will be passed through the network that is specified by a certain config file that is stored in the model folder of the galaxis package. Have a look at the config files for more details on the networks. We use a variation of TinyYOLO. Also have a look at the project site for more details on YOLO.