![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ESE350 project, Spring 2016, University of Pennsylvania
Dependencies: Adafruit9-DOf Receiver mbed-rtos mbed
quadcopter.h@10:e7d1801e966a, 2016-04-02 (annotated)
- Committer:
- ivo_david_michelle
- Date:
- Sat Apr 02 17:41:37 2016 +0000
- Revision:
- 10:e7d1801e966a
- Parent:
- 9:f1bd96708a21
- Child:
- 11:5c54826d23a7
some comments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ivo_david_michelle | 6:6f3ffd97d808 | 1 | #ifndef QUADCOPTER_H |
ivo_david_michelle | 6:6f3ffd97d808 | 2 | #define QUADCOPTER_H |
ivo_david_michelle | 6:6f3ffd97d808 | 3 | |
ivo_david_michelle | 7:f3f94eadc5b5 | 4 | #include "mbed.h" |
ivo_david_michelle | 7:f3f94eadc5b5 | 5 | #include "Adafruit_9DOF.h" |
ivo_david_michelle | 9:f1bd96708a21 | 6 | #include "Serial_base.h" |
ivo_david_michelle | 6:6f3ffd97d808 | 7 | |
ivo_david_michelle | 7:f3f94eadc5b5 | 8 | |
ivo_david_michelle | 7:f3f94eadc5b5 | 9 | struct state { |
ivo_david_michelle | 10:e7d1801e966a | 10 | double phi; // roll |
ivo_david_michelle | 10:e7d1801e966a | 11 | double theta; // pitch |
ivo_david_michelle | 10:e7d1801e966a | 12 | double psi; // yaw |
ivo_david_michelle | 10:e7d1801e966a | 13 | double p; // omega x |
ivo_david_michelle | 10:e7d1801e966a | 14 | double q; // omega y |
ivo_david_michelle | 10:e7d1801e966a | 15 | double r; // omega z |
ivo_david_michelle | 10:e7d1801e966a | 16 | |
ivo_david_michelle | 6:6f3ffd97d808 | 17 | }; |
ivo_david_michelle | 7:f3f94eadc5b5 | 18 | |
ivo_david_michelle | 10:e7d1801e966a | 19 | struct controlInput { |
ivo_david_michelle | 10:e7d1801e966a | 20 | double f; |
ivo_david_michelle | 10:e7d1801e966a | 21 | double mx; |
ivo_david_michelle | 10:e7d1801e966a | 22 | double my; |
ivo_david_michelle | 10:e7d1801e966a | 23 | double mz; |
ivo_david_michelle | 7:f3f94eadc5b5 | 24 | }; |
ivo_david_michelle | 7:f3f94eadc5b5 | 25 | |
ivo_david_michelle | 10:e7d1801e966a | 26 | // do one struct called "vector", or use standart template library |
ivo_david_michelle | 7:f3f94eadc5b5 | 27 | struct offset { |
ivo_david_michelle | 10:e7d1801e966a | 28 | double x; |
ivo_david_michelle | 10:e7d1801e966a | 29 | double y; |
ivo_david_michelle | 10:e7d1801e966a | 30 | double z; |
ivo_david_michelle | 7:f3f94eadc5b5 | 31 | }; |
ivo_david_michelle | 7:f3f94eadc5b5 | 32 | |
ivo_david_michelle | 10:e7d1801e966a | 33 | |
ivo_david_michelle | 10:e7d1801e966a | 34 | |
ivo_david_michelle | 6:6f3ffd97d808 | 35 | class Quadcopter |
ivo_david_michelle | 6:6f3ffd97d808 | 36 | { |
ivo_david_michelle | 6:6f3ffd97d808 | 37 | private: |
ivo_david_michelle | 8:326e7009ce0c | 38 | state state_; |
ivo_david_michelle | 10:e7d1801e966a | 39 | state desiredState_; |
ivo_david_michelle | 10:e7d1801e966a | 40 | controlInput controlInput_; |
ivo_david_michelle | 10:e7d1801e966a | 41 | //pwmOut * _pwmOut; // give address to constructor, than change this value |
ivo_david_michelle | 7:f3f94eadc5b5 | 42 | |
ivo_david_michelle | 10:e7d1801e966a | 43 | Adafruit_9DOF dof_; |
ivo_david_michelle | 10:e7d1801e966a | 44 | Adafruit_LSM303_Accel_Unified accel_; |
ivo_david_michelle | 10:e7d1801e966a | 45 | Adafruit_LSM303_Mag_Unified mag_; |
ivo_david_michelle | 10:e7d1801e966a | 46 | Adafruit_L3GD20_Unified gyro_; |
ivo_david_michelle | 7:f3f94eadc5b5 | 47 | |
ivo_david_michelle | 10:e7d1801e966a | 48 | sensors_event_t accel_event_; |
ivo_david_michelle | 9:f1bd96708a21 | 49 | sensors_event_t mag_event_; |
ivo_david_michelle | 9:f1bd96708a21 | 50 | sensors_event_t gyro_event_; |
ivo_david_michelle | 9:f1bd96708a21 | 51 | sensors_vec_t orientation_; |
ivo_david_michelle | 9:f1bd96708a21 | 52 | |
ivo_david_michelle | 10:e7d1801e966a | 53 | offset offsetAngRate_; |
ivo_david_michelle | 10:e7d1801e966a | 54 | offset offsetAttitude_; // used later to compensate tilt of IMU |
ivo_david_michelle | 10:e7d1801e966a | 55 | |
ivo_david_michelle | 10:e7d1801e966a | 56 | Serial *pcPntr_; // used to access serial communication |
ivo_david_michelle | 10:e7d1801e966a | 57 | |
ivo_david_michelle | 10:e7d1801e966a | 58 | double g_; // gravity [m/s^2] |
ivo_david_michelle | 10:e7d1801e966a | 59 | double m_; // mass [kg] |
ivo_david_michelle | 10:e7d1801e966a | 60 | // proportional attitude control gains |
ivo_david_michelle | 10:e7d1801e966a | 61 | double kp_phi_; |
ivo_david_michelle | 10:e7d1801e966a | 62 | double kp_theta_; |
ivo_david_michelle | 10:e7d1801e966a | 63 | double kp_psi_; |
ivo_david_michelle | 10:e7d1801e966a | 64 | |
ivo_david_michelle | 10:e7d1801e966a | 65 | // derivative attitude control gains |
ivo_david_michelle | 10:e7d1801e966a | 66 | double kd_phi_; |
ivo_david_michelle | 10:e7d1801e966a | 67 | double kd_theta_; |
ivo_david_michelle | 10:e7d1801e966a | 68 | double kd_psi_; |
ivo_david_michelle | 10:e7d1801e966a | 69 | |
ivo_david_michelle | 10:e7d1801e966a | 70 | // desired force (will come from joystick) |
ivo_david_michelle | 10:e7d1801e966a | 71 | double F_des_; // desired thrust force (excluding weight compensation) |
ivo_david_michelle | 7:f3f94eadc5b5 | 72 | |
ivo_david_michelle | 7:f3f94eadc5b5 | 73 | |
ivo_david_michelle | 6:6f3ffd97d808 | 74 | public: |
ivo_david_michelle | 10:e7d1801e966a | 75 | Quadcopter(); // constructor |
ivo_david_michelle | 10:e7d1801e966a | 76 | void setState(state *source, state *goal); |
ivo_david_michelle | 8:326e7009ce0c | 77 | void controller(); |
ivo_david_michelle | 8:326e7009ce0c | 78 | void readSensorValues(); |
ivo_david_michelle | 9:f1bd96708a21 | 79 | void initAllSensors(); |
ivo_david_michelle | 10:e7d1801e966a | 80 | void setSerial(Serial *pcPntr) { |
ivo_david_michelle | 10:e7d1801e966a | 81 | pcPntr_=pcPntr; |
ivo_david_michelle | 10:e7d1801e966a | 82 | }; |
ivo_david_michelle | 10:e7d1801e966a | 83 | void print(char * myString); // overload in order to print numbers |
ivo_david_michelle | 10:e7d1801e966a | 84 | |
ivo_david_michelle | 10:e7d1801e966a | 85 | |
ivo_david_michelle | 10:e7d1801e966a | 86 | // not implemented yet |
ivo_david_michelle | 10:e7d1801e966a | 87 | void setGains(); |
ivo_david_michelle | 10:e7d1801e966a | 88 | //void setPwm(); |
ivo_david_michelle | 10:e7d1801e966a | 89 | //void initializePwm(); |
ivo_david_michelle | 6:6f3ffd97d808 | 90 | }; |
ivo_david_michelle | 7:f3f94eadc5b5 | 91 | |
ivo_david_michelle | 6:6f3ffd97d808 | 92 | #endif |