This system enables real-time autonomous navigation for the McMaster Autonomous Electrified Vehicle (AEV) using LiDAR, IMU, RGB-D camera, and odometry data within a ROS-based framework. Developed as part of ELECENG 3EY4, the project integrates localization, mapping, and control algorithms to navigate structured and unstructured environments.
The system runs on an NVIDIA Jetson Nano, handling real-time sensor processing, state estimation, mapping, and control.
- ROS (Robot Operating System): Middleware managing nodes, topics, messages, and TF transforms
- Python & C++: ROS node implementation for mapping, navigation, and control
- NumPy: Numerical computation and matrix operations
- RViz: Visualization of LiDAR scans, coordinate frames, and maps
- QuadProg: Solves QP for virtual barrier-based obstacle avoidance
- NVIDIA Jetson Nano: Embedded platform for real-time autonomous processing
- LiDAR (RPLiDAR A2M8): 2D obstacle detection and mapping
- IMU (BNO055): Orientation (yaw) and motion data
- RGB-D Camera (Intel RealSense): Depth-based obstacle detection (bonus integration)
- Odometry (VESC + IMU fusion): Vehicle pose and velocity estimation
- Implements wheel odometry with IMU yaw fusion
- Estimates vehicle pose: [ X = [x ; y ; \theta]^T ]
- Uses discrete-time kinematics for real-time updates
- Publishes pose via ROS Odometry messages and TF transforms
- Implements Occupancy Grid Mapping using LiDAR and pose data
- Uses an inverse sensor model to classify space as:
- Occupied
- Free
- Unknown
- Applies log-odds updates for probabilistic mapping
- Publishes map as
nav_msgs/OccupancyGrid
-
Nodes:
occupancygridmap.py→ mappingnavigation.py→ navigation + controlbarrier.py→ QP-based obstacle avoidance
-
Topics:
/scan→ LiDAR data/odom→ vehicle pose/imu/data→ orientation/drive→ control commands
-
TF Frames:
odom(global frame)base_link(vehicle frame)laser,imu,camera(sensor frames)
- Estimates distances to left and right walls using LiDAR
- Computes error: [ d_{lr} = d_l - d_r ]
- Uses feedback-linearizing + PD control to maintain centered motion
- Identifies the largest free-space gap within the forward field of view
- Selects safe heading for navigation in cluttered environments
- Constructs parallel virtual barriers using LiDAR data
- Formulated as a Quadratic Program (QP)
- Solved using QuadProg to generate a safe navigation corridor
- Uses depth images to detect obstacles outside the LiDAR plane
- Converts depth data into 3D points and filters ground noise
- Projects relevant obstacles into the LiDAR frame
- Enhances obstacle detection without modifying the core navigation pipeline
- Uses
AckermannDriveStampedfor steering and velocity commands - Velocity adjusted based on obstacle distance
- Ensures smooth and stable real-time navigation
navigation.py→ Navigation logic and control (gap selection + steering)barrier.py→ QP-based virtual barrier obstacle avoidancenav_bonus.py→ Bonus utilizing the RGB-D Camera for enhanced forward detectionoccupancygridmap.py→ Probabilistic occupancy grid mappingsimulator.launch→ Launches the simulation environmentexperiment.launch→ Runs full system setupparams.yaml→ Configuration and tuning parameters
git clone <repo-link>
cd ~/catkin_ws
catkin_make
source devel/setup.bashroslaunch simulator.launchrosrun barrier.py- Set fixed frame to
odom - Add:
- TF
- LaserScan
- OccupancyGrid
This project demonstrates a complete autonomous driving pipeline for the McMaster AEV, combining:
- Localization (odometry + IMU)
- Probabilistic mapping (occupancy grid)
- Control systems (feedback-linearizing + PD)
- Optimization (QP-based virtual barriers)
- Sensor fusion (LiDAR + RGB-D camera)
All components work together in real time within ROS to enable safe and reliable autonomous navigation.



