solaESKF_EIGEN

Dependencies:   mbed LPS25HB_I2C LSM9DS1 PIDcontroller LoopTicker GPSUBX_UART_Eigen SBUS_without_mainfile MedianFilter Eigen UsaPack solaESKF_Eigen Vector3 CalibrateMagneto FastPWM

Committer:
cocorlow
Date:
Mon Dec 06 08:26:16 2021 +0000
Revision:
139:b378528c05f2
Parent:
137:240588882ae2
Child:
140:53dbdb207542
Eigen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cocorlow 56:888379912f81 1 #include "global.hpp"
cocorlow 56:888379912f81 2
NaotoMorita 67:41fcdfb7cc5a 3
cocorlow 56:888379912f81 4 // var
cocorlow 56:888379912f81 5
cocorlow 56:888379912f81 6 // communication
NaotoMorita 82:c183c29d2427 7 UsaPack pc(USBTX, USBRX, 115200); // log - tail
NaotoMorita 132:896ad37b534b 8 UsaPack sd(PG_14,PG_9, 115200);
NaotoMorita 134:d57c6b2a706b 9 UsaPack twelite(PD_1,PD_0,38400);
cocorlow 56:888379912f81 10 // io
cocorlow 56:888379912f81 11 DigitalIn userButton(USER_BUTTON);
NaotoMorita 70:99f974d8960e 12 SBUS sbus(PD_5, PD_6);
osaka 88:be349faa1976 13 I2C i2c(PB_9, PB_8);
osaka 88:be349faa1976 14 LSM9DS1 lsm(i2c);
osaka 88:be349faa1976 15 LPS lps(i2c);
NaotoMorita 99:98b892ca70ec 16 GPSUBX_UART gps(PF_7, PE_7);
NaotoMorita 119:a21e283730d1 17 CalibrateMagneto magCalibrator;
NaotoMorita 102:1c77ff6e2a85 18 float magres = 0.0f;
cocorlow 56:888379912f81 19 // control
NaotoMorita 94:579e875a4244 20 Timer _t;
NaotoMorita 70:99f974d8960e 21 FastPWM servoRight(PE_9);
NaotoMorita 70:99f974d8960e 22 FastPWM servoLeft(PE_11);
NaotoMorita 70:99f974d8960e 23 FastPWM servoThrust(PE_13);
NaotoMorita 74:f67062e7813e 24 PID pitchPID(10.0f,0.0f,0.0f,PID_dt); //rad
NaotoMorita 74:f67062e7813e 25 PID pitchratePID(1.0f, 0.0f, 0.0f, PID_dt);//rad/s
NaotoMorita 74:f67062e7813e 26 PID rollPID(5.0f,0.0f,0.0f,PID_dt);
NaotoMorita 94:579e875a4244 27 PID rollratePID(0.05f, 0.0, 0.0, PID_dt);//rad/s
cocorlow 139:b378528c05f2 28 //solaESKF eskf; // ESKF class
NaotoMorita 76:7fd3ac1afe3e 29 int obsCount = 0;
cocorlow 139:b378528c05f2 30 //Autopilot autopilot;
osaka 109:eb255fc4462b 31 float roll_obj;
osaka 109:eb255fc4462b 32 float pitch_obj;
osaka 121:2523eef96b36 33 float dT_obj;
cocorlow 56:888379912f81 34
NaotoMorita 70:99f974d8960e 35 float rc[16];
cocorlow 56:888379912f81 36 int loop_count = 0;
cocorlow 56:888379912f81 37 float att_dt = 0.01f;
cocorlow 56:888379912f81 38 // position
cocorlow 139:b378528c05f2 39 Matrix3f SensorAlignmentAG(3,3);
cocorlow 139:b378528c05f2 40 Matrix3f SensorAlignmentMAG(3,3);
cocorlow 139:b378528c05f2 41 Vector3f euler(3,1);
cocorlow 139:b378528c05f2 42 Vector3f rpy(0.0f, 0.0f, 0.0f); // x:roll y:pitch z:yaw
cocorlow 139:b378528c05f2 43 Vector3f acc;
cocorlow 139:b378528c05f2 44 Vector3f accref(0.0f, 0.0f, 9.8f);
cocorlow 139:b378528c05f2 45 Vector3f mag;
cocorlow 139:b378528c05f2 46 Vector3f magref(0.0f, 0.0f, 0.0f);
cocorlow 139:b378528c05f2 47 Vector3f gyro;
cocorlow 139:b378528c05f2 48 Vector3f vi;
cocorlow 139:b378528c05f2 49 Vector3f pi;
NaotoMorita 92:00460f6df439 50 float palt;
NaotoMorita 98:bdaa6bbfb1d9 51 float palt0;
NaotoMorita 129:a76be8380bb2 52 float dynaccnorm2;
NaotoMorita 106:2d854e92cebb 53 int itow_status = 0;
NaotoMorita 100:7589b663d462 54 bool gpsUpdateFlag = false;
NaotoMorita 106:2d854e92cebb 55 bool gpsLlh0Fixed = false;
NaotoMorita 127:d73a6233ee4b 56 bool headingUpdateFlag = false;
NaotoMorita 77:2bf856e3eca4 57
NaotoMorita 73:84ffa0166e6c 58 float de = 0.0f;
NaotoMorita 73:84ffa0166e6c 59 float da = 0.0f;
NaotoMorita 73:84ffa0166e6c 60 float dT = 0.0f;
NaotoMorita 70:99f974d8960e 61 MedianFilter accMedian(3);
NaotoMorita 70:99f974d8960e 62 MedianFilter gyroMedian(3);
NaotoMorita 70:99f974d8960e 63 MedianFilter magMedian(3);
NaotoMorita 72:267e2cfddb0b 64
NaotoMorita 70:99f974d8960e 65 float scaledServoOut[2]= {0.0f,0.0f};
NaotoMorita 70:99f974d8960e 66 float scaledMotorOut[1]= {-1.0f};
NaotoMorita 63:9c4973a98600 67 float servoOut[2] = {1500.0f,1500.0f};
NaotoMorita 70:99f974d8960e 68 float motorOut[1] = {1100.0f};
cocorlow 56:888379912f81 69
cocorlow 56:888379912f81 70 int calibrationFlag = 0;
NaotoMorita 93:b827f78a717a 71 float agoffset[6] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
NaotoMorita 76:7fd3ac1afe3e 72
NaotoMorita 76:7fd3ac1afe3e 73 float magbias[4] = {-134.817047, 127.833481, -152.631836, 44.508556};
NaotoMorita 75:a505b9896da1 74 float magbiasMin[3] = {-174.831711, 93.465691, -188.617172};
NaotoMorita 75:a505b9896da1 75 float magbiasMax[3] = {-110.413963, 162.321548, -122.566071};
NaotoMorita 75:a505b9896da1 76 float accMin[3] = {-0.963692, -0.974141, -1.012899};
NaotoMorita 75:a505b9896da1 77 float accMax[3] = { 1.025954, 0.974748, 0.987155};
cocorlow 56:888379912f81 78
cocorlow 139:b378528c05f2 79 Vector3f rpy_align( 0.0f*M_PI_F/180.0f, 5.0f*M_PI_F/180.0f, 0.0f*M_PI_F/180.0f);
cocorlow 56:888379912f81 80
cocorlow 56:888379912f81 81
cocorlow 56:888379912f81 82 // UsaPack
NaotoMorita 73:84ffa0166e6c 83 valuePack vp;
NaotoMorita 83:e69ab831031c 84 sendPack sp;
NaotoMorita 132:896ad37b534b 85 logPack lp;
NaotoMorita 134:d57c6b2a706b 86 telemetryPack tp;
NaotoMorita 73:84ffa0166e6c 87
NaotoMorita 73:84ffa0166e6c 88 // HIL
osaka 137:240588882ae2 89 bool hilFlag = true;
NaotoMorita 76:7fd3ac1afe3e 90 bool serialControlSource = false;
NaotoMorita 76:7fd3ac1afe3e 91 bool serialParamSource = false;
NaotoMorita 76:7fd3ac1afe3e 92 int checkParamSerial[5] = {0,0,0,0,0};
cocorlow 56:888379912f81 93
cocorlow 56:888379912f81 94 float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
cocorlow 56:888379912f81 95 {
cocorlow 56:888379912f81 96 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
NaotoMorita 67:41fcdfb7cc5a 97 }
NaotoMorita 93:b827f78a717a 98
cocorlow 139:b378528c05f2 99 //void setDiag(Matrix3f& mat, float val){
cocorlow 139:b378528c05f2 100 // for (int i = 1; i < mat.getCols()+1; i++){
cocorlow 139:b378528c05f2 101 // mat(i,i) = val;
cocorlow 139:b378528c05f2 102 // }
cocorlow 139:b378528c05f2 103 //}
cocorlow 139:b378528c05f2 104 //
cocorlow 139:b378528c05f2 105 //void setBlockDiag(MatrixXf& mat, float val,int startIndex, int endIndex){
cocorlow 139:b378528c05f2 106 // for (int i = startIndex; i < endIndex+1; i++){
cocorlow 139:b378528c05f2 107 // mat(i,i) = val;
cocorlow 139:b378528c05f2 108 // }
cocorlow 139:b378528c05f2 109 //}