autotest: test poshold bounceback

This commit is contained in:
Clyde McQueen 2024-12-07 09:35:49 -08:00
parent 528c880244
commit 85f9179b57
1 changed files with 56 additions and 0 deletions

View File

@ -995,6 +995,61 @@ class AutoTestSub(vehicle_test_suite.TestSuite):
}, epsilon=10) # allow rounding
seen_3 = True
def wait_for_stop(self):
"""Watch the sub slow down and stop"""
tstart = self.get_sim_time_cached()
lstart = self.mav.location()
dmax = 0
dprev = 0
while True:
self.delay_sim_time(1)
dcurr = self.get_distance(lstart, self.mav.location())
if dcurr - dmax < -0.2:
raise NotAchievedException("Bounced back from %.2fm to %.2fm" % (dmax, dcurr))
if dcurr > dmax:
dmax = dcurr
if abs(dcurr - dprev) < 0.1:
self.progress("Stopping distance %.2fm, less than %.2fs" % (dcurr, self.get_sim_time_cached() - tstart))
return
if self.get_sim_time_cached() - tstart > 10:
raise NotAchievedException("Took to long to stop")
dprev = dcurr
def PosHoldBounceBack(self):
"""Test for bounce back in POSHOLD mode"""
self.wait_ready_to_arm()
self.arm_vehicle()
# dive a little
self.set_rc(Joystick.Throttle, 1300)
self.delay_sim_time(3)
self.set_rc(Joystick.Throttle, 1500)
self.delay_sim_time(2)
# hold position
self.change_mode('POSHOLD')
for pilot_speed in range(50, 251, 100):
# set max speed
self.set_parameter('PILOT_SPEED', pilot_speed)
# try different stick values, resulting speed is ~ max_speed * effort * gain
for pwm in range(1700, 1901, 100):
self.progress('PILOT_SPEED %d, forward pwm %d' % (pilot_speed, pwm))
self.set_rc(Joystick.Forward, pwm)
self.delay_sim_time(3)
self.set_rc(Joystick.Forward, 1500)
self.wait_for_stop()
self.disarm_vehicle()
def tests(self):
'''return list of all tests'''
ret = super(AutoTestSub, self).tests()
@ -1027,6 +1082,7 @@ class AutoTestSub(vehicle_test_suite.TestSuite):
self.BackupOrigin,
self.FuseMag,
self.INA3221,
self.PosHoldBounceBack,
])
return ret