mirror of https://github.com/ArduPilot/ardupilot
67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
|
|
|
/// @file GPS_Glitch.h
|
|
/// @brief GPS Glitch protection
|
|
|
|
#ifndef __GPS_GLITCH_H__
|
|
#define __GPS_GLITCH_H__
|
|
|
|
#include <AP_HAL.h>
|
|
|
|
#include <inttypes.h>
|
|
#include <AP_Progmem.h>
|
|
#include <AP_Math.h>
|
|
#include <AP_GPS.h>
|
|
|
|
#define GPS_GLITCH_MAX_ACCEL_CMSS 1000.0f // vehicle can accelerate at up to 10m/s/s in any direction
|
|
#define GPS_GLITCH_MIN_RADIUS_CM 1000.0f // gps movement within 10m of current position are always ok
|
|
|
|
/// @class GPS_Glitch
|
|
/// @brief GPS Glitch protection class
|
|
class GPS_Glitch
|
|
{
|
|
public:
|
|
// constructor
|
|
GPS_Glitch(GPS*& gps);
|
|
|
|
// check_position - checks latest gps position against last know position, velocity and maximum acceleration and updates glitching flag
|
|
void check_position();
|
|
|
|
// enable - enable or disable gps sanity checking
|
|
void enable(bool true_or_false) { _enabled = true_or_false; }
|
|
|
|
// enabled - returns true if glitch detection is enabled
|
|
bool enabled() { return _enabled; }
|
|
|
|
// glitching - returns true if we are experiencing a glitch
|
|
bool glitching() { return _flags.glitching; }
|
|
|
|
// last_good_update - returns system time of the last good update
|
|
uint32_t last_good_update() { return _last_good_update; }
|
|
|
|
// class level parameters
|
|
static const struct AP_Param::GroupInfo var_info[];
|
|
|
|
private:
|
|
|
|
/// external dependencies
|
|
GPS*& _gps; // pointer to gps
|
|
|
|
/// structure for holding flags
|
|
struct GPS_Glitch_flags {
|
|
uint8_t initialised : 1; // 1 if we have received at least one good gps lock
|
|
uint8_t glitching : 1; // 1 if we are experiencing a gps glitch
|
|
} _flags;
|
|
|
|
// parameters
|
|
AP_Int8 _enabled; // top level enable/disable control
|
|
|
|
// gps sanity check variables
|
|
uint32_t _last_good_update; // system time of last gps update that passed checks
|
|
int32_t _last_good_lat; // last good latitude reported by the gps
|
|
int32_t _last_good_lon; // last good longitude reported by the gps
|
|
Vector2f _last_good_vel; // last good velocity reported by the gps in cm/s in lat and lon directions
|
|
};
|
|
|
|
#endif // __GPS_H__
|