This is an implementation of an Ackermann Steering Geometry controller. The user is able to input a desired heading and speed in the global reference frame which the controller will drive the robot model towards, based upon rover parameters and limitations.
To calculate the Ackermann steering angles for a four wheeled vehicles, a simplified model with a single front and rear wheel is assumed. The steering angle of this simulated single steering wheel is used to calculate the updated heading of the rover along with the vehicle wheel base. For an Ackermann steering system, the two actual steering wheels are perpindicular to the radius of the turning circle traced by each wheel; the difference in angles for each of these wheels can be calculated based on the track of the rover. The different turning circles and the vehicle speed are used to calculate individual wheel speeds.
For more detailed information on this project please explore the generated docs. After cloning the repository open them in the web browser of your choice, e.g.
firefox docs/doxygen/html/index.html
Dependencies
This project requires a C++11 enabled compiler and cmake. In addition, we use QT5 for visualization of our demo.
QT5 (and QtCharts) can be installed via the following command on Ubuntu 18.04:
Can set various values in GUI to zero, which causes unexpected behavior including crashes. This action should be avoided.
(Potential) PID Derivative gain can cause unexpected oscillatory behavior; need more testing to see if this is functioning correctly or indicates an error in implementation.
Minor:
Wheel linear velocity updates in the plot window lag slightly behind the vehicle speed indicated.
Cannot use up/down arrows in selection box to pass beyond a full circle; manually entering the heading will perform as expected.