This project implements a path tracking control system that ensures an autonomous vehicle follows a predefined trajectory. The work is structured in two main stages:
- The vehicle is modeled using a bicycle kinematic model, valid for:
- Low-speed motion
- Large curvature paths
- Negligible bank and inclination angles
- The bicycle abstraction represents each axle (front and rear) by a single wheel located at its midpoint.
The proposed control scheme combines two methods:
-
Orientation Error Handling
- A geometric procedure relates steering angle to orientation error.
- Aligns the velocity vector with the tangent of the reference path.
-
Cross-Track Error (CTE) Handling
- A PID controller adjusts the steering angle based on the lateral deviation (CTE).
- Ensures the velocity vector rotates toward the path centerline.
👉 By combining both, the system avoids the limitations of each method individually (parallel tracking, divergence, or wrong direction).
The system is implemented and tested in MATLAB & Simulink.
The simulation includes the following blocks:
- Road Block: Defines the mathematical expression of the path.
- Sensors Block: Computes orientation error and cross-track error.
- Controller Block: Combines PID (for CTE) + geometric approach (for orientation).
- Kinematic Model Block: Updates vehicle pose using lateral kinematic equations.
The combined controller demonstrates robust path tracking on different reference paths:
Key findings:
- The orientation-only controller may cause parallel tracking without convergence.
- The CTE-only controller can lead to divergence if the vehicle starts far from the path.
- The combined method ensures convergence and prevents opposite-direction tracking.
- Both orientation error and cross-track error converge and remain small over time.
- MATLAB 2014a or newer (with Simulink)
# Clone the repository
git clone https://github.com/A-S-Control-Systems/Path-Tracking-Control-Systemfrom the src , run play_me_first.m to initialize the car parameters and define the path to be tracked (you can edit it as you want), then run the code main.m which automatically run the Kinematic_Model_Delta_Psi_Control.slx to calculate the traversed path, then it simulates it using drawnow.
├ src #contains MATLAB codes
│ ├── play_me_first.m # Initializes car parameters & defines path
│ ├── Kinematic_Model_Delta_Psi_Control.slx # Simulink model with control scheme
│ ├── main.m # Runs the simulation & visualization
├ Documentation # Documentation file (PDF)
├ README.md
@software{myproject2025,
author = {Ali Deeb and Saleh Rabea},
title = {Path-Tracking-Control-System},
year = {2023},
publisher = {GitHub},
note = {Supervised by Dr. Hasan Alahmad, Dr. Samer Suleiman, Eng. Wassim Ahmad},
url = {https://github.com/A-S-Control-Systems/Path-Tracking-Control-System}
}





