Crazyflie Attittude Controller
Dependencies: mbed CrazyflieController CrazyflieSensors USBDevice
main.cpp
- Committer:
- IgneousGuikas
- Date:
- 2018-10-09
- Revision:
- 1:65d0334fc83a
- Parent:
- 0:c5109053e100
- Child:
- 2:6ca1b4dcb9f7
File content as of revision 1:65d0334fc83a:
#include "mbed.h" #include "CrazyflieController.h" //Declare attitude estimator object AttitudeEstimator att_est; //Declare attitude controller object AttitudeController att_cont; // Declare mixer Mixer mixer; // Declare timer object Timer timer; Ticker tic; bool flag = false; void callback() { flag = true; } // Last interrupt time float current_time = 0.0f; int main() { // Wait 5s for safety wait(5); //Initialize attitude estimator att_est.init(); //Start timer tic.attach(&callback,dt); timer.start(); //Run controller for only 5s while( current_time <=10.0f) { // Wait 5ms (200 Hz) to perfom next estimate and control update current_time = timer.read(); if(flag) { flag = false; // Estimate attitude att_est.estimate(); // Calculate torques (N.m) given estimated attitude ( rad and rad /s) att_cont.control(0.0f, 0.0f, 0.0f, att_est.phi, att_est.theta, att_est.psi, att_est.p, att_est.q, att_est.r); // Actuate motors with given force and calculated torques mixer.actuate(0.25f, att_cont.tau_phi, att_cont.tau_theta, 0.0f); } if(att_est.phi >= pi/4.0f || att_est.theta >= pi/4.0f || att_est.p >= 4.0f*pi || att_est.q >= 4.0f*pi) { break; } } //Turn off all motors mixer.actuate(0.0f, 0.0f, 0.0f, 0.0f); while (1); }