ESE350 project, Spring 2016, University of Pennsylvania

Dependencies:   Adafruit9-DOf Receiver mbed-rtos mbed

quadcopter.h

Committer:
ivo_david_michelle
Date:
2016-04-02
Revision:
12:422963993df5
Parent:
11:5c54826d23a7
Child:
13:291ba30c7806

File content as of revision 12:422963993df5:

#ifndef QUADCOPTER_H
#define QUADCOPTER_H

#include "mbed.h"
#include "Adafruit_9DOF.h"
#include "Serial_base.h"


struct state {
    double phi; // roll
    double theta; // pitch
    double psi; // yaw
    double p; // omega x
    double q; // omega y
    double r; // omega z

};

struct controlInput {
    double f;
    double mx;
    double my;
    double mz;
};

// do one struct called "vector", or use standart template library
struct offset {
    double x;
    double y;
    double z;
};

struct motors {
    double m1;
    double m2;
    double m3;
    double m4;
    };


class Quadcopter
{
private:
    state state_;
    state desiredState_;
    controlInput controlInput_;
    //pwmOut * _pwmOut; // give address to constructor, than change this value
    motors motorPwm_;

    Adafruit_9DOF dof_;
    Adafruit_LSM303_Accel_Unified accel_;
    Adafruit_LSM303_Mag_Unified mag_;
    Adafruit_L3GD20_Unified gyro_;

    sensors_event_t accel_event_;
    sensors_event_t mag_event_;
    sensors_event_t gyro_event_;
    sensors_vec_t   orientation_;

    offset offsetAngRate_;
    offset offsetAttitude_; // used later to compensate tilt of IMU
    
    Serial *pcPntr_; // used to access serial communication

    double g_;  // gravity [m/s^2]
    double m_; // mass [kg]
    // proportional attitude control gains
    double kp_phi_;
    double kp_theta_;
    double kp_psi_;

    // derivative attitude control gains
    double kd_phi_;
    double kd_theta_;
    double kd_psi_;

    // desired force (will come from joystick)
    double F_des_; // desired thrust force (excluding weight compensation)


public:
    Quadcopter(); // constructor
    void setState(state *source, state *goal);
    void controller();
    void readSensorValues();
    void initAllSensors();
    void setSerial(Serial *pcPntr) {
        pcPntr_=pcPntr;
    };
    void print(char * myString); // overload in order to print numbers
    motors getPwm();

    // not implemented yet
    void setGains();
    //void setPwm();
    //void initializePwm();
};

#endif