
ROS
-
The Robot Operating System (ROS) is a flexible framework for writing robot software.
-
ROS is a framework on top of the O.S. that allows it to abstract the hardware from the software.
-
It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.
-
ROS was built from the ground up to encourage collaborative robotics software development.

Code Structure of ROS
ROS has following nodes to divide task:
-
Traffic Detection Node
-
Waypoint Updater Node
-
Control of the Vehicle Node
-
Server for Communication Node
-
Messages Node
-
Waypoint Loader node
-
Waypoint Follower Node
Traffic Detection Node
-
This node takes in data from the /image_color, /current_pose, and /base_waypoints topics and publishes the locations to stop for red traffic lights to the /traffic_waypoint topic.
-
The /current_pose topic provides the vehicle's current position, and /base_waypoints provides a complete list of waypoints the car will be following.

Waypoint Updater Node
-
The purpose of this node is to update the target velocity property of each waypoint based on traffic light and obstacle detection data.
-
This node will subscribe to the /base_waypoints, /current_pose, /obstacle_waypoint, and /traffic_waypoint topics, and publish a list of waypoints ahead of the car with target velocities to the /final_waypoints topic.

Control of the Vehicle Node
-
This package contains the files that are responsible for control of the vehicle: the node dbw_node.py and the file twist_controller.py, along with a pid and lowpass filter.
-
The dbw_node subscribes to the /current_velocity topic along with the /twist_cmd topic to receive target linear and angular velocities.
-
Along with that, this node will subscribe to /vehicle/dbw_enabled, which indicates if the car is under dbw or driver control.
-
This node will publish throttle, brake, and steering commands to the /vehicle/throttle_cmd, /vehicle/brake_cmd, and /vehicle/steering_cmd topics.

Server for Communication Node
-
Node contains a server for communicating with the simulator, and a bridge to translate and publish simulator messages to ROS topics.
Messages Node
-
This node which includes definitions of the custom ROS message types used in the project.
Waypoint Loader node
-
A node loads the static waypoint data and publishes to /base_waypoints
Waypoint Follower Node
-
This node subscribes to /final_waypoints and publishes target vehicle linear and angular velocities in the form of twist commands to the /twist_cmd topic.