This repository started to develop lateral and longitudinal control of vehicle. It contains
- 5 variety of A* algorithms for lateral and longitunidal control
- Bicycle model based MPC trajectory tracking
- 4 variations of MPC for ACC (python/cpp, 2 different solvers, 2 different formulation)
The A* algorithms were tested in Webots simulator
ACC algorithms are tested in Webots simulator
- In P3AT robot
- In Actual car
This implementation for Hildreth's QP solver and Laguerre based formulation with exponential weights is taken from Model Predictive Control System Design and Implementation Using MATLAB® (2009, Springer)
P3AT is a 4 wheeler robot where I tested ACC controller.
P3AT uses RosAria
Lidar was used to measure the relative distance, and vehicle odometry to detect speed.
The full implementation is present in P3AT_testing folder with rosbags.
The ACC algorithm was extensively tested in webots for multiple speeds in following scenarios
- Stop and go
- Tracking
- Braking
Results are present in Results folder ref_vehicle_driver.py is webots reference vehicle controller
MPC controller implementation in webots is present in webots folder Webots video here
System identification was performed on the vehicle to derive the state space model for prediction. Along with the controller limits and delay.
Vehicle's throttle and brake modelling is explained here Steering modelling here IMU and radar data collection, cleaning and usage here
Complete implementation code using CANFD (vehicle and steering in can control) with radar based tracking (again can) is present in canfd folder. The CAN device drivers are written in C++ from scracth to match vehicle's saftey requirements and complying CANOpen protocol, along with steering and radar, it's made modular and configurable to easily integrate multiple devices.
P3AT - RosAria, ubuntu 20.04, python 3.8 Webots - R2023b, C++17, python 3.12 Vehicle - CANFD, Ubuntu 24.04, python 3.12, C++ 17