Summary: This page gives an overview over the planned general architecture of the vehicle agent. The document contains an overview over all nodes and topics.
Marco Riedenauer, Simon Erlbacher, Julian Graf
25.11.2022
- Planned architecture of vehicle agent
The vehicle agent is split into three major components: Perception, Planning and Acting. A separate node is responsible for the visualization. The topics published by the Carla bridge can be found here. The msgs necessary to control the vehicle via the Carla bridge can be found here
The miro-board can be found here.
The perception is responsible for the efficient conversion of raw sensor and map data into a useful environment representation that can be used by the Planning for further processing.
Further information regarding the perception can be found here.
Evaluates sensor data to detect and classify objects around the ego vehicle. Other road users and objects blocking the vehicle's path are recognized. The node classifies objects into static and dynamic objects. In the case of dynamic objects, an attempt is made to recognize the direction and speed of movement.
Subscriptions:
radar(sensor_msgs/PointCloud2)lidar(sensor_msgs/PointCloud2)rgb_camera(sensor_msgs/Image)gnss(sensor_msgs/NavSatFix)map(std_msgs/String)
Publishes:
obstacles(Custom msg: obstacle (vision_msgs/Detection3DArray Message) and its classification (std_msgs/String Message))
Detects the lane the ego vehicle is currently in and the lanes around the ego vehicle. This data can be used for lane keeping, to identify which lanes other road users are in, and to plan and execute lane changes.
Subscriptions:
-
map(std_msgs/String) -
lidar(sensor_msgs/PointCloud2) -
rgb_camera(sensor_msgs/Image) -
gnss(sensor_msgs/NavSatFix) -
Publishes:
Recognizes traffic lights and what they are showing at the moment. In particular traffic lights that are relevant for the correct traffic behavior of the ego vehicle, are recognized early and reliably.
Subscriptions:
map(std_msgs/String)rgb_camera(sensor_msgs/Image)lidar(sensor_msgs/PointCloud2)gnss(sensor_msgs/NavSatFix)
Publishes:
traffic_lights(Custom msg: state (std_msgs/UInt8 Message), position (geometry_msgs/Pose Message), distance_to_stop_line (std_msgs/Float64 Message))
Recognizes traffic signs. In particular traffic signs that are relevant for the correct traffic behavior of the ego vehicle, are recognized early and reliably.
Subscriptions:
rgb_camera(sensor_msgs/Image)lidar(sensor_msgs/PointCloud2)
Publishes:
traffic_signs(Custom msg: type (std_msgs/UInt8 Message), position (geometry_msgs/Pose Message), distance_to_stop_line distance_to_stop_line (std_msgs/Float64 Message))
Tries to predict the movement of dynamic objects recognized in the Obstacle Detection and Classification.
Subscriptions:
obstacles(vision_msgs/Detection3DArray Message)lanes(derived_object_msgs/LaneModels Message)
Publishes:
predictions(Custom msg: array of vehicle_id (std_msgs/UInt16 Message) and vehicle_path (nav_msgs/Path Message))
Provides corrected accurate position, direction and speed of the ego vehicle
Subscriptions:
map(std_msgs/String)imu(sensor_msgs/Imu Message)speedometer(std_msgs/Float32)gnss(sensor_msgs/NavSatFix)
Publishes:
ego_position(nav_msgs/Odometry Message)
The planning uses the data from the Perception to find a path on which the ego vehicle can safely reach its destination
Further information regarding the planning can be found here.
Uses information from the map and the path specified by CARLA to find a first concrete path to the next intermediate point. Information from Obstacle Detection, Prediction etc. is not yet taken into account.
Subscriptions:
map(std_msgs/String)navigation(waypoints and high-level route description)odometry(nav_msgs/Odometry)
Publishes:
provisional_path(nav_msgs/Path Message)
Checks whether the path from Preplanning actually can be taken. If the data from the Perception indicates that the path needs to be adjusted, this node decides which actions to take. Based on this decision, the Local path planning plans a new path accordingly.
Subscriptions:
map(std_msgs/String)navigation(waypoints and high-level route description)odometry(nav_msgs/Odometry)provisional_path(nav_msgs/Path Message)- all data from Perception
Publishes:
decision(std_msgs/String)
Translates the decisions made by the Decision Making into a concrete path. Can publish the distance to the vehicle in front to use the Path following's adaptive cruise control.
Subscriptions:
map(std_msgs/String)odometry(nav_msgs/Odometry)provisional_path(nav_msgs/Path Message)- all data from Perception
Publishes:
path(nav_msgs/Path Message)max_velocity(std_msgs/Float64 Message)distance_to_next_vehicle(std_msgs/Float64 Message)
The job of this component is to translate the trajectory planned by the Planning component into steering controls for the vehicle. This node only takes on tasks that have lower computing time, so that a fast response of the component is ensured.
Further information regarding the acting can be found here.
Calculates steering angles that keep the ego vehicle on the path given by the Local path planning.
Subscriptions:
path(nav_msgs/Path Message)
Publishes:
steerforvehicle_control_cmd_manual(CarlaEgoVehicleControl.msg)
Calculates velocity inputs to drive the velocity given by the Local path planning. If the node is given the distance to a car to follow, it reduces the velocity of the ego vehicle to hold a reasonable distance to the vehicle in front.
Subscriptions:
ego_position(nav_msgs/Odometry Message)max_velocity(std_msgs/Float64 Message)distance_to_next_vehicle(std_msgs/Float64 Message)path(nav_msgs/Path Message)
Publishes:
throttle,brake,reverseforvehicle_control_cmd_manual(CarlaEgoVehicleControl.msg)
Decides which steering controller to use and assembles CarlaEgoVehicleControl.msg.
Subscriptions:
throttle,brake,reversesteer
Publishes:
vehicle_control_cmd_manual(CarlaEgoVehicleControl.msg)
Initiates emergency braking if an emergency-msg is received and notifies all notes when emergency braking is over.
Subscriptions:
emergency(std_msgs/Bool Message)
Publishes:
vehicle_control_cmd_manual(CarlaEgoVehicleControl.msg)emergency(std_msgs/Bool Message)
Visualizes outputs of certain nodes to provide a basis for debugging.
Subscriptions:
- all data that's needed
The topics published by the Carla bridge can be found here. The msgs necessary to control the vehicle via the Carla bridge can be found here
Intern topics published by vehicle agent:
| Topic | Description | Published by | Msg type |
|---|---|---|---|
obstacles |
Obstacles and their classifications | Obstacle Detection | Custom msg: obstacle (vision_msgs/Detection3DArray Message) and its classification (std_msgs/String Message) |
lanes |
Lanes surrounding vehicle | Lane detection | derived_object_msgs/LaneModels Message |
traffic_lights |
Traffic lights and their status | Traffic Light Detection | Custom msg: state (std_msgs/UInt8 Message), position (geometry_msgs/Pose Message), distance_to_stop_line (std_msgs/Float64 Message) |
predictions |
Expected future movement of dynamic obstacles | Prediction node | Custom msg: array of vehicle_id (std_msgs/UInt16 Message) and vehicle_path (nav_msgs/Path Message) |
ego_position |
Corrected accurate position, direction and speed of the ego vehicle | Localization | nav_msgs/Odometry Message |
provisional_path |
First concrete path to the next intermediate point | Preplanning | nav_msgs/Path Message |
decision |
Decision to alter provisional_path |
Decision Making | std_msgs/String |
path |
Improved provisional_path path for the ego vehicle to follow |
Local path planning | nav_msgs/Path Message |
max_velocity |
Maximal velocity the ego vehicle should drive in m/s | Local path planning | std_msgs/Float64 Message |
distance_to_next_vehicle |
Distance to the vehicle the Velocity control should keep a certain distance to (in m) | Local path planning | std_msgs/Float64 Message |
emergency |
True if emergency is triggered; false indicates that emergency is over | any note | std_msgs/Bool Message |