Self Driving Car- Mapping, Path Planning & Navigation

Autonomous vehicle with ROS2, SLAM, and object detection

This project focuses on the development of a Self-Driving Car (SDC) emphasizing Mapping, Path Planning, Obstacle Detection and Avoidance. The system utilizes advanced Artificial Intelligence (AI) techniques, high-precision mapping using Lidar and Camera, and implements both PID controllers and Model Predictive Control (MPC) for optimal vehicle motion.

Project Overview

The autonomous car test platform.

Technical Implementation

The project integrates Robot Operating System (ROS) framework for enhanced system speed. Advanced algorithms process real-time data for path planning, calculating optimal routes while considering pedestrians on the road.

Mapping and Perception

The system implements high-precision mapping using physical systems such as Lidar and Camera, enabling accurate environmental perception. SLAM (Simultaneous Localization and Mapping) algorithms generate accurate Lidar-based maps of static environments.

Left: Creating map in ROS RViz on college road at night. Right: Planned path around robotics club for autonomous navigation.

Dataset and Object Detection

The project involved creating a comprehensive dataset for object detection model training, enabling the car to recognize and avoid obstacles in real-time.

Dataset creation process for object detection model training.

For optimal vehicle motion, the system implements both Proportional-Integral-Derivative (PID) controllers and Model Predictive Control (MPC). The nav2 stack is incorporated for autonomous navigation and real-time path planning.

Development Videos

Initial Testing Phase

Red car working with rear motor and servo motor steering in the initial testing phase.

ROS Teleoperation

Red car controlled via ROS teleoperation from keyboard.

Dataset Creation for Road Detection

Dataset creation process for road detection model training.

Demo Video

Demo video of the autonomous car project showcasing mapping, navigation, and obstacle avoidance capabilities.

Additional Resources

Documentation

Technical Videos

Social Media

Troubleshooting

During development, I encountered a ros2_control error when trying to implement the Ackermann steering controller for the autonomous car. The error message was: “According to the loaded plugin descriptions the class ackermann_steering_controller/AckermannSteeringController with base class type hardware_interface::SystemInterface does not exist.”

The issue was that the ackermann_steering_controller was exported with base class type as controller_interface::ChainableControllerInterface, but ros2_control_node was expecting it to be of base class type as hardware_interface::SystemInterface. I posted this issue on r/ROS subreddit and received helpful guidance from the community.

The solution involved using a chainable controller pattern, where the chainable controller links into a system controller, following the pattern from ros2_control_demos example_12. This approach allows the system controller to handle the hardware interface while the chainable controller processes commands as they pass through.

Team

Two Project team members with the 1 project: autonomous car prototype and 2nd project: VTOL flying drone.

Project Members:

  • Aarjan Budathoki (PUL077BEI004)
  • Abhigyan Bhusal (PUL077BEI007)
  • Manish Guruwacharya (PUL077BEI021)

Submitted to: Department of Electronics & Computer Engineering, Institute of Engineering, Pulchowk Campus, Tribhuvan University (March, 2024)