1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-23 16:25:26 +03:00

INAV: Option to disable usage of GPS VelNED information; GPS: Disable GPS version detection - some NEO-7Ms seem to lack support of the PVT message

This commit is contained in:
Konstantin Sharlaimov (DigitalEntity) 2016-01-21 11:34:38 +10:00
parent 7c1680ff34
commit 27c769888d
5 changed files with 18 additions and 6 deletions

View file

@ -134,7 +134,7 @@ static uint32_t activeFeaturesLatch = 0;
static uint8_t currentControlRateProfileIndex = 0;
controlRateConfig_t *currentControlRateProfile;
static const uint8_t EEPROM_CONF_VERSION = 112;
static const uint8_t EEPROM_CONF_VERSION = 113;
static void resetAccelerometerTrims(flightDynamicsTrims_t * accZero, flightDynamicsTrims_t * accGain)
{
@ -230,6 +230,7 @@ void resetNavConfig(navConfig_t * navConfig)
navConfig->inav.gps_min_sats = 5;
navConfig->inav.gps_delay_ms = 200;
navConfig->inav.accz_unarmed_cal = 1;
navConfig->inav.use_gps_velned = 1; // "Disabled" is mandatory with gps_nav_model = LOW_G
navConfig->inav.w_z_baro_p = 1.0f;
@ -521,7 +522,7 @@ static void resetConf(void)
masterConfig.gpsConfig.sbasMode = SBAS_AUTO;
masterConfig.gpsConfig.autoConfig = GPS_AUTOCONFIG_ON;
masterConfig.gpsConfig.autoBaud = GPS_AUTOBAUD_ON;
masterConfig.gpsConfig.navModel = GPS_MODEL_LOW_G;
masterConfig.gpsConfig.navModel = GPS_MODEL_HIGH_G;
#endif
#ifdef NAV

View file

@ -81,6 +81,7 @@ typedef struct navConfig_s {
#endif
uint8_t gps_min_sats;
uint8_t accz_unarmed_cal;
uint8_t use_gps_velned;
uint16_t gps_delay_ms;
float w_z_baro_p; // Weight (cutoff frequency) for barometer altitude measurements

View file

@ -287,7 +287,7 @@ void onNewGPSData(void)
/* Use VELNED provided by GPS if available, calculate from coordinates otherwise */
float gpsScaleLonDown = constrainf(cos_approx((ABS(gpsSol.llh.lat) / 10000000.0f) * 0.0174532925f), 0.01f, 1.0f);
if (gpsSol.flags.validVelNE) {
if (posControl.navConfig->inav.use_gps_velned && gpsSol.flags.validVelNE) {
posEstimator.gps.vel.V.X = gpsSol.velNED[0];
posEstimator.gps.vel.V.Y = gpsSol.velNED[1];
}
@ -296,7 +296,7 @@ void onNewGPSData(void)
posEstimator.gps.vel.V.Y = (posEstimator.gps.vel.V.Y + (gpsScaleLonDown * DISTANCE_BETWEEN_TWO_LONGITUDE_POINTS_AT_EQUATOR * (gpsSol.llh.lon - previousLon) / dT)) / 2.0f;
}
if (gpsSol.flags.validVelD) {
if (posControl.navConfig->inav.use_gps_velned && gpsSol.flags.validVelD) {
posEstimator.gps.vel.V.Z = - gpsSol.velNED[2]; // NEU
}
else {

View file

@ -45,7 +45,7 @@
#if defined(GPS) && defined(GPS_PROTO_UBLOX)
#define GPS_PROTO_UBLOX_NEO7PLUS
//#define GPS_PROTO_UBLOX_NEO7PLUS
#define GPS_VERSION_DETECTION_TIMEOUT_MS 300
static const char * baudInitData[GPS_BAUDRATE_COUNT] = {
@ -587,7 +587,16 @@ static bool gpsConfigure(void)
break;
case 4: // Configure RATE
#ifdef GPS_PROTO_UBLOX_NEO7PLUS
if (gpsState.hwVersion < 70000) {
#endif
ubxTransmitAutoConfigCommands(ubloxInit_RATE_5Hz, sizeof(ubloxInit_RATE_5Hz));
#ifdef GPS_PROTO_UBLOX_NEO7PLUS
}
else {
ubxTransmitAutoConfigCommands(ubloxInit_RATE_10Hz, sizeof(ubloxInit_RATE_10Hz));
}
#endif
break;
case 5: // SBAS

View file

@ -564,6 +564,7 @@ const clivalue_t valueTable[] = {
#endif
{ "inav_accz_unarmedcal", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.navConfig.inav.accz_unarmed_cal, .config.lookup = { TABLE_OFF_ON }, 0 },
{ "inav_use_gps_velned", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.navConfig.inav.use_gps_velned, .config.lookup = { TABLE_OFF_ON }, 0 },
{ "inav_gps_delay", VAR_UINT16 | MASTER_VALUE, &masterConfig.navConfig.inav.gps_delay_ms, .config.minmax = { 0, 500 }, 0 },
{ "inav_gps_min_sats", VAR_UINT8 | MASTER_VALUE, &masterConfig.navConfig.inav.gps_min_sats, .config.minmax = { 5, 10}, 0 },