In this project, I implemented an adaptive controller for a Parrot Mambo mini-drone to stabilize the drone's hover after it picks up an object of unknown weight.
Throughout the class, the drone was programmed using a Simulink library provided by Parrot. However, the control architecture in this library assumes a mass and weight distribution for the drone. This assumption is reasonable except when the "grabber" attachment is used and the drone uses the grabber to pick up a reasonably massive object. At best, the added mass resulted in errors relative to the commanded function and a long time to stabilize to a hover. At worst, the drone would pitch forward, destabilize, and crash.
My contributions to the project involved implementing the following functionality into Simulink:
Developing an appropriate "reference model", a model that predicts the drone's behavior without any added weight
Implementing a discrete-time version of the reference model that was compatible with the drone itself
Translating theory for a model-reference adaptive controller (MRAC) into a practical Simulink implementation
Simulating the drone's behavior with the new controller
The result of this work was a functional adaptive controller which behaved stably during a hover operation, though slightly underdamped compared to the desired dynamics.
The original (full-state feedback) controller and MRAC controller were then implemented on the mini-drone while it used the grabber attachment to pick up an eraser. The original controller (left) and the MRAC controller (right) are shown below.
This comparison both motivates the need for an adaptive controller and demonstrates the successful implementation of the controller on the mini-drone.