Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MatrixMath LPS25HB_I2C LSM9DS1 Matrix2 PIDcontroller LoopTicker SBUS_without_mainfile UsaPack solaESKF_wind Vector3 CalibrateMagneto FastPWM
global.hpp@117:8cedc59454c4, 2022-03-30 (annotated)
- Committer:
- osaka
- Date:
- Wed Mar 30 04:47:36 2022 +0000
- Revision:
- 117:8cedc59454c4
- Parent:
- 114:ba221936d53a
- Child:
- 118:97ffe77b6f38
dr_command
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cocorlow | 56:888379912f81 | 1 | #ifndef __GLOBAL_HPP__ |
| cocorlow | 56:888379912f81 | 2 | #define __GLOBAL_HPP__ |
| cocorlow | 56:888379912f81 | 3 | |
| cocorlow | 56:888379912f81 | 4 | #include "mbed.h" |
| cocorlow | 56:888379912f81 | 5 | #include "PIDcontroller.h" |
| cocorlow | 56:888379912f81 | 6 | #include "SBUS.hpp" |
| cocorlow | 56:888379912f81 | 7 | #include "LoopTicker.hpp" |
| osaka | 83:0a644de28415 | 8 | #include "LSM9DS1.h" |
| osaka | 83:0a644de28415 | 9 | #include "LPS.h" |
| osaka | 83:0a644de28415 | 10 | #include "solaESKF.hpp" |
| NaotoMorita | 61:c05353850017 | 11 | #include "CalibrateMagneto.h" |
| cocorlow | 56:888379912f81 | 12 | #include "FastPWM.h" |
| cocorlow | 56:888379912f81 | 13 | #include <cmath> |
| cocorlow | 56:888379912f81 | 14 | #include "UsaPack.hpp" |
| cocorlow | 56:888379912f81 | 15 | #include "Vector3.hpp" |
| cocorlow | 56:888379912f81 | 16 | |
| cocorlow | 56:888379912f81 | 17 | #define MPU6050_PWR_MGMT_1 0x6B |
| cocorlow | 56:888379912f81 | 18 | #define MPU_ADDRESS 0x68 |
| cocorlow | 56:888379912f81 | 19 | #define M_PI 3.141592f |
| cocorlow | 56:888379912f81 | 20 | #define ACCEL_FSR MPU6050_ACCEL_FS_8 |
| cocorlow | 56:888379912f81 | 21 | #define ACCEL_SSF 4096.0f |
| cocorlow | 56:888379912f81 | 22 | #define GYRO_FSR MPU6050_GYRO_FS_250 |
| cocorlow | 56:888379912f81 | 23 | #define GYRO_SSF 131.0f |
| cocorlow | 56:888379912f81 | 24 | #define MPU6050_LPF MPU6050_DLPF_BW_256 |
| cocorlow | 56:888379912f81 | 25 | #define gyro_th 20.0f |
| cocorlow | 56:888379912f81 | 26 | #define PID_dt 0.015f |
| osaka | 87:981895e1d4f2 | 27 | #define servoPwmMax 2100.0f |
| osaka | 87:981895e1d4f2 | 28 | #define servoPwmMin 900.0f |
| cocorlow | 56:888379912f81 | 29 | #define motorPwmMax 2000.0f |
| cocorlow | 56:888379912f81 | 30 | #define motorPwmMin 1100.0f |
| NaotoMorita | 71:62eb45ecffe9 | 31 | #define N_EEPROM 12 |
| cocorlow | 56:888379912f81 | 32 | |
| cocorlow | 56:888379912f81 | 33 | // struct union |
| cocorlow | 56:888379912f81 | 34 | union U |
| cocorlow | 56:888379912f81 | 35 | { |
| osaka | 88:0fc5df2fddcb | 36 | int i[N_EEPROM]; // 0: flag(>1で正常に書き込まれた状態) 1 ~ 3: 磁場の中心座標, 4: 磁場の半径、 5~7; mag, 10: roll offset, 11: pitch offset |
| cocorlow | 56:888379912f81 | 37 | char c[N_EEPROM*4]; // floatはcharの4倍 |
| cocorlow | 56:888379912f81 | 38 | }; |
| cocorlow | 56:888379912f81 | 39 | |
| cocorlow | 56:888379912f81 | 40 | struct valuePack |
| cocorlow | 56:888379912f81 | 41 | { |
| cocorlow | 56:888379912f81 | 42 | float acc[3]; |
| cocorlow | 56:888379912f81 | 43 | float gyro[3]; |
| cocorlow | 56:888379912f81 | 44 | float mag[3]; |
| cocorlow | 56:888379912f81 | 45 | float rpy[3]; |
| osaka | 88:0fc5df2fddcb | 46 | float altitude; |
| cocorlow | 63:851e96f54a86 | 47 | float de; |
| cocorlow | 63:851e96f54a86 | 48 | float deobj; |
| NaotoMorita | 73:be7a8b8188de | 49 | float rc[5]; |
| osaka | 88:0fc5df2fddcb | 50 | int calibEndFlag; |
| osaka | 91:393b9ae62681 | 51 | int readyFlag; |
| osaka | 96:0be0d80d5299 | 52 | float pi[3]; |
| osaka | 96:0be0d80d5299 | 53 | float vi[3]; |
| osaka | 99:37cfd8633c9b | 54 | float att_dt; |
| osaka | 112:5a82800e1485 | 55 | int ap_flag; |
| cocorlow | 63:851e96f54a86 | 56 | }; |
| cocorlow | 63:851e96f54a86 | 57 | |
| NaotoMorita | 73:be7a8b8188de | 58 | struct updatePack |
| cocorlow | 63:851e96f54a86 | 59 | { |
| osaka | 88:0fc5df2fddcb | 60 | int calibrationFlag; |
| osaka | 84:028bd650e8bc | 61 | char gps_fix; |
| osaka | 84:028bd650e8bc | 62 | int gps_itow; |
| osaka | 84:028bd650e8bc | 63 | float vi[3]; |
| osaka | 84:028bd650e8bc | 64 | float pi[3]; |
| NaotoMorita | 73:be7a8b8188de | 65 | float de_command; |
| osaka | 112:5a82800e1485 | 66 | float dT_command; |
| osaka | 117:8cedc59454c4 | 67 | float dr_command; |
| osaka | 98:39e4d1844a24 | 68 | float gps_acc; |
| NaotoMorita | 106:36458fb9b5b7 | 69 | float vx_opt; |
| NaotoMorita | 106:36458fb9b5b7 | 70 | float vy_opt; |
| osaka | 103:34e911b94440 | 71 | float dist_ir; |
| NaotoMorita | 106:36458fb9b5b7 | 72 | //float dt_opt; |
| osaka | 114:ba221936d53a | 73 | float heading; |
| cocorlow | 56:888379912f81 | 74 | }; |
| cocorlow | 56:888379912f81 | 75 | |
| NaotoMorita | 107:78e6f7bee68e | 76 | |
| cocorlow | 56:888379912f81 | 77 | // var |
| cocorlow | 56:888379912f81 | 78 | |
| cocorlow | 56:888379912f81 | 79 | // communication |
| cocorlow | 56:888379912f81 | 80 | extern Serial pc; |
| cocorlow | 56:888379912f81 | 81 | extern I2C i2c; // sda, scl |
| cocorlow | 56:888379912f81 | 82 | extern UsaPack tail; // log - tail |
| cocorlow | 56:888379912f81 | 83 | extern SBUS sbus; |
| cocorlow | 56:888379912f81 | 84 | |
| cocorlow | 56:888379912f81 | 85 | // sensor |
| osaka | 83:0a644de28415 | 86 | extern LSM9DS1 lsm; |
| osaka | 83:0a644de28415 | 87 | extern LPS lps; |
| osaka | 83:0a644de28415 | 88 | //extern UsaPack sensor1; |
| osaka | 83:0a644de28415 | 89 | //extern UsaPack sensor2; |
| NaotoMorita | 61:c05353850017 | 90 | extern CalibrateMagneto magCalibrator; |
| cocorlow | 56:888379912f81 | 91 | |
| cocorlow | 56:888379912f81 | 92 | // io |
| cocorlow | 56:888379912f81 | 93 | extern DigitalIn userButton; |
| cocorlow | 56:888379912f81 | 94 | extern DigitalIn locdef1; |
| cocorlow | 56:888379912f81 | 95 | extern DigitalIn locdef2; |
| cocorlow | 56:888379912f81 | 96 | |
| cocorlow | 56:888379912f81 | 97 | // control |
| cocorlow | 56:888379912f81 | 98 | extern FastPWM servo; |
| NaotoMorita | 107:78e6f7bee68e | 99 | extern FastPWM rudServo; |
| NaotoMorita | 107:78e6f7bee68e | 100 | extern FastPWM motor1; |
| NaotoMorita | 107:78e6f7bee68e | 101 | extern FastPWM motor2; |
| cocorlow | 56:888379912f81 | 102 | extern PID pitchPID; // rad |
| cocorlow | 56:888379912f81 | 103 | extern PID pitchratePID;// rad/s |
| NaotoMorita | 107:78e6f7bee68e | 104 | extern PID yawratePID;// rad/s |
| NaotoMorita | 79:aa2631950f46 | 105 | extern int itowVEL_log; |
| osaka | 84:028bd650e8bc | 106 | extern solaESKF eskf; |
| cocorlow | 56:888379912f81 | 107 | |
| NaotoMorita | 104:f81befbc5ab7 | 108 | extern Timer _t; |
| cocorlow | 56:888379912f81 | 109 | extern int loop_count; |
| NaotoMorita | 104:f81befbc5ab7 | 110 | extern float tstart; |
| NaotoMorita | 104:f81befbc5ab7 | 111 | extern float tgps; |
| NaotoMorita | 106:36458fb9b5b7 | 112 | extern float tsensors; |
| cocorlow | 56:888379912f81 | 113 | extern float att_dt; |
| cocorlow | 56:888379912f81 | 114 | extern float rc[16]; |
| cocorlow | 56:888379912f81 | 115 | |
| cocorlow | 56:888379912f81 | 116 | extern int16_t ax, ay, az; |
| cocorlow | 56:888379912f81 | 117 | extern int16_t gx, gy, gz; |
| cocorlow | 56:888379912f81 | 118 | extern float magval[3]; |
| cocorlow | 56:888379912f81 | 119 | |
| cocorlow | 63:851e96f54a86 | 120 | // elevator |
| cocorlow | 63:851e96f54a86 | 121 | extern float de; |
| cocorlow | 63:851e96f54a86 | 122 | extern float deobj; |
| NaotoMorita | 107:78e6f7bee68e | 123 | extern float dr; |
| NaotoMorita | 107:78e6f7bee68e | 124 | extern float drobj; |
| cocorlow | 63:851e96f54a86 | 125 | |
| cocorlow | 56:888379912f81 | 126 | // position |
| osaka | 83:0a644de28415 | 127 | extern Matrix SensorAlignmentAG; |
| osaka | 83:0a644de28415 | 128 | extern Matrix SensorAlignmentMAG; |
| osaka | 85:0b14a2a600fc | 129 | extern Matrix euler; |
| cocorlow | 56:888379912f81 | 130 | extern Vector3 rpy; // x:roll y:pitch z:yaw |
| cocorlow | 56:888379912f81 | 131 | extern Vector3 acc; |
| cocorlow | 56:888379912f81 | 132 | extern Vector3 accref; |
| cocorlow | 56:888379912f81 | 133 | extern Vector3 mag; |
| cocorlow | 56:888379912f81 | 134 | extern Vector3 magref; |
| cocorlow | 56:888379912f81 | 135 | extern Vector3 gyro; |
| NaotoMorita | 71:62eb45ecffe9 | 136 | extern Vector3 vb; |
| osaka | 83:0a644de28415 | 137 | extern float palt; |
| osaka | 83:0a644de28415 | 138 | extern float palt0; |
| NaotoMorita | 90:0b1f62f7a83a | 139 | extern bool gpsUpdateFlag; |
| NaotoMorita | 106:36458fb9b5b7 | 140 | extern bool sensorUpdateFlag; |
| NaotoMorita | 106:36458fb9b5b7 | 141 | extern int sensorUpdateID; |
| osaka | 84:028bd650e8bc | 142 | extern float dynaccnorm2; |
| NaotoMorita | 106:36458fb9b5b7 | 143 | //extern float opt_vx; |
| NaotoMorita | 106:36458fb9b5b7 | 144 | //extern float opt_vy; |
| NaotoMorita | 106:36458fb9b5b7 | 145 | //extern const float theta_px; |
| NaotoMorita | 106:36458fb9b5b7 | 146 | //extern const float theta_py; |
| NaotoMorita | 106:36458fb9b5b7 | 147 | //extern const int pixel_x; |
| NaotoMorita | 106:36458fb9b5b7 | 148 | //extern const int pixel_y; |
| cocorlow | 56:888379912f81 | 149 | |
| cocorlow | 56:888379912f81 | 150 | |
| NaotoMorita | 107:78e6f7bee68e | 151 | extern float scaledServoOut[2]; |
| NaotoMorita | 107:78e6f7bee68e | 152 | extern float servoOut[2]; |
| NaotoMorita | 107:78e6f7bee68e | 153 | extern float scaledMotorOut[2]; |
| NaotoMorita | 107:78e6f7bee68e | 154 | extern float motorOut[2]; |
| cocorlow | 56:888379912f81 | 155 | |
| cocorlow | 56:888379912f81 | 156 | extern int calibrationFlag; |
| cocorlow | 56:888379912f81 | 157 | extern int pos_tail; // 0:left 1:center 2:right |
| NaotoMorita | 90:0b1f62f7a83a | 158 | extern float agoffset[6]; |
| NaotoMorita | 61:c05353850017 | 159 | extern float magbiasMin[3]; |
| NaotoMorita | 61:c05353850017 | 160 | extern float magbiasMax[3]; |
| NaotoMorita | 70:9e7be21475f8 | 161 | extern float accMin[3]; |
| NaotoMorita | 70:9e7be21475f8 | 162 | extern float accMax[3]; |
| cocorlow | 56:888379912f81 | 163 | |
| osaka | 88:0fc5df2fddcb | 164 | extern float roll_offset; |
| osaka | 88:0fc5df2fddcb | 165 | extern float pitch_offset; |
| cocorlow | 56:888379912f81 | 166 | |
| cocorlow | 56:888379912f81 | 167 | // eepromのread writeのためのunionを定義 |
| cocorlow | 56:888379912f81 | 168 | extern const int eeprom_address; // EEPROMの3つの入力が全て+より |
| cocorlow | 56:888379912f81 | 169 | extern const int eeprom_pointeraddress; |
| cocorlow | 56:888379912f81 | 170 | |
| cocorlow | 56:888379912f81 | 171 | //// UsaPack |
| cocorlow | 56:888379912f81 | 172 | extern const int tail_address[3]; |
| cocorlow | 63:851e96f54a86 | 173 | extern const int time_address; |
| NaotoMorita | 73:be7a8b8188de | 174 | extern valuePack posValues; |
| NaotoMorita | 73:be7a8b8188de | 175 | extern updatePack updateValues; |
| cocorlow | 63:851e96f54a86 | 176 | extern Timer system_dt; |
| cocorlow | 56:888379912f81 | 177 | |
| cocorlow | 56:888379912f81 | 178 | // function |
| cocorlow | 56:888379912f81 | 179 | |
| cocorlow | 56:888379912f81 | 180 | // main.cpp |
| cocorlow | 56:888379912f81 | 181 | |
| cocorlow | 56:888379912f81 | 182 | // setup.cpp |
| cocorlow | 56:888379912f81 | 183 | extern void setup(); |
| cocorlow | 56:888379912f81 | 184 | extern void calibrate(); |
| NaotoMorita | 70:9e7be21475f8 | 185 | extern float accScaleCalibrate(int attNo); |
| osaka | 88:0fc5df2fddcb | 186 | extern void alignment(); |
| osaka | 88:0fc5df2fddcb | 187 | extern int n_ave; |
| osaka | 88:0fc5df2fddcb | 188 | extern float roll_sum; |
| osaka | 88:0fc5df2fddcb | 189 | extern float pitch_sum; |
| NaotoMorita | 104:f81befbc5ab7 | 190 | extern void mainloopCalibration(); |
| cocorlow | 56:888379912f81 | 191 | |
| cocorlow | 56:888379912f81 | 192 | // run.cpp |
| osaka | 87:981895e1d4f2 | 193 | extern int gpsitow; |
| osaka | 91:393b9ae62681 | 194 | extern bool prefligt_finished; |
| cocorlow | 56:888379912f81 | 195 | extern void run(); |
| cocorlow | 56:888379912f81 | 196 | |
| NaotoMorita | 104:f81befbc5ab7 | 197 | // preflight.cpp |
| NaotoMorita | 104:f81befbc5ab7 | 198 | extern void preflightCalibration(); |
| NaotoMorita | 104:f81befbc5ab7 | 199 | extern void preflightCheck(); |
| NaotoMorita | 104:f81befbc5ab7 | 200 | |
| osaka | 103:34e911b94440 | 201 | // sensor.cpp |
| cocorlow | 56:888379912f81 | 202 | extern void getIMUval(); |
| osaka | 103:34e911b94440 | 203 | extern void calcOpticalVel(); |
| cocorlow | 56:888379912f81 | 204 | |
| cocorlow | 56:888379912f81 | 205 | // servo.cpp |
| cocorlow | 56:888379912f81 | 206 | extern void calcServoOut(); |
| cocorlow | 56:888379912f81 | 207 | |
| NaotoMorita | 73:be7a8b8188de | 208 | // datatransfer.cpp |
| NaotoMorita | 73:be7a8b8188de | 209 | extern void send2center(); |
| cocorlow | 56:888379912f81 | 210 | extern void writeEEPROM(int address, unsigned int eeaddress, char *data, int size); |
| cocorlow | 56:888379912f81 | 211 | extern void readEEPROM(int address, unsigned int eeaddress, char *data, int size); |
| cocorlow | 56:888379912f81 | 212 | |
| cocorlow | 56:888379912f81 | 213 | // global.cpp |
| cocorlow | 56:888379912f81 | 214 | extern float mapfloat(float x, float in_min, float in_max, float out_min, float out_max); |
| osaka | 84:028bd650e8bc | 215 | extern void setDiag(Matrix& mat, float val); |
| cocorlow | 56:888379912f81 | 216 | |
| cocorlow | 56:888379912f81 | 217 | #endif |