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.cpp@125:0e4f65eda4b1, 2022-05-20 (annotated)
- Committer:
- osaka
- Date:
- Fri May 20 10:00:28 2022 +0000
- Revision:
- 125:0e4f65eda4b1
- Parent:
- 123:0a74e696f7a6
- Child:
- 127:839ae718713b
hilflag
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cocorlow | 56:888379912f81 | 1 | #include "global.hpp" |
| cocorlow | 56:888379912f81 | 2 | |
| cocorlow | 56:888379912f81 | 3 | // var |
| cocorlow | 56:888379912f81 | 4 | |
| osaka | 125:0e4f65eda4b1 | 5 | bool hilFlag = false; |
| NaotoMorita | 120:9f4725deb5a6 | 6 | |
| cocorlow | 56:888379912f81 | 7 | // communication |
| NaotoMorita | 118:97ffe77b6f38 | 8 | UsaPack pc(USBTX, USBRX, 115200); |
| cocorlow | 56:888379912f81 | 9 | I2C i2c(PB_9,PB_8); // sda, scl |
| NaotoMorita | 73:be7a8b8188de | 10 | UsaPack tail(PG_14, PG_9, 115200); // log - tail |
| cocorlow | 56:888379912f81 | 11 | SBUS sbus(PD_5, PD_6); |
| cocorlow | 56:888379912f81 | 12 | |
| cocorlow | 56:888379912f81 | 13 | // sensor |
| osaka | 83:0a644de28415 | 14 | LSM9DS1 lsm(i2c); |
| osaka | 83:0a644de28415 | 15 | LPS lps(i2c); |
| osaka | 83:0a644de28415 | 16 | //UsaPack sensor1(PC_10, PC_11, 115200); |
| osaka | 83:0a644de28415 | 17 | //UsaPack sensor2(PC_12, PD_2, 115200); |
| NaotoMorita | 61:c05353850017 | 18 | CalibrateMagneto magCalibrator; |
| osaka | 123:0a74e696f7a6 | 19 | AnalogIn ain_v(PA_3); |
| osaka | 123:0a74e696f7a6 | 20 | AnalogIn ain_i(PC_0); |
| cocorlow | 56:888379912f81 | 21 | |
| cocorlow | 56:888379912f81 | 22 | // io |
| cocorlow | 56:888379912f81 | 23 | DigitalIn userButton(USER_BUTTON); |
| cocorlow | 56:888379912f81 | 24 | DigitalIn locdef1(PG_2); |
| cocorlow | 56:888379912f81 | 25 | DigitalIn locdef2(PG_3); |
| cocorlow | 56:888379912f81 | 26 | |
| cocorlow | 56:888379912f81 | 27 | // control |
| osaka | 83:0a644de28415 | 28 | FastPWM servo(PE_9); |
| NaotoMorita | 107:78e6f7bee68e | 29 | FastPWM rudServo(PE_11); |
| NaotoMorita | 107:78e6f7bee68e | 30 | FastPWM motor1(PE_13); |
| NaotoMorita | 107:78e6f7bee68e | 31 | FastPWM motor2(PA_6); |
| cocorlow | 56:888379912f81 | 32 | PID pitchPID(5.0, 0,0, PID_dt); // rad |
| cocorlow | 56:888379912f81 | 33 | PID pitchratePID(0.5, 0.0, 0.0, PID_dt); // rad/s |
| NaotoMorita | 109:27ae949bc38e | 34 | PID yawratePID(1.0, 0.0, 0.0, PID_dt); // rad/s |
| osaka | 84:028bd650e8bc | 35 | solaESKF eskf; |
| NaotoMorita | 79:aa2631950f46 | 36 | int itowVEL_log = 0; |
| cocorlow | 56:888379912f81 | 37 | |
| NaotoMorita | 104:f81befbc5ab7 | 38 | Timer _t; |
| cocorlow | 56:888379912f81 | 39 | int loop_count = 0; |
| cocorlow | 56:888379912f81 | 40 | float att_dt = 0.01f; |
| NaotoMorita | 104:f81befbc5ab7 | 41 | float tstart = 0.0f; |
| NaotoMorita | 104:f81befbc5ab7 | 42 | float tgps = 0.0f; |
| NaotoMorita | 106:36458fb9b5b7 | 43 | float tsensors = 0.0f; |
| cocorlow | 56:888379912f81 | 44 | float rc[16]; |
| cocorlow | 56:888379912f81 | 45 | |
| cocorlow | 56:888379912f81 | 46 | int16_t ax, ay, az; |
| cocorlow | 56:888379912f81 | 47 | int16_t gx, gy, gz; |
| cocorlow | 56:888379912f81 | 48 | float magval[3] = {1.0f, 0.0f, 0.0f}; |
| cocorlow | 56:888379912f81 | 49 | |
| osaka | 123:0a74e696f7a6 | 50 | float voltage = 0.0f; |
| osaka | 123:0a74e696f7a6 | 51 | float current = 0.0f; |
| osaka | 123:0a74e696f7a6 | 52 | |
| cocorlow | 63:851e96f54a86 | 53 | // elevator |
| cocorlow | 63:851e96f54a86 | 54 | float de; |
| cocorlow | 63:851e96f54a86 | 55 | float deobj; |
| NaotoMorita | 107:78e6f7bee68e | 56 | float dr; |
| NaotoMorita | 107:78e6f7bee68e | 57 | float drobj; |
| NaotoMorita | 118:97ffe77b6f38 | 58 | float dTl; |
| NaotoMorita | 118:97ffe77b6f38 | 59 | float dTr; |
| cocorlow | 63:851e96f54a86 | 60 | |
| cocorlow | 56:888379912f81 | 61 | // position |
| osaka | 83:0a644de28415 | 62 | Matrix SensorAlignmentAG(3,3); |
| osaka | 83:0a644de28415 | 63 | Matrix SensorAlignmentMAG(3,3); |
| cocorlow | 56:888379912f81 | 64 | Vector3 rpy(0.0f, 0.0f, 0.0f); // x:roll y:pitch z:yaw |
| cocorlow | 56:888379912f81 | 65 | Vector3 acc; |
| NaotoMorita | 71:62eb45ecffe9 | 66 | Vector3 accref(0.0f, 0.0f, 0.98f); |
| cocorlow | 56:888379912f81 | 67 | Vector3 mag; |
| cocorlow | 56:888379912f81 | 68 | Vector3 magref(0.65f, 0.0f, 0.75f); |
| cocorlow | 56:888379912f81 | 69 | Vector3 gyro; |
| NaotoMorita | 120:9f4725deb5a6 | 70 | Vector3 vi; |
| NaotoMorita | 120:9f4725deb5a6 | 71 | Vector3 pi; |
| osaka | 85:0b14a2a600fc | 72 | Matrix euler(3,1); |
| osaka | 83:0a644de28415 | 73 | float palt; |
| osaka | 83:0a644de28415 | 74 | float palt0; |
| NaotoMorita | 90:0b1f62f7a83a | 75 | bool gpsUpdateFlag = false; |
| NaotoMorita | 106:36458fb9b5b7 | 76 | bool sensorUpdateFlag = false; |
| NaotoMorita | 106:36458fb9b5b7 | 77 | int sensorUpdateID = 1; |
| osaka | 91:393b9ae62681 | 78 | bool prefligt_finished = false; |
| osaka | 84:028bd650e8bc | 79 | float dynaccnorm2; |
| NaotoMorita | 106:36458fb9b5b7 | 80 | //float opt_vx; |
| NaotoMorita | 106:36458fb9b5b7 | 81 | //float opt_vy; |
| NaotoMorita | 106:36458fb9b5b7 | 82 | //const float theta_px = 42.0f * M_PI / 180.0f; |
| NaotoMorita | 106:36458fb9b5b7 | 83 | //const float theta_py = 42.0f * M_PI / 180.0f; |
| NaotoMorita | 106:36458fb9b5b7 | 84 | //const int pixel_x = 35; |
| NaotoMorita | 106:36458fb9b5b7 | 85 | //const int pixel_y = 35; |
| cocorlow | 56:888379912f81 | 86 | |
| NaotoMorita | 107:78e6f7bee68e | 87 | float scaledServoOut[2] = {0.0f,0.0f}; |
| NaotoMorita | 107:78e6f7bee68e | 88 | float servoOut[2] = {1500.0f,1500.0f}; |
| NaotoMorita | 107:78e6f7bee68e | 89 | |
| NaotoMorita | 107:78e6f7bee68e | 90 | float scaledMotorOut[2] = {-1.0f,-1.0f}; |
| NaotoMorita | 107:78e6f7bee68e | 91 | float motorOut[2] = {1000.0f,1000.0f}; |
| cocorlow | 56:888379912f81 | 92 | |
| cocorlow | 56:888379912f81 | 93 | int calibrationFlag = 0; |
| cocorlow | 56:888379912f81 | 94 | int pos_tail = 0; // 0:left 1:center 2:right |
| NaotoMorita | 90:0b1f62f7a83a | 95 | float agoffset[6] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; |
| NaotoMorita | 61:c05353850017 | 96 | float magbiasMin[3] = {0.0f, 0.0f, 0.0f}; |
| NaotoMorita | 61:c05353850017 | 97 | float magbiasMax[3] = {0.0f, 0.0f, 0.0f}; |
| NaotoMorita | 71:62eb45ecffe9 | 98 | float accMin[3] = {-1.0f, -1.0f, -1.0f}; |
| NaotoMorita | 71:62eb45ecffe9 | 99 | float accMax[3] = { 1.0f, 1.0f, 1.0f}; |
| osaka | 87:981895e1d4f2 | 100 | int gpsitow = 0; |
| cocorlow | 56:888379912f81 | 101 | |
| osaka | 88:0fc5df2fddcb | 102 | float roll_offset = 0.0f; |
| osaka | 88:0fc5df2fddcb | 103 | float pitch_offset = 0.0f; |
| cocorlow | 56:888379912f81 | 104 | |
| cocorlow | 56:888379912f81 | 105 | // eepromのread writeのためのunionを定義 |
| osaka | 85:0b14a2a600fc | 106 | const int eeprom_address = 0xA0; // EEPROMの3つの入力が全て+より |
| cocorlow | 56:888379912f81 | 107 | const int eeprom_pointeraddress = 0; |
| cocorlow | 56:888379912f81 | 108 | |
| cocorlow | 56:888379912f81 | 109 | // UsaPack |
| cocorlow | 56:888379912f81 | 110 | const int tail_address[3] = {1111, 2222, 3333}; |
| cocorlow | 63:851e96f54a86 | 111 | const int time_address = 4444; |
| NaotoMorita | 73:be7a8b8188de | 112 | valuePack posValues; |
| NaotoMorita | 73:be7a8b8188de | 113 | updatePack updateValues; |
| NaotoMorita | 118:97ffe77b6f38 | 114 | receivePack rp; |
| NaotoMorita | 118:97ffe77b6f38 | 115 | sendPack sp; |
| cocorlow | 63:851e96f54a86 | 116 | Timer system_dt; |
| cocorlow | 56:888379912f81 | 117 | |
| cocorlow | 56:888379912f81 | 118 | float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) |
| cocorlow | 56:888379912f81 | 119 | { |
| cocorlow | 56:888379912f81 | 120 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
| osaka | 84:028bd650e8bc | 121 | } |
| osaka | 84:028bd650e8bc | 122 | |
| osaka | 84:028bd650e8bc | 123 | void setDiag(Matrix& mat, float val){ |
| osaka | 84:028bd650e8bc | 124 | for (int i = 1; i < mat.getCols()+1; i++){ |
| osaka | 84:028bd650e8bc | 125 | mat(i,i) = val; |
| osaka | 84:028bd650e8bc | 126 | } |
| osaka | 88:0fc5df2fddcb | 127 | } |
| osaka | 88:0fc5df2fddcb | 128 | |
| osaka | 88:0fc5df2fddcb | 129 | //alignment |
| osaka | 88:0fc5df2fddcb | 130 | int n_ave = 0; |
| osaka | 88:0fc5df2fddcb | 131 | float roll_sum = 0.0f; |
| osaka | 88:0fc5df2fddcb | 132 | float pitch_sum = 0.0f; |