diff --git a/src/lib/systemlib/system_params.c b/src/lib/systemlib/system_params.c index 263097da27..c5829445e5 100644 --- a/src/lib/systemlib/system_params.c +++ b/src/lib/systemlib/system_params.c @@ -191,6 +191,20 @@ PARAM_DEFINE_INT32(SYS_CAL_TMIN, 5); */ PARAM_DEFINE_INT32(SYS_CAL_TMAX, 10); +/** + * Control if the vehicle has a GPS + * + * Disable this if the system has no GPS. + * If disabled, the sensors hub will not process sensor_gps, + * and GPS will not be available for the rest of the system. + * + * @boolean + * @reboot_required true + * + * @group System + */ +PARAM_DEFINE_INT32(SYS_HAS_GPS, 1); + /** * Control if the vehicle has a magnetometer * diff --git a/src/modules/commander/Arming/PreFlightCheck/checks/ekf2Check.cpp b/src/modules/commander/Arming/PreFlightCheck/checks/ekf2Check.cpp index 06e2f4afab..a2a847949c 100644 --- a/src/modules/commander/Arming/PreFlightCheck/checks/ekf2Check.cpp +++ b/src/modules/commander/Arming/PreFlightCheck/checks/ekf2Check.cpp @@ -67,8 +67,11 @@ bool PreFlightCheck::ekf2Check(orb_advert_t *mavlink_log_pub, vehicle_status_s & int32_t arm_without_gps = 0; param_get(param_find("COM_ARM_WO_GPS"), &arm_without_gps); - bool gps_success = true; - bool gps_present = true; + int32_t sys_has_gps = 1; + param_get(param_find("SYS_HAS_GPS"), &sys_has_gps); + + bool gps_success = false; + bool gps_present = false; // Get estimator status data if available and exit with a fail recorded if not uORB::SubscriptionData estimator_selector_status_sub{ORB_ID(estimator_selector_status)}; @@ -154,10 +157,11 @@ bool PreFlightCheck::ekf2Check(orb_advert_t *mavlink_log_pub, vehicle_status_s & } // If GPS aiding is required, declare fault condition if the required GPS quality checks are failing - { + if (sys_has_gps == 1) { const bool ekf_gps_fusion = status.control_mode_flags & (1 << estimator_status_s::CS_GPS); const bool ekf_gps_check_fail = status.gps_check_fail_flags > 0; + gps_present = true; gps_success = ekf_gps_fusion; // default to success if gps data is fused if (ekf_gps_check_fail) { diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index d44a622c18..562b550cbd 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -220,6 +220,7 @@ private: DEFINE_PARAMETERS( (ParamBool) _param_sys_has_baro, + (ParamBool) _param_sys_has_gps, (ParamBool) _param_sys_has_mag, (ParamBool) _param_sens_imu_mode ) @@ -535,12 +536,10 @@ void Sensors::InitializeVehicleAirData() { if (_param_sys_has_baro.get()) { if (_vehicle_air_data == nullptr) { - if (orb_exists(ORB_ID(sensor_baro), 0) == PX4_OK) { - _vehicle_air_data = new VehicleAirData(); + _vehicle_air_data = new VehicleAirData(); - if (_vehicle_air_data) { - _vehicle_air_data->Start(); - } + if (_vehicle_air_data) { + _vehicle_air_data->Start(); } } } @@ -548,8 +547,8 @@ void Sensors::InitializeVehicleAirData() void Sensors::InitializeVehicleGPSPosition() { - if (_vehicle_gps_position == nullptr) { - if (orb_exists(ORB_ID(sensor_gps), 0) == PX4_OK) { + if (_param_sys_has_gps.get()) { + if (_vehicle_gps_position == nullptr) { _vehicle_gps_position = new VehicleGPSPosition(); if (_vehicle_gps_position) { @@ -603,12 +602,10 @@ void Sensors::InitializeVehicleMagnetometer() { if (_param_sys_has_mag.get()) { if (_vehicle_magnetometer == nullptr) { - if (orb_exists(ORB_ID(sensor_mag), 0) == PX4_OK) { - _vehicle_magnetometer = new VehicleMagnetometer(); + _vehicle_magnetometer = new VehicleMagnetometer(); - if (_vehicle_magnetometer) { - _vehicle_magnetometer->Start(); - } + if (_vehicle_magnetometer) { + _vehicle_magnetometer->Start(); } } }