Skip to content

fdcl-gwu/uav_geometric_control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Geometric Control of a Quadrotor UAV on SE(3)

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:

  1. Geometric tracking control of a quadrotor UAV on SE(3).
  2. 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.


Codes in this Repository

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.

Citations

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}
    }
    

Publications

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

Generating the Documentation

C++

  1. Switch to the docs branch: git checkout docs
  2. If you update the code in the master branch, merge it to the docs branch: git merge master
  3. Change the directory to docs directory: cd docs/cpp/
  4. Make sure all the dependencies are installed:
    # Linux
    sudo apt-get install -y doxygen graphviz
    
    # Mac
    brew install graphviz doxygen
  5. Generate the documentation: doxygen Doxygen