HAPSRG / Mbed 2 deprecated HAPStail

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

global.hpp

Committer:
osaka
Date:
2022-03-30
Revision:
117:8cedc59454c4
Parent:
114:ba221936d53a
Child:
118:97ffe77b6f38

File content as of revision 117:8cedc59454c4:

#ifndef __GLOBAL_HPP__
#define __GLOBAL_HPP__

#include "mbed.h"
#include "PIDcontroller.h"
#include "SBUS.hpp"
#include "LoopTicker.hpp"
#include "LSM9DS1.h"
#include "LPS.h"
#include "solaESKF.hpp"
#include "CalibrateMagneto.h"
#include "FastPWM.h"
#include <cmath>
#include "UsaPack.hpp"
#include "Vector3.hpp"

#define MPU6050_PWR_MGMT_1   0x6B
#define MPU_ADDRESS  0x68
#define M_PI 3.141592f
#define ACCEL_FSR MPU6050_ACCEL_FS_8
#define ACCEL_SSF 4096.0f
#define GYRO_FSR MPU6050_GYRO_FS_250
#define GYRO_SSF 131.0f
#define MPU6050_LPF MPU6050_DLPF_BW_256
#define gyro_th 20.0f
#define PID_dt 0.015f
#define servoPwmMax  2100.0f
#define servoPwmMin  900.0f
#define motorPwmMax  2000.0f
#define motorPwmMin  1100.0f
#define N_EEPROM 12

// struct union
union U
{
    int i[N_EEPROM]; // 0: flag(>1で正常に書き込まれた状態) 1 ~ 3: 磁場の中心座標, 4: 磁場の半径、 5~7; mag, 10: roll offset, 11: pitch offset 
    char c[N_EEPROM*4]; // floatはcharの4倍
};

struct valuePack
{
    float acc[3];
    float gyro[3];
    float mag[3];
    float rpy[3];
    float altitude;
    float de;
    float deobj;
    float rc[5];
    int calibEndFlag;
    int readyFlag;
    float pi[3];
    float vi[3];
    float att_dt;
    int ap_flag;
};

struct updatePack
{
    int calibrationFlag;
    char gps_fix;
    int gps_itow;
    float vi[3];
    float pi[3];
    float de_command;
    float dT_command;
    float dr_command;
    float gps_acc;
    float vx_opt;
    float vy_opt;
    float dist_ir;
    //float dt_opt;
    float heading;
};


// var

// communication
extern Serial pc;
extern I2C i2c;  // sda, scl
extern UsaPack tail; // log - tail
extern SBUS sbus;

// sensor
extern LSM9DS1 lsm;
extern LPS lps;
//extern UsaPack sensor1;
//extern UsaPack sensor2;
extern CalibrateMagneto magCalibrator;

// io
extern DigitalIn userButton;
extern DigitalIn locdef1;
extern DigitalIn locdef2;

// control
extern FastPWM servo;
extern FastPWM rudServo;
extern FastPWM motor1;
extern FastPWM motor2;
extern PID pitchPID; // rad
extern PID pitchratePID;// rad/s
extern PID yawratePID;// rad/s
extern int itowVEL_log;
extern solaESKF eskf;

extern Timer _t;
extern int loop_count;
extern float tstart;
extern float tgps;
extern float tsensors;
extern float att_dt;
extern float rc[16];

extern int16_t ax, ay, az;
extern int16_t gx, gy, gz;
extern float magval[3];

// elevator
extern float de;
extern float deobj;
extern float dr;
extern float drobj;

// position
extern Matrix SensorAlignmentAG;
extern Matrix SensorAlignmentMAG; 
extern Matrix euler;
extern Vector3 rpy; // x:roll  y:pitch  z:yaw
extern Vector3 acc;
extern Vector3 accref;
extern Vector3 mag;
extern Vector3 magref;
extern Vector3 gyro;
extern Vector3 vb;
extern float palt;
extern float palt0;
extern bool gpsUpdateFlag;
extern bool sensorUpdateFlag;
extern int sensorUpdateID;
extern float dynaccnorm2;
//extern float opt_vx;
//extern float opt_vy;
//extern const float theta_px;
//extern const float theta_py;
//extern const int pixel_x;
//extern const int pixel_y;


extern float scaledServoOut[2];
extern float servoOut[2];
extern float scaledMotorOut[2];
extern float motorOut[2];

extern int calibrationFlag;
extern int pos_tail; // 0:left 1:center 2:right
extern float agoffset[6];
extern float magbiasMin[3];
extern float magbiasMax[3];
extern float accMin[3];
extern float accMax[3];

extern float roll_offset;
extern float pitch_offset;

// eepromのread writeのためのunionを定義
extern const int eeprom_address; // EEPROMの3つの入力が全て+より
extern const int eeprom_pointeraddress;

//// UsaPack
extern const int tail_address[3];
extern const int time_address;
extern valuePack posValues;
extern updatePack updateValues;
extern Timer system_dt;

// function

// main.cpp

// setup.cpp
extern void setup();
extern void calibrate();
extern float accScaleCalibrate(int attNo);
extern void alignment();
extern int n_ave;
extern float roll_sum;
extern float pitch_sum;
extern void mainloopCalibration();

// run.cpp
extern int gpsitow;
extern bool prefligt_finished;
extern void run();

// preflight.cpp
extern void preflightCalibration();
extern void preflightCheck();

// sensor.cpp
extern void getIMUval();
extern void calcOpticalVel();

// servo.cpp
extern void calcServoOut();

// datatransfer.cpp
extern void send2center();
extern void writeEEPROM(int address, unsigned int eeaddress, char *data, int size);
extern void readEEPROM(int address, unsigned int eeaddress, char *data, int size);

// global.cpp
extern float mapfloat(float x, float in_min, float in_max, float out_min, float out_max);
extern void setDiag(Matrix& mat, float val);

#endif