Michael Ernst Peter / Mbed OS Test_GPS

Dependencies:   Eigen

Committer:
pmic
Date:
Thu Jun 09 13:50:42 2022 +0200
Revision:
68:0c0212d6239d
Parent:
67:1cac5dca9045
Child:
69:2cda20c51989
Included M_MIN_SATS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmic 62:c9571e4d9005 1 #ifndef NEOM9N_THREAD_H
pmic 62:c9571e4d9005 2 #define NEOM9N_THREAD_H
pmic 62:c9571e4d9005 3
pmic 62:c9571e4d9005 4 #include <mbed.h>
pmic 62:c9571e4d9005 5
pmic 62:c9571e4d9005 6 #include "Eigen/Dense.h"
pmic 62:c9571e4d9005 7 #include "ThreadFlag.h"
pmic 62:c9571e4d9005 8
pmic 62:c9571e4d9005 9 /**
pmic 62:c9571e4d9005 10 * notes:
pmic 62:c9571e4d9005 11 * - you need to configure neo-m9n unit according to one note notes. basically flash 20220602_M9N_config_00.txt via u-center and save
pmic 62:c9571e4d9005 12 * - unit runs at 25 Hz, do not readout faster than the set update rate (config above)
pmic 62:c9571e4d9005 13 */
pmic 62:c9571e4d9005 14
pmic 62:c9571e4d9005 15 #define PRINT_FOR_DEBUG false
pmic 62:c9571e4d9005 16
pmic 62:c9571e4d9005 17 #define M_PI 3.14159265358979323846
pmic 62:c9571e4d9005 18
pmic 68:0c0212d6239d 19 #define M_MIN_SATS 6
pmic 68:0c0212d6239d 20
pmic 62:c9571e4d9005 21 #define UBX_PAYLOAD_INDEX 2
pmic 62:c9571e4d9005 22 #define UBX_PVT_HEADER_0 0xb5
pmic 62:c9571e4d9005 23 #define UBX_PVT_HEADER_1 0x62
pmic 62:c9571e4d9005 24 #define UBX_PVT_CLASS 0x01
pmic 62:c9571e4d9005 25 #define UBX_PVT_ID 0x07
pmic 62:c9571e4d9005 26
pmic 62:c9571e4d9005 27 class NEOM9N
pmic 62:c9571e4d9005 28 {
pmic 62:c9571e4d9005 29 public:
pmic 66:4057e8e5c248 30 NEOM9N(PinName TX, PinName RX);
pmic 62:c9571e4d9005 31 virtual ~NEOM9N();
pmic 62:c9571e4d9005 32
pmic 62:c9571e4d9005 33 typedef struct ubxNavPVT_s {
pmic 62:c9571e4d9005 34 uint8_t fixType; // 20 - - GNSSfix Type
pmic 62:c9571e4d9005 35 uint8_t numSV; // 23 - - Number of satellites used in Nav Solution
pmic 62:c9571e4d9005 36 int32_t lon; // 24 1e-7 deg Longitude
pmic 62:c9571e4d9005 37 int32_t lat; // 28 1e-7 deg Latitude
pmic 62:c9571e4d9005 38 int32_t height; // 32 - mm Height above ellipsoid
pmic 62:c9571e4d9005 39 uint32_t hAcc; // 40 - mm Horizontal accuracy estimate
pmic 62:c9571e4d9005 40 uint32_t vAcc; // 44 - mm Vertical accuracy estimate
pmic 62:c9571e4d9005 41 int32_t velN; // 48 - mm/s NED north velocity
pmic 62:c9571e4d9005 42 int32_t velE; // 52 - mm/s NED east velocity
pmic 62:c9571e4d9005 43 int32_t velD; // 56 - mm/s NED down velocity
pmic 62:c9571e4d9005 44 int32_t gSpeed; // 60 - mm/s Ground Speed (2-D)
pmic 62:c9571e4d9005 45 int32_t headMot; // 64 1e-5 deg Heading of motion (2-D)
pmic 62:c9571e4d9005 46 uint32_t sAcc; // 68 - mm/s Speed accuracy estimate
pmic 62:c9571e4d9005 47 uint32_t headAcc; // 72 1e-5 deg Heading accuracy estimate (both motion and vehicle)
pmic 66:4057e8e5c248 48 //int16_t magDec; // 88 1e-2 deg Magnetic declination.
pmic 66:4057e8e5c248 49 //uint16_t magAcc; // 90 1e-2 deg Magnetic declination accuracy
pmic 62:c9571e4d9005 50 } ubxNavPVT_t;
pmic 62:c9571e4d9005 51
pmic 62:c9571e4d9005 52 void StartThread();
pmic 62:c9571e4d9005 53 void ZeroLocal();
pmic 62:c9571e4d9005 54 ubxNavPVT_t GetUbxNavPVT();
pmic 66:4057e8e5c248 55 bool CheckAndToggleHasNewData();
pmic 62:c9571e4d9005 56 Eigen::Vector3f GetPosECEF();
pmic 62:c9571e4d9005 57 Eigen::Vector3f GetPosENU();
pmic 62:c9571e4d9005 58 Eigen::Vector3f GetVelENU();
pmic 62:c9571e4d9005 59 uint8_t GetFixType();
pmic 62:c9571e4d9005 60 uint8_t GetNumSV();
pmic 62:c9571e4d9005 61
pmic 62:c9571e4d9005 62 private:
pmic 62:c9571e4d9005 63 float m_Ts;
pmic 62:c9571e4d9005 64 BufferedSerial m_bufferedSerial;
pmic 66:4057e8e5c248 65 bool m_has_new_data = false;
pmic 62:c9571e4d9005 66 ubxNavPVT_t m_ubxNavPVT;
pmic 62:c9571e4d9005 67 #if PRINT_FOR_DEBUG
pmic 62:c9571e4d9005 68 Timer m_run_timer;
pmic 62:c9571e4d9005 69 #endif
pmic 62:c9571e4d9005 70 Eigen::Vector3d m_pos_ecef_0;
pmic 62:c9571e4d9005 71 Eigen::Matrix3d m_R_ecefToLocal_0;
pmic 62:c9571e4d9005 72
pmic 62:c9571e4d9005 73 ThreadFlag threadFlag;
pmic 62:c9571e4d9005 74 Thread thread;
pmic 62:c9571e4d9005 75 Ticker ticker;
pmic 62:c9571e4d9005 76
pmic 62:c9571e4d9005 77 void update();
pmic 62:c9571e4d9005 78 Eigen::Vector3d transformWGS84ToECEF(const ubxNavPVT_t& ubxNavPVT);
pmic 62:c9571e4d9005 79 Eigen::Matrix3d getR_ECEFToLocal(const ubxNavPVT_t& ubxNavPVT);
pmic 62:c9571e4d9005 80 ubxNavPVT_t decodeUbxNavPVTmsg(const char *buf);
pmic 62:c9571e4d9005 81 void sendThreadFlag();
pmic 62:c9571e4d9005 82 };
pmic 62:c9571e4d9005 83
pmic 62:c9571e4d9005 84 #endif /* NEOM9N_THREAD_H */
pmic 62:c9571e4d9005 85