mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-01 13:38:38 -04:00
autotest: add tests for changing WPNAV_SPEED_{UP,DN}
and slight augment for WPNAV_SPEED
This commit is contained in:
parent
8a3a787b76
commit
d7a5e460cc
@ -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),
|
||||
|
@ -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."
|
||||
|
Loading…
Reference in New Issue
Block a user