navigator: loiter: allow without global position

This commit is contained in:
Jacob Dahl
2025-02-13 12:20:11 -09:00
parent 96461cdd7d
commit de997f93c2
2 changed files with 13 additions and 5 deletions
@@ -95,7 +95,6 @@ void getModeRequirements(uint8_t vehicle_type, failsafe_flags_s &flags)
setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_angular_velocity); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_angular_velocity);
setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_attitude); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_attitude);
setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_position); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_position);
setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_global_position);
setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_alt); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_alt);
setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_wind_and_flight_time_compliance); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_wind_and_flight_time_compliance);
+13 -4
View File
@@ -736,11 +736,20 @@ MissionBlock::setLoiterItemFromCurrentPositionWithBraking(struct mission_item_s
{ {
setLoiterItemCommonFields(item); setLoiterItemCommonFields(item);
_navigator->preproject_stop_point(item->lat, item->lon); auto global = _navigator->get_global_position();
item->altitude = _navigator->get_global_position()->alt; if (global->lat_lon_valid && global->alt_valid) {
item->loiter_radius = _navigator->get_loiter_radius(); _navigator->preproject_stop_point(item->lat, item->lon);
item->yaw = NAN; item->altitude = global->alt;
item->loiter_radius = _navigator->get_loiter_radius();
item->yaw = NAN;
} else {
item->lat = NAN;
item->lon = NAN;
item->altitude = NAN;
item->loiter_radius = NAN;
}
} }
void void