autotest: add tests for changing WPNAV_SPEED_{UP,DN}

and slight augment for WPNAV_SPEED
This commit is contained in:
Peter Barker 2021-09-07 12:31:44 +10:00 committed by Peter Barker
parent 8a3a787b76
commit d7a5e460cc
2 changed files with 85 additions and 2 deletions

View File

@ -2875,8 +2875,7 @@ class AutoTestCopter(AutoTest):
self.upload_simple_relhome_mission(items)
start_speed_ms = 1
self.set_parameter('WPNAV_SPEED', start_speed_ms*100)
start_speed_ms = self.get_parameter('WPNAV_SPEED') / 100.0
self.takeoff(20)
self.change_mode('AUTO')
@ -2887,6 +2886,56 @@ class AutoTestCopter(AutoTest):
self.wait_groundspeed(speed_ms-1, speed_ms+1, minimum_duration=10)
self.do_RTL()
def WPNAV_SPEED_UP(self):
'''ensure resetting WPNAV_SPEED_UP works'''
items = []
# 1 waypoint a long way up
items.append((mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, 0, 0, 20000),)
items.append((mavutil.mavlink.MAV_CMD_NAV_RETURN_TO_LAUNCH, 0, 0, 0))
self.upload_simple_relhome_mission(items)
start_speed_ms = self.get_parameter('WPNAV_SPEED_UP') / 100.0
minimum_duration = 5
self.takeoff(20)
self.change_mode('AUTO')
self.wait_climbrate(start_speed_ms-1, start_speed_ms+1, minimum_duration=minimum_duration)
for speed_ms in 7, 8, 7, 8, 6, 2:
self.set_parameter('WPNAV_SPEED_UP', speed_ms*100)
self.wait_climbrate(speed_ms-1, speed_ms+1, minimum_duration=minimum_duration)
self.do_RTL(timeout=240)
def WPNAV_SPEED_DN(self):
'''ensure resetting WPNAV_SPEED_DN works'''
items = []
# 1 waypoint a long way back down
items.append((mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, 0, 0, 10),)
items.append((mavutil.mavlink.MAV_CMD_NAV_RETURN_TO_LAUNCH, 0, 0, 0))
self.upload_simple_relhome_mission(items)
minimum_duration = 5
self.takeoff(500, timeout=60)
self.change_mode('AUTO')
start_speed_ms = self.get_parameter('WPNAV_SPEED_DN') / 100.0
self.wait_climbrate(-start_speed_ms-1, -start_speed_ms+1, minimum_duration=minimum_duration)
for speed_ms in 7, 8, 7, 8, 6, 2:
self.set_parameter('WPNAV_SPEED_DN', speed_ms*100)
self.wait_climbrate(-speed_ms-1, -speed_ms+1, minimum_duration=minimum_duration)
self.do_RTL()
def fly_mission(self, filename, strict=True):
num_wp = self.load_mission(filename, strict=strict)
self.set_parameter("AUTO_OPTIONS", 3)
@ -7834,6 +7883,14 @@ class AutoTestCopter(AutoTest):
"Change speed during misison",
self.WPNAV_SPEED),
Test("WPNAV_SPEED_UP",
"Change speed (up) during misison",
self.WPNAV_SPEED_UP),
Test("WPNAV_SPEED_DN",
"Change speed (down) during misison",
self.WPNAV_SPEED_DN),
Test("LogUpload",
"Log upload",
self.log_upload),

View File

@ -4940,6 +4940,32 @@ class AutoTest(ABC):
**kwargs
)
def wait_climbrate(self, speed_min, speed_max, timeout=30, **kwargs):
"""Wait for a given vertical rate."""
assert speed_min <= speed_max, "Minimum speed should be less than maximum speed."
def get_climbrate(timeout2):
msg = self.mav.recv_match(type='VFR_HUD', blocking=True, timeout=timeout2)
if msg:
return msg.climb
raise MsgRcvTimeoutException("Failed to get climb rate")
def validator(value2, target2=None):
if speed_min <= value2 <= speed_max:
return True
else:
return False
self.wait_and_maintain(
value_name="Climbrate",
target=speed_min,
current_value_getter=lambda: get_climbrate(timeout),
accuracy=(speed_max - speed_min),
validator=lambda value2, target2: validator(value2, target2),
timeout=timeout,
**kwargs
)
def wait_groundspeed(self, speed_min, speed_max, timeout=30, **kwargs):
"""Wait for a given ground speed range."""
assert speed_min <= speed_max, "Minimum speed should be less than maximum speed."