Skip to content

Commit

Permalink
autotest: added fast attitude recovery test
Browse files Browse the repository at this point in the history
ensures we can recover from inverted flight quickly
  • Loading branch information
tridge committed Oct 5, 2024
1 parent 9f4de69 commit da92be1
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
42 changes: 42 additions & 0 deletions Tools/autotest/quadplane.py
Original file line number Diff line number Diff line change
Expand Up @@ -1858,6 +1858,47 @@ def RTL_AUTOLAND_1_FROM_GUIDED(self):

self.fly_home_land_and_disarm()

def FastInvertedRecovery(self):
'''test recovery from inverted flight is fast'''

self.set_parameters({
"Q_A_ACCEL_R_MAX": 20000,
"Q_A_ACCEL_P_MAX": 20000,
"Q_A_ACCEL_Y_MAX": 20000,
"Q_A_RATE_R_MAX": 50,
"Q_A_RATE_P_MAX": 50,
"Q_A_RATE_Y_MAX": 50,
})

self.wait_ready_to_arm()
self.takeoff(60, mode='GUIDED', timeout=100)

self.context_collect('STATUSTEXT')
self.set_rc(3, 1500)
self.change_mode('CRUISE')
self.wait_statustext("Transition done", check_context=True)

self.progress("Go to inverted flight")
self.run_auxfunc(43, 2)
self.wait_roll(180, 3, absolute_value=True)

initial_altitude = self.get_altitude(relative=True, timeout=2)
self.change_mode('QHOVER')

self.wait_statustext("Fast attitude recovery", check_context=True)
self.wait_roll(0, 3, absolute_value=True)

recovery_altitude = self.get_altitude(relative=True, timeout=2)
alt_change = initial_altitude - recovery_altitude

self.progress("Recovery AltChange %.1fm" % alt_change)

max_alt_change = 16 # normally 14.5, added 1.5 margin
if alt_change > max_alt_change:
raise NotAchievedException("Recovery AltChange too high %.1f > %.1f" % (alt_change, max_alt_change))
self.run_auxfunc(43, 0)
self.fly_home_land_and_disarm()

def tests(self):
'''return list of all tests'''

Expand Down Expand Up @@ -1906,5 +1947,6 @@ def tests(self):
self.DCMClimbRate,
self.RTL_AUTOLAND_1, # as in fly-home then go to landing sequence
self.RTL_AUTOLAND_1_FROM_GUIDED, # as in fly-home then go to landing sequence
self.FastInvertedRecovery,
])
return ret
4 changes: 3 additions & 1 deletion Tools/autotest/vehicle_test_suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -7383,12 +7383,14 @@ def get_speed(timeout2):
**kwargs
)

def wait_roll(self, roll, accuracy, timeout=30, **kwargs):
def wait_roll(self, roll, accuracy, timeout=30, absolute_value=False, **kwargs):
"""Wait for a given roll in degrees."""
def get_roll(timeout2):
msg = self.assert_receive_message('ATTITUDE', timeout=timeout2)
p = math.degrees(msg.pitch)
r = math.degrees(msg.roll)
if absolute_value:
r = abs(r)
self.progress("Roll %d Pitch %d" % (r, p))
return r

Expand Down

0 comments on commit da92be1

Please sign in to comment.