// exit_mission_callback - callback function called from ap-mission when the mission has completed // we double check that the flight mode is AUTO to avoid the possibility of ap-mission triggering actions while we're not in AUTO mode void Plane::exit_mission_callback() { if (control_mode == AUTO) { gcs_send_text_fmt(PSTR("Returning to Home")); memset(&auto_rtl_command, 0, sizeof(auto_rtl_command)); auto_rtl_command.content.location = rally.calc_best_rally_or_home_location(current_loc, get_RTL_altitude()); auto_rtl_command.id = MAV_CMD_NAV_LOITER_UNLIM; setup_terrain_target_alt(auto_rtl_command.content.location); update_flight_stage(); setup_glide_slope(); setup_turn_angle(); start_command(auto_rtl_command); } }
void Plane::do_RTL(int32_t rtl_altitude) { auto_state.next_wp_no_crosstrack = true; auto_state.no_crosstrack = true; prev_WP_loc = current_loc; next_WP_loc = rally.calc_best_rally_or_home_location(current_loc, rtl_altitude); setup_terrain_target_alt(next_WP_loc); set_target_altitude_location(next_WP_loc); if (aparm.loiter_radius < 0) { loiter.direction = -1; } else { loiter.direction = 1; } setup_glide_slope(); setup_turn_angle(); if (should_log(MASK_LOG_MODE)) DataFlash.Log_Write_Mode(control_mode); }