autotest: tidy fence handling

This commit is contained in:
Peter Barker 2021-03-01 11:49:18 +11:00 committed by Peter Barker
parent 03bb3237ef
commit cc83562add
4 changed files with 28 additions and 22 deletions

View File

@ -1216,7 +1216,8 @@ class AutoTestCopter(AutoTest):
self.progress("home: %s" % str(m)) self.progress("home: %s" % str(m))
self.start_subtest("ensure we can't arm if ouside fence") self.start_subtest("ensure we can't arm if ouside fence")
self.load_fence_using_mavproxy("fence-in-middle-of-nowhere.txt") self.load_fence("fence-in-middle-of-nowhere.txt")
self.delay_sim_time(5) # let fence check run so it loads-from-eeprom self.delay_sim_time(5) # let fence check run so it loads-from-eeprom
self.assert_prearm_failure("vehicle outside fence") self.assert_prearm_failure("vehicle outside fence")
self.progress("Failed to arm outside fence (good!)") self.progress("Failed to arm outside fence (good!)")
@ -1262,7 +1263,7 @@ class AutoTestCopter(AutoTest):
tstart = self.get_sim_time() tstart = self.get_sim_time()
while not self.mode_is("RTL"): while not self.mode_is("RTL"):
if self.get_sim_time_cached() - tstart > 30: if self.get_sim_time_cached() - tstart > 30:
self.NotAchievedException("Did not breach fence") raise NotAchievedException("Did not breach fence")
m = self.mav.recv_match(type='GLOBAL_POSITION_INT', blocking=True) m = self.mav.recv_match(type='GLOBAL_POSITION_INT', blocking=True)
alt = m.relative_alt / 1000.0 # mm -> m alt = m.relative_alt / 1000.0 # mm -> m
@ -1312,16 +1313,16 @@ class AutoTestCopter(AutoTest):
self.change_alt(10) self.change_alt(10)
# first east # first east
self.progress("turn east") self.progress("turning east")
self.set_rc(4, 1580) self.set_rc(4, 1580)
self.wait_heading(160) self.wait_heading(160)
self.set_rc(4, 1500) self.set_rc(4, 1500)
# fly forward (east) at least 20m self.progress("flying east 20m")
self.set_rc(2, 1100) self.set_rc(2, 1100)
self.wait_distance(20) self.wait_distance(20)
# stop flying forward and start flying up: self.progress("flying up")
self.set_rc_from_map({ self.set_rc_from_map({
2: 1500, 2: 1500,
3: 1800, 3: 1800,
@ -5042,7 +5043,7 @@ class AutoTestCopter(AutoTest):
self.print_exception_caught(e) self.print_exception_caught(e)
ex = e ex = e
self.context_pop() self.context_pop()
self.mavproxy.send("fence clear\n") self.clear_fence()
self.disarm_vehicle(force=True) self.disarm_vehicle(force=True)
self.reboot_sitl() self.reboot_sitl()
if ex is not None: if ex is not None:
@ -5334,7 +5335,7 @@ class AutoTestCopter(AutoTest):
self.print_exception_caught(e) self.print_exception_caught(e)
ex = e ex = e
self.context_pop() self.context_pop()
self.mavproxy.send("fence clear\n") self.clear_fence()
self.disarm_vehicle(force=True) self.disarm_vehicle(force=True)
self.reboot_sitl() self.reboot_sitl()
if ex is not None: if ex is not None:

View File

@ -1117,8 +1117,7 @@ class AutoTestPlane(AutoTest):
self.assert_fence_sys_status(False, False, True) self.assert_fence_sys_status(False, False, True)
self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL) # report only self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL) # report only
self.assert_fence_sys_status(True, False, True) self.assert_fence_sys_status(True, False, True)
self.mavproxy.send('fence enable\n') self.do_fence_enable()
self.mavproxy.expect("fence enabled")
self.assert_fence_sys_status(True, True, True) self.assert_fence_sys_status(True, True, True)
m = self.mav.recv_match(type='FENCE_STATUS', blocking=True, timeout=2) m = self.mav.recv_match(type='FENCE_STATUS', blocking=True, timeout=2)
if m is None: if m is None:
@ -1126,15 +1125,13 @@ class AutoTestPlane(AutoTest):
if m.breach_status: if m.breach_status:
raise NotAchievedException("Breached fence unexpectedly (%u)" % raise NotAchievedException("Breached fence unexpectedly (%u)" %
(m.breach_status)) (m.breach_status))
self.mavproxy.send('fence disable\n') self.do_fence_disable()
self.mavproxy.expect("fence disabled")
self.assert_fence_sys_status(True, False, True) self.assert_fence_sys_status(True, False, True)
self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_NONE) self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_NONE)
self.assert_fence_sys_status(False, False, True) self.assert_fence_sys_status(False, False, True)
self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL) self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL)
self.assert_fence_sys_status(True, False, True) self.assert_fence_sys_status(True, False, True)
self.mavproxy.send("fence clear\n") self.clear_fence()
self.mavproxy.expect("fence removed")
if self.get_parameter("FENCE_TOTAL") != 0: if self.get_parameter("FENCE_TOTAL") != 0:
raise NotAchievedException("Expected zero points remaining") raise NotAchievedException("Expected zero points remaining")
self.assert_fence_sys_status(False, False, True) self.assert_fence_sys_status(False, False, True)
@ -1147,8 +1144,7 @@ class AutoTestPlane(AutoTest):
self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL) self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL)
self.do_fence_enable() self.do_fence_enable()
self.assert_fence_sys_status(True, True, True) self.assert_fence_sys_status(True, True, True)
self.mavproxy.send("fence clear\n") self.clear_fence()
self.mavproxy.expect("fence removed")
self.wait_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_GEOFENCE, False, False, True) self.wait_sensor_state(mavutil.mavlink.MAV_SYS_STATUS_GEOFENCE, False, False, True)
if self.get_parameter("FENCE_TOTAL") != 0: if self.get_parameter("FENCE_TOTAL") != 0:
raise NotAchievedException("Expected zero points remaining") raise NotAchievedException("Expected zero points remaining")
@ -1156,7 +1152,7 @@ class AutoTestPlane(AutoTest):
except Exception as e: except Exception as e:
self.print_exception_caught(e) self.print_exception_caught(e)
ex = e ex = e
self.mavproxy.send('fence clear\n') self.clear_fence()
if ex is not None: if ex is not None:
raise ex raise ex
@ -1208,7 +1204,7 @@ class AutoTestPlane(AutoTest):
except Exception as e: except Exception as e:
self.print_exception_caught(e) self.print_exception_caught(e)
ex = e ex = e
self.mavproxy.send('fence clear\n') self.clear_fence()
if ex is not None: if ex is not None:
raise ex raise ex
@ -1292,6 +1288,11 @@ class AutoTestPlane(AutoTest):
self.start_subtest(desc) self.start_subtest(desc)
func() func()
def clear_fence(self):
'''Plane doesn't use MissionItemProtocol - yet - so clear it using
mavproxy:'''
self.clear_fence_using_mavproxy()
def test_main_flight(self): def test_main_flight(self):
self.change_mode('MANUAL') self.change_mode('MANUAL')

