HAPSRG / Mbed 2 deprecated HAPStail

Dependencies:   mbed MatrixMath LPS25HB_I2C LSM9DS1 Matrix2 PIDcontroller LoopTicker SBUS_without_mainfile UsaPack solaESKF_wind Vector3 CalibrateMagneto FastPWM

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?

UserRevisionLine numberNew 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;