Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/modules/mavlink/mavlink_mission.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1471,7 +1471,8 @@ MavlinkMissionManager::parse_mavlink_mission_item(const mavlink_mission_item_t *

case MAV_CMD_NAV_LAND:
mission_item->nav_cmd = NAV_CMD_LAND;
// TODO: abort alt param1
// param1 is the minimum abort altitude above the landing point (0 = use the MIS_LND_ABRT_ALT default).
mission_item->land_abort_min_alt = mavlink_mission_item->param1;
mission_item->yaw = wrap_2pi(math::radians(mavlink_mission_item->param4));
mission_item->land_precision = mavlink_mission_item->param2;
break;
Expand Down Expand Up @@ -1802,7 +1803,7 @@ MavlinkMissionManager::format_mavlink_mission_item(const struct mission_item_s *
break;

case NAV_CMD_LAND:
// TODO: param1 abort alt
mavlink_mission_item->param1 = mission_item->land_abort_min_alt; // minimum abort altitude (0 = default)
mavlink_mission_item->param2 = mission_item->land_precision;
mavlink_mission_item->param4 = math::degrees(mission_item->yaw);
break;
Expand Down
12 changes: 10 additions & 2 deletions src/modules/navigator/mission_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -873,8 +873,16 @@ MissionBase::do_abort_landing()
}

const float alt_landing = get_absolute_altitude_for_item(_mission_item);
const float alt_sp = math::max(alt_landing + _navigator->get_landing_abort_min_alt(),
_global_pos_sub.get().alt);

// Use the landing item's per-item abort altitude (NAV_CMD_LAND param1) if specified,
// otherwise fall back to the global MIS_LND_ABRT_ALT parameter.
float abort_min_alt = _navigator->get_landing_abort_min_alt();

if (PX4_ISFINITE(_mission_item.land_abort_min_alt) && _mission_item.land_abort_min_alt > FLT_EPSILON) {
abort_min_alt = _mission_item.land_abort_min_alt;
}

const float alt_sp = math::max(alt_landing + abort_min_alt, _global_pos_sub.get().alt);

// turn current landing waypoint into an indefinite loiter
_mission_item.nav_cmd = NAV_CMD_LOITER_UNLIMITED;
Expand Down
2 changes: 2 additions & 0 deletions src/modules/navigator/mission_params.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ parameters:
long: |-
Minimum altitude above landing point that the vehicle will climb to after an aborted landing.
Then vehicle will loiter in this altitude until further command is received.
Used as the default when the landing mission item does not specify its own abort altitude
(MAV_CMD_NAV_LAND param1).
Only applies to fixed-wing vehicles.
type: int32
default: 30
Expand Down
1 change: 1 addition & 0 deletions src/modules/navigator/navigation.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ struct mission_item_s {
union {
float time_inside; /**< time that the MAV should stay inside the radius before advancing in seconds */
float circle_radius; /**< geofence circle radius in meters (only used for NAV_CMD_NAV_FENCE_CIRCLE*) */
float land_abort_min_alt; /**< minimum abort altitude above landing point in meters (only used for NAV_CMD_LAND) */
};
float acceptance_radius; /**< default radius in which the mission is accepted as reached in meters */
float loiter_radius; /**< loiter radius in meters, 0 for a VTOL to hover, negative for counter-clockwise */
Expand Down
Loading