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
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.
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.
Navigation and Control
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
ROS Teleoperation
Dataset Creation for Road Detection
Demo Video
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
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)