View File

@ -7440,7 +7440,7 @@ Also, ignores heartbeats not from our target system'''
break break
def clear_fence(self): def clear_fence(self):
self.clear_fence_using_mavproxy() self.clear_mission(mavutil.mavlink.MAV_MISSION_TYPE_FENCE)
def clear_mission_using_mavproxy(self): def clear_mission_using_mavproxy(self):
self.mavproxy.send("wp clear\n") self.mavproxy.send("wp clear\n")
@ -8626,11 +8626,11 @@ switch value'''
# plane requires a polygon fence... # plane requires a polygon fence...
self.start_subtest("Altitude Limit breach") self.start_subtest("Altitude Limit breach")
self.set_parameter("AFS_AMSL_LIMIT", 100) self.set_parameter("AFS_AMSL_LIMIT", 100)
self.mavproxy.send("fence enable\n") self.do_fence_enable()
self.wait_statustext("Terminating due to fence breach", check_context=True) self.wait_statustext("Terminating due to fence breach", check_context=True)
self.set_parameter("AFS_AMSL_LIMIT", 0) self.set_parameter("AFS_AMSL_LIMIT", 0)
self.set_parameter("AFS_TERMINATE", 0) self.set_parameter("AFS_TERMINATE", 0)
self.mavproxy.send("fence disable\n") self.do_fence_disable()
self.start_subtest("GPS Failure") self.start_subtest("GPS Failure")
self.set_parameter("AFS_MAX_GPS_LOSS", 1) self.set_parameter("AFS_MAX_GPS_LOSS", 1)
@ -8654,7 +8654,11 @@ switch value'''
except Exception as e: except Exception as e:
ex = e ex = e
self.mavproxy.send("fence disable\n") try:
self.do_fence_disable()
except ValueError:
# may not actually be enabled....
pass
self.context_pop() self.context_pop()
if ex is not None: if ex is not None:
raise ex raise ex

View File

@ -596,7 +596,7 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm)
self.print_exception_caught(e) self.print_exception_caught(e)
ex = e ex = e
self.context_pop() self.context_pop()
self.mavproxy.send("fence clear\n") self.clear_mission(mavutil.mavlink.MAV_MISSION_TYPE_FENCE)
self.disarm_vehicle(force=True) self.disarm_vehicle(force=True)
self.reboot_sitl() self.reboot_sitl()
if ex: if ex: