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@73:be7a8b8188de, 2021-08-25 (annotated)
- Committer:
- NaotoMorita
- Date:
- Wed Aug 25 07:01:12 2021 +0000
- Revision:
- 73:be7a8b8188de
- Parent:
- 71:62eb45ecffe9
- Child:
- 77:b06a5f8554f4
- Child:
- 79:aa2631950f46
centered correction
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" |
| cocorlow | 56:888379912f81 | 8 | #include "MPU6050.h" |
| cocorlow | 56:888379912f81 | 9 | #include "MAG3110.h" |
| NaotoMorita | 61:c05353850017 | 10 | #include "CalibrateMagneto.h" |
| cocorlow | 56:888379912f81 | 11 | #include "I2Cdev.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" |
| NaotoMorita | 71:62eb45ecffe9 | 16 | #include "ScErrStateEKF.hpp" |
| NaotoMorita | 70:9e7be21475f8 | 17 | #include "MedianFilter.hpp" |
| cocorlow | 56:888379912f81 | 18 | |
| cocorlow | 56:888379912f81 | 19 | #define MPU6050_PWR_MGMT_1 0x6B |
| cocorlow | 56:888379912f81 | 20 | #define MPU_ADDRESS 0x68 |
| cocorlow | 56:888379912f81 | 21 | #define M_PI 3.141592f |
| cocorlow | 56:888379912f81 | 22 | #define ACCEL_FSR MPU6050_ACCEL_FS_8 |
| cocorlow | 56:888379912f81 | 23 | #define ACCEL_SSF 4096.0f |
| cocorlow | 56:888379912f81 | 24 | #define GYRO_FSR MPU6050_GYRO_FS_250 |
| cocorlow | 56:888379912f81 | 25 | #define GYRO_SSF 131.0f |
| cocorlow | 56:888379912f81 | 26 | #define MPU6050_LPF MPU6050_DLPF_BW_256 |
| cocorlow | 56:888379912f81 | 27 | #define gyro_th 20.0f |
| cocorlow | 56:888379912f81 | 28 | #define PID_dt 0.015f |
| cocorlow | 56:888379912f81 | 29 | #define servoPwmMax 1800.0f |
| cocorlow | 56:888379912f81 | 30 | #define servoPwmMin 1200.0f |
| cocorlow | 56:888379912f81 | 31 | #define motorPwmMax 2000.0f |
| cocorlow | 56:888379912f81 | 32 | #define motorPwmMin 1100.0f |
| NaotoMorita | 71:62eb45ecffe9 | 33 | #define N_EEPROM 12 |
| cocorlow | 56:888379912f81 | 34 | |
| cocorlow | 56:888379912f81 | 35 | // struct union |
| cocorlow | 56:888379912f81 | 36 | union U |
| cocorlow | 56:888379912f81 | 37 | { |
| cocorlow | 56:888379912f81 | 38 | int i[N_EEPROM]; // 0: flag(>1で正常に書き込まれた状態) 1 ~ 3: 磁場の中心座標, 4: 磁場の半径、 5~7; mag, 8~10: acc bias |
| cocorlow | 56:888379912f81 | 39 | char c[N_EEPROM*4]; // floatはcharの4倍 |
| cocorlow | 56:888379912f81 | 40 | }; |
| cocorlow | 56:888379912f81 | 41 | |
| cocorlow | 56:888379912f81 | 42 | struct valuePack |
| cocorlow | 56:888379912f81 | 43 | { |
| cocorlow | 63:851e96f54a86 | 44 | int day; |
| cocorlow | 63:851e96f54a86 | 45 | int ms; |
| NaotoMorita | 73:be7a8b8188de | 46 | float gyroBias[3]; |
| NaotoMorita | 73:be7a8b8188de | 47 | float gyroBiasCov[6]; |
| cocorlow | 56:888379912f81 | 48 | float acc[3]; |
| cocorlow | 56:888379912f81 | 49 | float gyro[3]; |
| cocorlow | 56:888379912f81 | 50 | float mag[3]; |
| cocorlow | 56:888379912f81 | 51 | float rpy[3]; |
| cocorlow | 63:851e96f54a86 | 52 | float de; |
| cocorlow | 63:851e96f54a86 | 53 | float deobj; |
| NaotoMorita | 73:be7a8b8188de | 54 | float rc[5]; |
| cocorlow | 63:851e96f54a86 | 55 | }; |
| cocorlow | 63:851e96f54a86 | 56 | |
| NaotoMorita | 73:be7a8b8188de | 57 | struct updatePack |
| cocorlow | 63:851e96f54a86 | 58 | { |
| cocorlow | 63:851e96f54a86 | 59 | int day; |
| cocorlow | 63:851e96f54a86 | 60 | int ms; |
| NaotoMorita | 73:be7a8b8188de | 61 | float gyroBias[3]; |
| NaotoMorita | 73:be7a8b8188de | 62 | float de_command; |
| cocorlow | 56:888379912f81 | 63 | }; |
| cocorlow | 56:888379912f81 | 64 | |
| cocorlow | 56:888379912f81 | 65 | // var |
| cocorlow | 56:888379912f81 | 66 | |
| cocorlow | 56:888379912f81 | 67 | // communication |
| cocorlow | 56:888379912f81 | 68 | extern Serial pc; |
| cocorlow | 56:888379912f81 | 69 | extern I2C i2c; // sda, scl |
| cocorlow | 56:888379912f81 | 70 | extern UsaPack tail; // log - tail |
| cocorlow | 56:888379912f81 | 71 | extern SBUS sbus; |
| cocorlow | 56:888379912f81 | 72 | |
| cocorlow | 56:888379912f81 | 73 | // sensor |
| cocorlow | 56:888379912f81 | 74 | extern MPU6050 accelgyro; |
| cocorlow | 56:888379912f81 | 75 | extern MAG3110 mag_sensor; |
| NaotoMorita | 61:c05353850017 | 76 | extern CalibrateMagneto magCalibrator; |
| cocorlow | 56:888379912f81 | 77 | |
| cocorlow | 56:888379912f81 | 78 | // io |
| cocorlow | 56:888379912f81 | 79 | extern DigitalIn userButton; |
| cocorlow | 56:888379912f81 | 80 | extern DigitalIn locdef1; |
| cocorlow | 56:888379912f81 | 81 | extern DigitalIn locdef2; |
| cocorlow | 56:888379912f81 | 82 | |
| cocorlow | 56:888379912f81 | 83 | // control |
| cocorlow | 56:888379912f81 | 84 | extern FastPWM servo; |
| cocorlow | 56:888379912f81 | 85 | extern PID pitchPID; // rad |
| cocorlow | 56:888379912f81 | 86 | extern PID pitchratePID;// rad/s |
| NaotoMorita | 71:62eb45ecffe9 | 87 | extern ScErrStateEKF ekf; // EKF class |
| NaotoMorita | 71:62eb45ecffe9 | 88 | extern int obsCount; |
| cocorlow | 56:888379912f81 | 89 | |
| cocorlow | 56:888379912f81 | 90 | extern int loop_count; |
| cocorlow | 56:888379912f81 | 91 | extern float att_dt; |
| cocorlow | 56:888379912f81 | 92 | extern float rc[16]; |
| cocorlow | 56:888379912f81 | 93 | |
| cocorlow | 56:888379912f81 | 94 | extern int16_t ax, ay, az; |
| cocorlow | 56:888379912f81 | 95 | extern int16_t gx, gy, gz; |
| cocorlow | 56:888379912f81 | 96 | extern MotionSensorDataUnits mdata; |
| cocorlow | 56:888379912f81 | 97 | extern float magval[3]; |
| cocorlow | 56:888379912f81 | 98 | |
| cocorlow | 63:851e96f54a86 | 99 | // elevator |
| cocorlow | 63:851e96f54a86 | 100 | extern float de; |
| cocorlow | 63:851e96f54a86 | 101 | extern float deobj; |
| cocorlow | 63:851e96f54a86 | 102 | |
| cocorlow | 56:888379912f81 | 103 | // position |
| cocorlow | 56:888379912f81 | 104 | extern Vector3 rpy; // x:roll y:pitch z:yaw |
| cocorlow | 56:888379912f81 | 105 | extern Vector3 acc; |
| cocorlow | 56:888379912f81 | 106 | extern Vector3 accref; |
| cocorlow | 56:888379912f81 | 107 | extern Vector3 mag; |
| cocorlow | 56:888379912f81 | 108 | extern Vector3 magref; |
| cocorlow | 56:888379912f81 | 109 | extern Vector3 gyro; |
| NaotoMorita | 71:62eb45ecffe9 | 110 | extern Vector3 vb; |
| NaotoMorita | 70:9e7be21475f8 | 111 | extern MedianFilter accMedian; |
| NaotoMorita | 70:9e7be21475f8 | 112 | extern MedianFilter gyroMedian; |
| NaotoMorita | 70:9e7be21475f8 | 113 | extern MedianFilter magMedian; |
| cocorlow | 56:888379912f81 | 114 | |
| cocorlow | 56:888379912f81 | 115 | |
| cocorlow | 56:888379912f81 | 116 | extern float scaledServoOut[1]; |
| cocorlow | 56:888379912f81 | 117 | extern float servoOut[1]; |
| cocorlow | 56:888379912f81 | 118 | |
| cocorlow | 56:888379912f81 | 119 | |
| cocorlow | 56:888379912f81 | 120 | extern float val_thmg; |
| NaotoMorita | 61:c05353850017 | 121 | extern float sigma_thmg; |
| cocorlow | 56:888379912f81 | 122 | extern float th_mg; |
| cocorlow | 56:888379912f81 | 123 | extern float accnormerr; |
| NaotoMorita | 61:c05353850017 | 124 | extern float sigma_accnorm; |
| NaotoMorita | 61:c05353850017 | 125 | |
| cocorlow | 56:888379912f81 | 126 | extern int calibrationFlag; |
| cocorlow | 56:888379912f81 | 127 | extern int pos_tail; // 0:left 1:center 2:right |
| cocorlow | 56:888379912f81 | 128 | extern int agoffset[6]; |
| NaotoMorita | 61:c05353850017 | 129 | extern float magbiasMin[3]; |
| NaotoMorita | 61:c05353850017 | 130 | extern float magbiasMax[3]; |
| NaotoMorita | 70:9e7be21475f8 | 131 | extern float accMin[3]; |
| NaotoMorita | 70:9e7be21475f8 | 132 | extern float accMax[3]; |
| cocorlow | 56:888379912f81 | 133 | |
| cocorlow | 56:888379912f81 | 134 | extern Vector3 rpy_align; |
| cocorlow | 56:888379912f81 | 135 | |
| cocorlow | 56:888379912f81 | 136 | // eepromのread writeのためのunionを定義 |
| cocorlow | 56:888379912f81 | 137 | extern const int eeprom_address; // EEPROMの3つの入力が全て+より |
| cocorlow | 56:888379912f81 | 138 | extern const int eeprom_pointeraddress; |
| cocorlow | 56:888379912f81 | 139 | |
| cocorlow | 56:888379912f81 | 140 | //// UsaPack |
| cocorlow | 56:888379912f81 | 141 | extern const int tail_address[3]; |
| cocorlow | 63:851e96f54a86 | 142 | extern const int time_address; |
| NaotoMorita | 73:be7a8b8188de | 143 | extern valuePack posValues; |
| NaotoMorita | 73:be7a8b8188de | 144 | extern updatePack updateValues; |
| cocorlow | 63:851e96f54a86 | 145 | extern Timer system_dt; |
| cocorlow | 56:888379912f81 | 146 | |
| cocorlow | 56:888379912f81 | 147 | // function |
| cocorlow | 56:888379912f81 | 148 | |
| cocorlow | 56:888379912f81 | 149 | // main.cpp |
| cocorlow | 56:888379912f81 | 150 | |
| cocorlow | 56:888379912f81 | 151 | // setup.cpp |
| cocorlow | 56:888379912f81 | 152 | extern void setup(); |
| cocorlow | 56:888379912f81 | 153 | extern void calibrate(); |
| NaotoMorita | 70:9e7be21475f8 | 154 | extern float accScaleCalibrate(int attNo); |
| cocorlow | 56:888379912f81 | 155 | |
| cocorlow | 56:888379912f81 | 156 | // run.cpp |
| cocorlow | 56:888379912f81 | 157 | extern void run(); |
| cocorlow | 56:888379912f81 | 158 | |
| cocorlow | 56:888379912f81 | 159 | // imu.cpp |
| cocorlow | 56:888379912f81 | 160 | extern void getIMUval(); |
| cocorlow | 56:888379912f81 | 161 | |
| cocorlow | 56:888379912f81 | 162 | // servo.cpp |
| cocorlow | 56:888379912f81 | 163 | extern void calcServoOut(); |
| cocorlow | 56:888379912f81 | 164 | |
| NaotoMorita | 73:be7a8b8188de | 165 | // datatransfer.cpp |
| NaotoMorita | 73:be7a8b8188de | 166 | extern void send2center(); |
| cocorlow | 56:888379912f81 | 167 | extern void writeEEPROM(int address, unsigned int eeaddress, char *data, int size); |
| cocorlow | 56:888379912f81 | 168 | extern void readEEPROM(int address, unsigned int eeaddress, char *data, int size); |
| cocorlow | 56:888379912f81 | 169 | |
| cocorlow | 56:888379912f81 | 170 | // global.cpp |
| cocorlow | 56:888379912f81 | 171 | extern float mapfloat(float x, float in_min, float in_max, float out_min, float out_max); |
| cocorlow | 56:888379912f81 | 172 | |
| cocorlow | 56:888379912f81 | 173 | #endif |