|
|
|
@ -477,10 +477,14 @@ MissionBlock::issue_command(const mission_item_s &item)
@@ -477,10 +477,14 @@ MissionBlock::issue_command(const mission_item_s &item)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float |
|
|
|
|
MissionBlock::get_time_inside(const struct mission_item_s &item) |
|
|
|
|
MissionBlock::get_time_inside(const mission_item_s &item) const |
|
|
|
|
{ |
|
|
|
|
if (item.nav_cmd != NAV_CMD_TAKEOFF) { |
|
|
|
|
return item.time_inside; |
|
|
|
|
if ((item.nav_cmd == NAV_CMD_WAYPOINT && _navigator->get_vstatus()->is_rotary_wing) || |
|
|
|
|
item.nav_cmd == NAV_CMD_LOITER_TIME_LIMIT || |
|
|
|
|
item.nav_cmd == NAV_CMD_DELAY) { |
|
|
|
|
|
|
|
|
|
// a negative time inside would be invalid
|
|
|
|
|
return math::max(item.time_inside, 0.0f); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0.0f; |
|
|
|
@ -510,7 +514,7 @@ MissionBlock::mission_item_to_position_setpoint(const mission_item_s &item, posi
@@ -510,7 +514,7 @@ MissionBlock::mission_item_to_position_setpoint(const mission_item_s &item, posi
|
|
|
|
|
|
|
|
|
|
sp->lat = item.lat; |
|
|
|
|
sp->lon = item.lon; |
|
|
|
|
sp->alt = item.altitude_is_relative ? item.altitude + _navigator->get_home_position()->alt : item.altitude; |
|
|
|
|
sp->alt = get_absolute_altitude_for_item(item); |
|
|
|
|
sp->yaw = item.yaw; |
|
|
|
|
sp->yaw_valid = PX4_ISFINITE(item.yaw); |
|
|
|
|
sp->loiter_radius = (fabsf(item.loiter_radius) > NAV_EPSILON_POSITION) ? fabsf(item.loiter_radius) : |
|
|
|
@ -736,7 +740,7 @@ MissionBlock::mission_apply_limitation(mission_item_s &item)
@@ -736,7 +740,7 @@ MissionBlock::mission_apply_limitation(mission_item_s &item)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float |
|
|
|
|
MissionBlock::get_absolute_altitude_for_item(struct mission_item_s &mission_item) const |
|
|
|
|
MissionBlock::get_absolute_altitude_for_item(const mission_item_s &mission_item) const |
|
|
|
|
{ |
|
|
|
|
if (mission_item.altitude_is_relative) { |
|
|
|
|
return mission_item.altitude + _navigator->get_home_position()->alt; |
|
|
|
|