This project implements a ROS-based path-tracking controller using a Pure Pursuit algorithm and a navigation state machine. The project is containerized using Docker, with separate development and production environments managed via Docker Compose.
The Pure Pursuit algorithm was chosen for its simplicity and effectiveness in path-following scenarios. It computes a steering angle to keep the vehicle on a predefined path by constantly aiming at a target point ahead of the vehicle. The algorithm is well-suited for real-time applications, making it a robust choice for this project.
- Key Components:
- Waypoint Transformation: Transforms global waypoints into the vehicle's coordinate frame to ensure accurate path tracking.
- Steering Angle Calculation: Computes the steering angle based on the target waypoint and the vehicle’s current position and orientation.
The state machine is designed to manage different operational states of the vehicle, such as "Idle," "Path Following," and "Completed." The use of a state machine adds robustness to the system by clearly defining behaviors for each state and ensuring smooth transitions between them.
- Key States:
- Idle: The vehicle waits for a path or command.
- Path Following: The vehicle actively follows the path using the Pure Pursuit controller.
- Completed: The vehicle stops following the path once it has reached the end.
In this section, we showcase the path and position in RViz, using a red marker to represent the vehicle’s current location.
Figure 1: RViz visualization showing the vehicle's path and its position.
Here, we demonstrate the vehicle following the path in the Gazebo simulation environment. The video shows the vehicle moving along the predefined path, successfully reaching the destination.
Figure 2: Gazebo simulation showing the vehicle following the path.
- Docker
- Docker Compose
- X11 server running on your host machine (for GUI applications)
git clone https://github.com/lp-karim/TII-vehicleics-Integration-Engineer-Challenge
cd TII-vehicleics-Integration-Engineer-ChallengeUse Docker Compose to build the containers:
docker compose up --build -dMake sure to expose your X11 socket to be able to Rviz and Gazebo:
xhost +local:docker- Unit Testing: Use gtest to write and run unit tests for each component.
- Code Coverage: Use gcov or lcov to measure code coverage and aim for 80% coverage.
- Extend State Machine: Add more states to the state machine, such as obstacle avoidance.

