|
Ackermann Controller
|
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.
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:
To build the package on Ubuntu 18.04, run the following from a terminal.
A script to launch this is included in BashScripts.
Assuming the build succeeded, you can then run the demo code.
A script to launch this is included in BashScripts.
You should see something similar to the following, which allows you to evaluate the system and play with parameters against a mock Plant.
| Empty | Running |
|---|---|
| <img src="docs/media/empty_demo.png" alt=""Empty Demo""/> | <img src="docs/media/running_demo.png" alt=""Running Demo""/> |
Unit and System tests are run during Continuous integration, but you can run them manually from the command line as well:
A script to launch this is included in BashScripts.
To generate CPPCheck and CPPLint code analysis:
This project uses the MIT License as described in [the license file](LICENSE).
Details on the status of our Agile Iterative Process (AIP) can be found here
Sprint planning notes and reviews can be found here.
TODO: Annote bugs and issues when uncovered.
To generate Doxygen documentation:
To access Doxygen documentation, navigate to:
The controller enforces the various limitations of the rover:
The controller will accept the following inputs:
The controller will provide the following outputs:
An overview of the classes used and their dependencies is shown in the following UML diagram:
An example sequence diagram for the full program is shown in the following UML diagram:
An example activity diagram for the controller methodology is shown in the following UML diagram:
1.8.13