HAPSRG / Mbed 2 deprecated HAPStail

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

Committer:
NaotoMorita
Date:
Tue Mar 01 06:53:06 2022 +0000
Revision:
104:f81befbc5ab7
Parent:
103:34e911b94440
Child:
106:36458fb9b5b7
debugging

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
cocorlow 56:888379912f81 5 // communication
NaotoMorita 58:a7947322db87 6 Serial pc(USBTX, USBRX);
cocorlow 56:888379912f81 7 I2C i2c(PB_9,PB_8); // sda, scl
NaotoMorita 73:be7a8b8188de 8 UsaPack tail(PG_14, PG_9, 115200); // log - tail
cocorlow 56:888379912f81 9 SBUS sbus(PD_5, PD_6);
cocorlow 56:888379912f81 10
cocorlow 56:888379912f81 11 // sensor
osaka 83:0a644de28415 12 LSM9DS1 lsm(i2c);
osaka 83:0a644de28415 13 LPS lps(i2c);
osaka 83:0a644de28415 14 //UsaPack sensor1(PC_10, PC_11, 115200);
osaka 83:0a644de28415 15 //UsaPack sensor2(PC_12, PD_2, 115200);
NaotoMorita 61:c05353850017 16 CalibrateMagneto magCalibrator;
cocorlow 56:888379912f81 17
cocorlow 56:888379912f81 18 // io
cocorlow 56:888379912f81 19 DigitalIn userButton(USER_BUTTON);
cocorlow 56:888379912f81 20 DigitalIn locdef1(PG_2);
cocorlow 56:888379912f81 21 DigitalIn locdef2(PG_3);
cocorlow 56:888379912f81 22
cocorlow 56:888379912f81 23 // control
osaka 83:0a644de28415 24 FastPWM servo(PE_9);
cocorlow 56:888379912f81 25 PID pitchPID(5.0, 0,0, PID_dt); // rad
cocorlow 56:888379912f81 26 PID pitchratePID(0.5, 0.0, 0.0, PID_dt); // rad/s
osaka 84:028bd650e8bc 27 solaESKF eskf;
NaotoMorita 79:aa2631950f46 28 int itowVEL_log = 0;
cocorlow 56:888379912f81 29
NaotoMorita 104:f81befbc5ab7 30 Timer _t;
cocorlow 56:888379912f81 31 int loop_count = 0;
cocorlow 56:888379912f81 32 float att_dt = 0.01f;
NaotoMorita 104:f81befbc5ab7 33 float tstart = 0.0f;
NaotoMorita 104:f81befbc5ab7 34 float tgps = 0.0f;
NaotoMorita 104:f81befbc5ab7 35 float theading = 0.0f;
cocorlow 56:888379912f81 36 float rc[16];
cocorlow 56:888379912f81 37
cocorlow 56:888379912f81 38 int16_t ax, ay, az;
cocorlow 56:888379912f81 39 int16_t gx, gy, gz;
cocorlow 56:888379912f81 40 float magval[3] = {1.0f, 0.0f, 0.0f};
cocorlow 56:888379912f81 41
cocorlow 63:851e96f54a86 42 // elevator
cocorlow 63:851e96f54a86 43 float de;
cocorlow 63:851e96f54a86 44 float deobj;
cocorlow 63:851e96f54a86 45
cocorlow 56:888379912f81 46 // position
osaka 83:0a644de28415 47 Matrix SensorAlignmentAG(3,3);
osaka 83:0a644de28415 48 Matrix SensorAlignmentMAG(3,3);
cocorlow 56:888379912f81 49 Vector3 rpy(0.0f, 0.0f, 0.0f); // x:roll y:pitch z:yaw
cocorlow 56:888379912f81 50 Vector3 acc;
NaotoMorita 71:62eb45ecffe9 51 Vector3 accref(0.0f, 0.0f, 0.98f);
cocorlow 56:888379912f81 52 Vector3 mag;
cocorlow 56:888379912f81 53 Vector3 magref(0.65f, 0.0f, 0.75f);
cocorlow 56:888379912f81 54 Vector3 gyro;
NaotoMorita 71:62eb45ecffe9 55 Vector3 vb;
osaka 85:0b14a2a600fc 56 Matrix euler(3,1);
osaka 83:0a644de28415 57 float palt;
osaka 83:0a644de28415 58 float palt0;
NaotoMorita 90:0b1f62f7a83a 59 bool gpsUpdateFlag = false;
osaka 84:028bd650e8bc 60 bool headingUpdateFlag = false;
osaka 91:393b9ae62681 61 bool prefligt_finished = false;
osaka 84:028bd650e8bc 62 float dynaccnorm2;
osaka 103:34e911b94440 63 float opt_vx;
osaka 103:34e911b94440 64 float opt_vy;
osaka 103:34e911b94440 65 const float theta_px = 42.0f * M_PI / 180.0f;
osaka 103:34e911b94440 66 const float theta_py = 42.0f * M_PI / 180.0f;
osaka 103:34e911b94440 67 const int pixel_x = 35;
osaka 103:34e911b94440 68 const int pixel_y = 35;
cocorlow 56:888379912f81 69
cocorlow 56:888379912f81 70 int out1, out2;
cocorlow 56:888379912f81 71 float scaledServoOut[1] = {0.0f};
cocorlow 56:888379912f81 72 float servoOut[1] = {1500.0f};
cocorlow 56:888379912f81 73
cocorlow 56:888379912f81 74 float val_thmg = 0.0f;
NaotoMorita 61:c05353850017 75 float sigma_thmg = 0.0f;
cocorlow 56:888379912f81 76 float th_mg = 0.0f;
cocorlow 56:888379912f81 77 float accnormerr = 0.0f;
NaotoMorita 61:c05353850017 78 float sigma_accnorm = 0.0f;
cocorlow 56:888379912f81 79
cocorlow 56:888379912f81 80 int calibrationFlag = 0;
cocorlow 56:888379912f81 81 int pos_tail = 0; // 0:left 1:center 2:right
NaotoMorita 90:0b1f62f7a83a 82 float agoffset[6] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
NaotoMorita 61:c05353850017 83 float magbiasMin[3] = {0.0f, 0.0f, 0.0f};
NaotoMorita 61:c05353850017 84 float magbiasMax[3] = {0.0f, 0.0f, 0.0f};
NaotoMorita 71:62eb45ecffe9 85 float accMin[3] = {-1.0f, -1.0f, -1.0f};
NaotoMorita 71:62eb45ecffe9 86 float accMax[3] = { 1.0f, 1.0f, 1.0f};
osaka 87:981895e1d4f2 87 int gpsitow = 0;
cocorlow 56:888379912f81 88
osaka 88:0fc5df2fddcb 89 float roll_offset = 0.0f;
osaka 88:0fc5df2fddcb 90 float pitch_offset = 0.0f;
cocorlow 56:888379912f81 91
cocorlow 56:888379912f81 92 // eepromのread writeのためのunionを定義
osaka 85:0b14a2a600fc 93 const int eeprom_address = 0xA0; // EEPROMの3つの入力が全て+より
cocorlow 56:888379912f81 94 const int eeprom_pointeraddress = 0;
cocorlow 56:888379912f81 95
cocorlow 56:888379912f81 96 // UsaPack
cocorlow 56:888379912f81 97 const int tail_address[3] = {1111, 2222, 3333};
cocorlow 63:851e96f54a86 98 const int time_address = 4444;
NaotoMorita 73:be7a8b8188de 99 valuePack posValues;
NaotoMorita 73:be7a8b8188de 100 updatePack updateValues;
cocorlow 63:851e96f54a86 101 Timer system_dt;
cocorlow 56:888379912f81 102
cocorlow 56:888379912f81 103 float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
cocorlow 56:888379912f81 104 {
cocorlow 56:888379912f81 105 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
osaka 84:028bd650e8bc 106 }
osaka 84:028bd650e8bc 107
osaka 84:028bd650e8bc 108 void setDiag(Matrix& mat, float val){
osaka 84:028bd650e8bc 109 for (int i = 1; i < mat.getCols()+1; i++){
osaka 84:028bd650e8bc 110 mat(i,i) = val;
osaka 84:028bd650e8bc 111 }
osaka 88:0fc5df2fddcb 112 }
osaka 88:0fc5df2fddcb 113
osaka 88:0fc5df2fddcb 114 //alignment
osaka 88:0fc5df2fddcb 115 int n_ave = 0;
osaka 88:0fc5df2fddcb 116 float roll_sum = 0.0f;
osaka 88:0fc5df2fddcb 117 float pitch_sum = 0.0f;