This includes the geometric controller in SE(3) we use in the Flight Dynamics and Control Lab, in different programming languages. We use two main versions of the controller:
- Geometric tracking control of a quadrotor UAV on SE(3).
- Geometric Controls of a Quadrotor with a Decoupled Yaw Control
The main difference between those two is that the second one decouples the yaw control in the attitude controller. This leads to better tracking performance, especially at the presence of large yaw angles, but at the expense of some additinal computations and slightly delayed yaw error convergence. Please check Geometric Controls of a Quadrotor with a Decoupled Yaw Control for more comparisons.
Variants of both the controllers have been used in various numerical and experimental research tasks. A summary of these can be found in Publications section.
The following controller/language combinations are available in this repository. The documenteds for some of the languages can be found here. Other languages are documented directly in the source files.
Language | Standard [1] | Decoupled-Yaw [2] |
---|---|---|
C++ | ✅ | ✅ |
Python | ✅ | ✅** |
Matlab | ✅ | ✅ |
Note:
- You can find the ROS/Gazebo simulation environment here.
- Python decoupled-yaw controller can be found in the ROS/Gazebo repository.**
- Documentation for the C++ is inside the
cpp
directory. - Unit testing has been implemented in C++ and Python (partial) versions of the controller.
If you use either of the controllers, please use the relevant citatations:
- Geometric tracking control of a quadrotor UAV on SE(3):
@inproceedings{Lee2010, author={T. {Lee} and M. {Leok} and N. H. {McClamroch}}, booktitle={IEEE Conference on Decision and Control}, title={Geometric tracking control of a quadrotor UAV on SE(3)}, year={2010}, pages={5420-5425},}
- Geometric Controls of a Quadrotor with a Decoupled Yaw Control
@inproceedings{Gamagedara2019, title={Geometric controls of a quadrotor uav with decoupled yaw control}, author={Gamagedara, Kanishke and Bisheban, Mahdis and Kaufman, Evan and Lee, Taeyoung}, booktitle={2019 American Control Conference (ACC)}, pages={3285--3290}, year={2019}, organization={IEEE} }
A selected list of publications that use implementations of the above controllers with/without slight variations:
- Geometric adaptive controls of a quadrotor UAV with decoupled attitude dynamics: paper, repo, video
- Geometric controls of a quadrotor with a decoupled yaw control: paper
- Geometric adaptive control with neural networks for a quadrotor UAV in wind fields(wind rejection): paper, ArXiv link, video: 360 back-flip, hover flight, attitude flight
- Autonomous quadrotor 3D mapping and exploration using exact occupancy probabilities: video
- Autonomous flight of a quadrotor UAV with the states estimated by a delayed Kalman filter: video
- Laser guided landing on an inclined surface: paper, video
- PID Geometric control on SE(3): paper, ArXiv link
- Geometric control on SE(3): paper
- Geometric attitude control on SO(3): paper
- Model identification on SE(3): paper
- Model identification on SO(3): paper
- Attitude Control on SO(3) with constraints: paper, Code
- For a rigid dumbbell around an asteroid: code
- Switch to the docs branch:
git checkout docs
- If you update the code in the
master
branch, merge it to thedocs
branch:git merge master
- Change the directory to docs directory:
cd docs/cpp/
- Make sure all the dependencies are installed:
# Linux sudo apt-get install -y doxygen graphviz # Mac brew install graphviz doxygen
- Generate the documentation:
doxygen Doxygen