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:
Wed Aug 25 07:01:12 2021 +0000
Revision:
73:be7a8b8188de
Parent:
71:62eb45ecffe9
Child:
76:f6617891a867
centered correction

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 void run()
cocorlow 56:888379912f81 4 {
cocorlow 56:888379912f81 5 pc.printf("reading calibration value\r\n");
cocorlow 56:888379912f81 6 //キャリブレーション値を取得
cocorlow 56:888379912f81 7 U read_calib;
cocorlow 56:888379912f81 8 readEEPROM(eeprom_address, eeprom_pointeraddress, read_calib.c, N_EEPROM*4);
cocorlow 56:888379912f81 9 wait(3);
cocorlow 56:888379912f81 10 pos_tail = (int)read_calib.i[0];
NaotoMorita 61:c05353850017 11 agoffset[3] = float(read_calib.i[7]);
NaotoMorita 61:c05353850017 12 agoffset[4] = float(read_calib.i[8]);
NaotoMorita 61:c05353850017 13 agoffset[5] = float(read_calib.i[9]);
NaotoMorita 61:c05353850017 14 magbiasMin[0] = float(read_calib.i[1])/1000.0f;
NaotoMorita 61:c05353850017 15 magbiasMin[1] = float(read_calib.i[2])/1000.0f;
NaotoMorita 61:c05353850017 16 magbiasMin[2] = float(read_calib.i[3])/1000.0f;
NaotoMorita 61:c05353850017 17 magbiasMax[0] = float(read_calib.i[4])/1000.0f;
NaotoMorita 61:c05353850017 18 magbiasMax[1] = float(read_calib.i[5])/1000.0f;
NaotoMorita 61:c05353850017 19 magbiasMax[2] = float(read_calib.i[6])/1000.0f;
NaotoMorita 71:62eb45ecffe9 20 rpy_align.x = float(read_calib.i[10])/200000.0f;
NaotoMorita 71:62eb45ecffe9 21 rpy_align.y = float(read_calib.i[11])/200000.0f;
NaotoMorita 61:c05353850017 22 magCalibrator.setExtremes(magbiasMin,magbiasMax);
cocorlow 56:888379912f81 23 // tail_address[pos_tail] = (int)read_calib.i[10];
cocorlow 56:888379912f81 24
cocorlow 56:888379912f81 25 switch(pos_tail){
cocorlow 56:888379912f81 26 case 0:
cocorlow 56:888379912f81 27 pc.printf("This MBED is Located at Left \r\n");
cocorlow 56:888379912f81 28 break;
cocorlow 56:888379912f81 29 case 1:
cocorlow 56:888379912f81 30 pc.printf("This MBED is Located at Center \r\n");
cocorlow 56:888379912f81 31 break;
cocorlow 56:888379912f81 32 case 2:
cocorlow 56:888379912f81 33 pc.printf("This MBED is Located at Right \r\n");
cocorlow 56:888379912f81 34 break;
cocorlow 56:888379912f81 35 default: // error situation
cocorlow 56:888379912f81 36 pc.printf("error\r\n");
cocorlow 56:888379912f81 37 break;
cocorlow 56:888379912f81 38 }
cocorlow 56:888379912f81 39 pc.printf("tail_address : %d\r\n", tail_address[pos_tail]);
NaotoMorita 71:62eb45ecffe9 40 pc.printf("Alignment values are %f(pitch deg) %f(roll deg)\r\n",rpy_align.x*180.0f/M_PI,rpy_align.y*180.0f/M_PI);
NaotoMorita 69:0caaad87cf1d 41
NaotoMorita 71:62eb45ecffe9 42 wait(0.5);
NaotoMorita 69:0caaad87cf1d 43 Timer _t;
NaotoMorita 69:0caaad87cf1d 44 _t.start();
NaotoMorita 71:62eb45ecffe9 45 magCalibrator.setExtremes(magbiasMin,magbiasMax);
NaotoMorita 71:62eb45ecffe9 46 for(int i = 0; i < 1000; i++){
NaotoMorita 71:62eb45ecffe9 47 getIMUval();
NaotoMorita 71:62eb45ecffe9 48 }
NaotoMorita 71:62eb45ecffe9 49 ekf.defineQhat(rpy_align);
NaotoMorita 71:62eb45ecffe9 50 float sum2accnorm = 0;
NaotoMorita 71:62eb45ecffe9 51 float sumaccnorm = 0;
cocorlow 56:888379912f81 52 for(int i = 0; i < 1000; i++){
NaotoMorita 69:0caaad87cf1d 53 float tstart = _t.read();
cocorlow 56:888379912f81 54 getIMUval();
NaotoMorita 69:0caaad87cf1d 55 ekf.updateStaticAccMeasures(acc,accref);
NaotoMorita 71:62eb45ecffe9 56 ekf.updateGyroBiasConstraints(gyro);
NaotoMorita 71:62eb45ecffe9 57 ekf.fuseErr2Nominal();
NaotoMorita 71:62eb45ecffe9 58 ekf.resetBias();
NaotoMorita 71:62eb45ecffe9 59 //ekf.updateMagMeasures(mag);
NaotoMorita 69:0caaad87cf1d 60 ekf.computeAngles(rpy, rpy_align);
NaotoMorita 69:0caaad87cf1d 61 sumaccnorm += acc.Norm();
NaotoMorita 69:0caaad87cf1d 62 sum2accnorm += acc.Norm()*acc.Norm();
NaotoMorita 69:0caaad87cf1d 63 float tend = _t.read();
NaotoMorita 69:0caaad87cf1d 64 att_dt = (tend-tstart);
cocorlow 56:888379912f81 65 }
NaotoMorita 69:0caaad87cf1d 66 accref.z = sumaccnorm / 1000.0f;
NaotoMorita 73:be7a8b8188de 67
NaotoMorita 73:be7a8b8188de 68 tail.Subscribe(tail_address[pos_tail], &(updateValues));
cocorlow 56:888379912f81 69
cocorlow 56:888379912f81 70 LoopTicker PIDtick;
cocorlow 56:888379912f81 71 PIDtick.attach(calcServoOut,PID_dt);
cocorlow 56:888379912f81 72
cocorlow 56:888379912f81 73
cocorlow 56:888379912f81 74 while(1)
cocorlow 56:888379912f81 75 {
cocorlow 56:888379912f81 76 float tstart = _t.read();
cocorlow 56:888379912f81 77 //姿勢角を更新
cocorlow 56:888379912f81 78 getIMUval();
NaotoMorita 71:62eb45ecffe9 79 ekf.updateNominal(gyro,acc,accref,att_dt);
NaotoMorita 71:62eb45ecffe9 80 ekf.updateErrState(gyro,acc, att_dt);
NaotoMorita 71:62eb45ecffe9 81 if(obsCount == 50){
NaotoMorita 71:62eb45ecffe9 82 if(ekf.determinDynStatus(acc,accref)){
NaotoMorita 71:62eb45ecffe9 83 ekf.updateMeasures(gyro,acc,accref);
NaotoMorita 71:62eb45ecffe9 84 }else{
NaotoMorita 71:62eb45ecffe9 85 ekf.updateStaticMeasures(gyro,acc,accref);
NaotoMorita 71:62eb45ecffe9 86 }
NaotoMorita 71:62eb45ecffe9 87 obsCount = 0;
NaotoMorita 69:0caaad87cf1d 88 }else{
NaotoMorita 71:62eb45ecffe9 89 if(ekf.determinDynStatus(acc,accref)){
NaotoMorita 71:62eb45ecffe9 90 ekf.updateAccMeasures(acc,accref);
NaotoMorita 71:62eb45ecffe9 91 }else{
NaotoMorita 71:62eb45ecffe9 92 ekf.updateStaticAccMeasures(acc,accref);
NaotoMorita 71:62eb45ecffe9 93 }
NaotoMorita 71:62eb45ecffe9 94 obsCount += 1;
NaotoMorita 69:0caaad87cf1d 95 }
NaotoMorita 71:62eb45ecffe9 96
NaotoMorita 71:62eb45ecffe9 97 ekf.updateGyroBiasConstraints(gyro);
NaotoMorita 71:62eb45ecffe9 98 ekf.fuseErr2Nominal();
NaotoMorita 69:0caaad87cf1d 99 ekf.resetBias();
NaotoMorita 69:0caaad87cf1d 100 ekf.computeAngles(rpy, rpy_align);
NaotoMorita 71:62eb45ecffe9 101 ekf.computeVb(vb);
cocorlow 56:888379912f81 102 PIDtick.loop();
cocorlow 56:888379912f81 103
cocorlow 56:888379912f81 104 float tend = _t.read();
cocorlow 56:888379912f81 105 att_dt = (tend-tstart);
cocorlow 56:888379912f81 106 }
cocorlow 56:888379912f81 107 }