Eigen Revision

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

Committer:
NaotoMorita
Date:
Tue Oct 26 05:36:18 2021 +0000
Revision:
90:96c2b0ed4b96
Parent:
87:89bbbcdb667b
Child:
92:00460f6df439
solaeskf compiled

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 // 割り込まれた時点での出力(computeの結果)を返す関数
cocorlow 56:888379912f81 4 void calcServoOut()
cocorlow 56:888379912f81 5 {
NaotoMorita 83:e69ab831031c 6 // sbusデータの読み込み
NaotoMorita 83:e69ab831031c 7 for (int i =0 ; i < 16;i ++){
NaotoMorita 83:e69ab831031c 8 rc[i] = 0.65f * mapfloat(float(sbus.getData(i)),368,1680,-1,1) + (1.0f - 0.65f) * rc[i]; // mapped input
NaotoMorita 70:99f974d8960e 9 }
NaotoMorita 90:96c2b0ed4b96 10
NaotoMorita 73:84ffa0166e6c 11
NaotoMorita 90:96c2b0ed4b96 12 //姿勢角の所得
NaotoMorita 90:96c2b0ed4b96 13 Matrix euler = eskf.computeAngles();
NaotoMorita 90:96c2b0ed4b96 14 rpy.x = euler(1,1);
NaotoMorita 90:96c2b0ed4b96 15 rpy.y = euler(2,1);
NaotoMorita 90:96c2b0ed4b96 16 rpy.z = euler(3,1);
NaotoMorita 90:96c2b0ed4b96 17
NaotoMorita 90:96c2b0ed4b96 18 //PIDへの状態量のセット
NaotoMorita 70:99f974d8960e 19 pitchPID.setProcessValue(rpy.x);
NaotoMorita 70:99f974d8960e 20 pitchratePID.setProcessValue(gyro.x);
NaotoMorita 70:99f974d8960e 21 rollPID.setProcessValue(rpy.y);
NaotoMorita 70:99f974d8960e 22 rollratePID.setProcessValue(gyro.y);
NaotoMorita 90:96c2b0ed4b96 23
NaotoMorita 90:96c2b0ed4b96 24 //舵角計算
NaotoMorita 83:e69ab831031c 25 //de = rc[1];
NaotoMorita 90:96c2b0ed4b96 26 //da = rc[0];
NaotoMorita 83:e69ab831031c 27 de = -(pitchPID.compute()+pitchratePID.compute())+rc[1];
NaotoMorita 83:e69ab831031c 28 da = (rollPID.compute()+rollratePID.compute())+rc[0];
NaotoMorita 90:96c2b0ed4b96 29
NaotoMorita 73:84ffa0166e6c 30 dT = rc[2];
NaotoMorita 70:99f974d8960e 31
NaotoMorita 73:84ffa0166e6c 32 scaledServoOut[0]=-de+da;
NaotoMorita 73:84ffa0166e6c 33 scaledServoOut[1]=de+da;
NaotoMorita 70:99f974d8960e 34 scaledMotorOut[0]= dT;
NaotoMorita 70:99f974d8960e 35
cocorlow 56:888379912f81 36 float LP_servo = 0.2;
NaotoMorita 70:99f974d8960e 37 float LP_motor = 0.2;
cocorlow 56:888379912f81 38 for(int i = 0; i < sizeof(servoOut)/sizeof(servoOut[0]); i++)
cocorlow 56:888379912f81 39 {
cocorlow 56:888379912f81 40 servoOut[i] = LP_servo*(mapfloat(scaledServoOut[i],-1,1,servoPwmMin,servoPwmMax))+(1.0-LP_servo)*servoOut[i];
cocorlow 56:888379912f81 41 if(servoOut[i]<servoPwmMin)
cocorlow 56:888379912f81 42 {
cocorlow 56:888379912f81 43 servoOut[i] = servoPwmMin;
cocorlow 56:888379912f81 44 }
cocorlow 56:888379912f81 45 if(servoOut[i]>servoPwmMax)
cocorlow 56:888379912f81 46 {
cocorlow 56:888379912f81 47 servoOut[i] = servoPwmMax;
cocorlow 56:888379912f81 48 }
cocorlow 56:888379912f81 49 }
cocorlow 56:888379912f81 50
NaotoMorita 70:99f974d8960e 51 for(int i = 0;i<sizeof(motorOut)/sizeof(motorOut[0]) ;i++){
NaotoMorita 70:99f974d8960e 52 motorOut[i] = LP_motor*(mapfloat(scaledMotorOut[i],-1,1,motorPwmMin,motorPwmMax))+(1.0-LP_motor)*motorOut[i];
NaotoMorita 70:99f974d8960e 53 if(motorOut[i]<motorPwmMin) {
NaotoMorita 70:99f974d8960e 54 motorOut[i] = motorPwmMin;
NaotoMorita 70:99f974d8960e 55 };
NaotoMorita 70:99f974d8960e 56 if(motorOut[i]>motorPwmMax) {
NaotoMorita 70:99f974d8960e 57 motorOut[i] = motorPwmMax;
NaotoMorita 70:99f974d8960e 58 };
NaotoMorita 70:99f974d8960e 59 }
NaotoMorita 70:99f974d8960e 60 servoRight.pulsewidth_us(servoOut[0]);
NaotoMorita 70:99f974d8960e 61 servoLeft.pulsewidth_us(servoOut[1]);
NaotoMorita 70:99f974d8960e 62 servoThrust.pulsewidth_us(motorOut[0]);
NaotoMorita 68:b9f6938fab9d 63
osaka 87:89bbbcdb667b 64 sendData2PC();
osaka 87:89bbbcdb667b 65 writeSDcard();
NaotoMorita 85:bc03f862a316 66 if(loop_count >= 6)
cocorlow 56:888379912f81 67 {
osaka 87:89bbbcdb667b 68 sendTelemetry();
cocorlow 56:888379912f81 69 loop_count = 1;
NaotoMorita 68:b9f6938fab9d 70
cocorlow 56:888379912f81 71 }
cocorlow 56:888379912f81 72 else
cocorlow 56:888379912f81 73 {
cocorlow 56:888379912f81 74 loop_count +=1;
cocorlow 56:888379912f81 75 }
cocorlow 56:888379912f81 76 }