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

global.cpp

Committer:
NaotoMorita
Date:
2021-07-15
Revision:
73:84ffa0166e6c
Parent:
72:267e2cfddb0b
Child:
74:f67062e7813e

File content as of revision 73:84ffa0166e6c:

#include "global.hpp"


// var

// communication
I2C i2c(PB_9,PB_8);  // sda, scl
UsaPack pc(USBTX, USBRX, 57600); // log - tail

// sensor
MPU6050 accelgyro;
MAG3110 mag_sensor(PB_9,PB_8);
CalibrateMagneto magCalibrator;

// io
DigitalIn userButton(USER_BUTTON);
SBUS sbus(PD_5, PD_6);
Joystick joystick(PC_3,PF_3,PF_5);

// control
FastPWM servoRight(PE_9);
FastPWM servoLeft(PE_11);
FastPWM servoThrust(PE_13);
PID pitchPID(20.0f*0.6f,20.0f*1.2f/2.0f,0.0,PID_dt); //rad
PID pitchratePID(0.075f*20.0f*2.0f, 0.0, 0.0, PID_dt);//rad/s
PID rollPID(6.0f*0.6f,6.0f*1.2f/1.0f,0.0,PID_dt);
PID rollratePID(0.075f*6.0f*1.0f, 0.0, 0.0, PID_dt);//rad/s
errStateEKF ekf; // EKF class

float rc[16];
int loop_count = 0;
float att_dt = 0.01f;
int16_t ax, ay, az;
int16_t gx, gy, gz;
MotionSensorDataUnits mdata;
float magval[3] = {1.0f, 0.0f, 0.0f};

// position
Vector3 rpy(0.0f, 0.0f, 0.0f); // x:roll  y:pitch  z:yaw
Vector3 acc;
Vector3 accref(0.0f, 0.0f, 0.98f);
Vector3 dynacc;
Vector3 mag;
Vector3 magref(0.65f, 0.0f, 0.75f);
Vector3 gyro;
float de = 0.0f;
float da = 0.0f;
float dT = 0.0f;
MedianFilter accMedian(3);
MedianFilter gyroMedian(3);
MedianFilter magMedian(3);

float scaledServoOut[2]= {0.0f,0.0f};
float scaledMotorOut[1]= {-1.0f};
float servoOut[2] = {1500.0f,1500.0f};
float motorOut[1] = {1100.0f};

int calibrationFlag = 0;
int agoffset[6] = {0, 0, 0, -616, -108, 60};
float magbiasMin[3] = {-177.574768, 90.129456, -199.611603};
float magbiasMax[3] = {-108.064606, 160.956711, -125.601234};
float accMin[3] = {-0.958801, -1.016878, -1.054199};
float accMax[3] = { 1.050249, 0.965697, 0.946194};

Vector3 rpy_align(8.798061f*M_PI/180.0f, 0.953862f*M_PI/180.0f, 0.0f*M_PI/180.0f);


// UsaPack
valuePack vp;

// HIL
bool hilFlag = true;

float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}