109 lines
3.0 KiB
C++
109 lines
3.0 KiB
C++
/**
|
|
* @file sensorData.h
|
|
* @author Alexander Klein (alex@kleiax.de)
|
|
* @brief
|
|
* @version 0.1
|
|
* @date 2023-09-02
|
|
*
|
|
* @copyright Copyright (c) 2023
|
|
*
|
|
*/
|
|
|
|
#ifndef SENSOR_DATA_H
|
|
#define SENSOR_DATA_H
|
|
|
|
#include <SPI.h>
|
|
#include <I2Cdev.h>
|
|
#include <iostream>
|
|
|
|
#include "component.h"
|
|
#include "calibrateCompass.h"
|
|
|
|
#include <SparkFun_u-blox_GNSS_Arduino_Library.h>
|
|
#include <QMC5883LCompass.h>
|
|
#include <MPU6050_6Axis_MotionApps20.h>
|
|
#include "calcAzimuth.h"
|
|
#include "ntripClient.h"
|
|
|
|
#include "point.h"
|
|
class Sensors;
|
|
|
|
class SensorData : public Component {
|
|
public:
|
|
SensorData();
|
|
~SensorData();
|
|
|
|
void enableNtrip(String host, uint16_t port, String mountPoint, String user, String password);
|
|
void enableGnss(SPIClass* spiPort, uint8_t csPin);
|
|
void enableGnss();
|
|
void enableRealCompass();
|
|
void enableCalcCompass();
|
|
void enableGyroskop();
|
|
|
|
// Interface Const kram
|
|
int16_t getRealAzimuth() const { return this->realAzimuth; }
|
|
int16_t getCalcAzimuth() const { return this->calcAzimuth; }
|
|
CalcAzimuth::State getCalcAzimuthState() const;
|
|
|
|
Point getCurrentPos() const { return this->currentPosition; }
|
|
const UBX_NAV_PVT_data_t* getGnssData() const { return this->gnssData; };
|
|
const float* getGyroData() const { return this->yawPitchRoll; }
|
|
|
|
CalcAzimuth* getCalcCompass() const { return this->calcCompass; }
|
|
QMC5883LCompass* getRealCompass() const { return this->realCompass; }
|
|
NTRIPClient* getNtripClient() const { return this->ntripClient; }
|
|
MPU6050* getGyroskop() const { return this->gyroskop; }
|
|
|
|
// static
|
|
/**
|
|
* @brief Set the output status for PVTdata.
|
|
*
|
|
* If this is true, a lot of information from the gnss module will be printed in
|
|
* the interval of navigation frequency.
|
|
*
|
|
* @param status
|
|
*/
|
|
static void setOutputStatusPrintPVTdata(bool status);
|
|
|
|
private:
|
|
void run() override;
|
|
void runAsChild() override;
|
|
void initGnss();
|
|
|
|
QMC5883LCompass* realCompass = nullptr;
|
|
CalcAzimuth* calcCompass = nullptr;
|
|
SFE_UBLOX_GNSS* gnss = nullptr;
|
|
NTRIPClient* ntripClient = nullptr;
|
|
MPU6050* gyroskop = nullptr;
|
|
|
|
UBX_NAV_PVT_data_t* gnssData;
|
|
Point currentPosition;
|
|
Quaternion quaternion;
|
|
VectorFloat gravity;
|
|
|
|
char* host;
|
|
char* mountPoint;
|
|
char* user;
|
|
char* password;
|
|
|
|
bool isNtripInit = false;
|
|
|
|
uint8_t gyroBuffer[64];
|
|
uint16_t port;
|
|
int16_t realAzimuth = INT16_MAX;
|
|
int16_t calcAzimuth = INT16_MAX;
|
|
|
|
float yawPitchRoll[3];
|
|
|
|
// static
|
|
static void printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct);
|
|
static void savePVTdata(UBX_NAV_PVT_data_t *ubxDataStruct);
|
|
|
|
static UBX_NAV_PVT_data_t* ubxDataStatic;
|
|
static uint32_t ubxUpdateTimeStatic;
|
|
static bool outputStatusPrintPVTdata;
|
|
static bool newData;
|
|
};
|
|
|
|
#endif //SENSOR_DATA_H
|