Plane: unlock cruise/loiter heading while doing a scripted trick
and reset height
This commit is contained in:
parent
e97bb0c318
commit
ff5b4f1b13
@ -536,6 +536,13 @@ void Plane::update_alt()
|
|||||||
|
|
||||||
update_flight_stage();
|
update_flight_stage();
|
||||||
|
|
||||||
|
#if AP_SCRIPTING_ENABLED
|
||||||
|
if (plane.nav_scripting.enabled) {
|
||||||
|
// don't call TECS while we are in a trick
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (control_mode->does_auto_throttle() && !throttle_suppressed) {
|
if (control_mode->does_auto_throttle() && !throttle_suppressed) {
|
||||||
|
|
||||||
float distance_beyond_land_wp = 0;
|
float distance_beyond_land_wp = 0;
|
||||||
|
@ -28,6 +28,15 @@ void ModeCruise::update()
|
|||||||
lock_timer_ms = 0;
|
lock_timer_ms = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AP_SCRIPTING_ENABLED
|
||||||
|
if (plane.nav_scripting.enabled) {
|
||||||
|
// while a trick is running unlock heading and zero altitude offset
|
||||||
|
locked_heading = false;
|
||||||
|
lock_timer_ms = 0;
|
||||||
|
plane.set_target_altitude_current();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!locked_heading) {
|
if (!locked_heading) {
|
||||||
plane.nav_roll_cd = plane.channel_roll->norm_input() * plane.roll_limit_cd;
|
plane.nav_roll_cd = plane.channel_roll->norm_input() * plane.roll_limit_cd;
|
||||||
plane.update_load_factor();
|
plane.update_load_factor();
|
||||||
@ -43,6 +52,12 @@ void ModeCruise::update()
|
|||||||
*/
|
*/
|
||||||
void ModeCruise::navigate()
|
void ModeCruise::navigate()
|
||||||
{
|
{
|
||||||
|
#if AP_SCRIPTING_ENABLED
|
||||||
|
if (plane.nav_scripting.enabled) {
|
||||||
|
// don't try to navigate while running trick
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (!locked_heading &&
|
if (!locked_heading &&
|
||||||
plane.channel_roll->get_control_in() == 0 &&
|
plane.channel_roll->get_control_in() == 0 &&
|
||||||
plane.rudder_input() == 0 &&
|
plane.rudder_input() == 0 &&
|
||||||
|
@ -27,6 +27,14 @@ void ModeLoiter::update()
|
|||||||
plane.calc_nav_pitch();
|
plane.calc_nav_pitch();
|
||||||
plane.calc_throttle();
|
plane.calc_throttle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AP_SCRIPTING_ENABLED
|
||||||
|
if (plane.nav_scripting.enabled) {
|
||||||
|
// while a trick is running we reset altitude
|
||||||
|
plane.set_target_altitude_current();
|
||||||
|
plane.next_WP_loc.set_alt_cm(plane.target_altitude.amsl_cm, Location::AltFrame::ABSOLUTE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ModeLoiter::isHeadingLinedUp(const Location loiterCenterLoc, const Location targetLoc)
|
bool ModeLoiter::isHeadingLinedUp(const Location loiterCenterLoc, const Location targetLoc)
|
||||||
@ -91,6 +99,13 @@ void ModeLoiter::navigate()
|
|||||||
plane.next_WP_loc.set_alt_cm(plane.target_altitude.amsl_cm, Location::AltFrame::ABSOLUTE);
|
plane.next_WP_loc.set_alt_cm(plane.target_altitude.amsl_cm, Location::AltFrame::ABSOLUTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AP_SCRIPTING_ENABLED
|
||||||
|
if (plane.nav_scripting.enabled) {
|
||||||
|
// don't try to navigate while running trick
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Zero indicates to use WP_LOITER_RAD
|
// Zero indicates to use WP_LOITER_RAD
|
||||||
plane.update_loiter(0);
|
plane.update_loiter(0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user