gps: add sbf with heading (#19374)

Co-authored-by: Seppe Geuens <seppe.geuens@tii.ae>
This commit is contained in:
Seppe Geuens
2023-04-13 07:44:35 +02:00
committed by GitHub
co-authored by Seppe Geuens
parent 98026a3e10
commit 7e0f929ad1
4 changed files with 51 additions and 4 deletions
+28 -1
View File
@@ -71,6 +71,8 @@
# include "devices/src/mtk.h"
# include "devices/src/femtomes.h"
# include "devices/src/nmea.h"
# include "devices/src/sbf.h"
#endif // CONSTRAINED_FLASH
#include "devices/src/ubx.h"
@@ -91,7 +93,8 @@ enum class gps_driver_mode_t {
ASHTECH,
EMLIDREACH,
FEMTOMES,
NMEA
NMEA,
SBF
};
enum class gps_dump_comm_mode_t : int32_t {
@@ -349,6 +352,8 @@ GPS::GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interfac
case 5: _mode = gps_driver_mode_t::FEMTOMES; break;
case 6: _mode = gps_driver_mode_t::NMEA; break;
case 7: _mode = gps_driver_mode_t::SBF; break;
#endif // CONSTRAINED_FLASH
}
}
@@ -750,6 +755,13 @@ GPS::run()
heading_offset = matrix::wrap_pi(math::radians(heading_offset));
}
handle = param_find("GPS_PITCH_OFFSET");
float pitch_offset = 0.f;
if (handle != PARAM_INVALID) {
param_get(handle, &pitch_offset);
}
int32_t gps_ubx_dynmodel = 7; // default to 7: airborne with <2g acceleration
handle = param_find("GPS_UBX_DYNMODEL");
@@ -889,6 +901,11 @@ GPS::run()
_helper = new GPSDriverNMEA(&GPS::callback, this, &_report_gps_pos, _p_report_sat_info, heading_offset);
set_device_type(DRV_GPS_DEVTYPE_NMEA);
break;
case gps_driver_mode_t::SBF:
_helper = new GPSDriverSBF(&GPS::callback, this, &_report_gps_pos, _p_report_sat_info, heading_offset, pitch_offset);
set_device_type(DRV_GPS_DEVTYPE_SBF);
break;
#endif // CONSTRAINED_FLASH
default:
@@ -1059,6 +1076,10 @@ GPS::run()
break;
case gps_driver_mode_t::FEMTOMES:
_mode = gps_driver_mode_t::SBF;
break;
case gps_driver_mode_t::SBF:
case gps_driver_mode_t::NMEA: // skip NMEA for auto-detection to avoid false positive matching
#endif // CONSTRAINED_FLASH
_mode = gps_driver_mode_t::UBX;
@@ -1120,6 +1141,9 @@ GPS::print_status()
case gps_driver_mode_t::NMEA:
PX4_INFO("protocol: NMEA");
break;
case gps_driver_mode_t::SBF:
PX4_INFO("protocol: SBF");
#endif // CONSTRAINED_FLASH
default:
@@ -1491,6 +1515,9 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
} else if (!strcmp(myoptarg, "nmea")) {
mode = gps_driver_mode_t::NMEA;
} else if (!strcmp(myoptarg, "sbf")) {
mode = gps_driver_mode_t::SBF;
#endif // CONSTRAINED_FLASH
} else {
PX4_ERR("unknown protocol: %s", myoptarg);