mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-05 07:28:29 -04:00
autotest: add tests for Rover MAV_CMD_NAV_SET_YAW_SPEED
This commit is contained in:
parent
76c6d537ed
commit
aa6f351571
@ -6422,6 +6422,10 @@ class AutoTest(ABC):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def groundspeed(self):
|
||||||
|
m = self.assert_receive_message('VFR_HUD')
|
||||||
|
return m.groundspeed
|
||||||
|
|
||||||
def wait_groundspeed(self, speed_min, speed_max, timeout=30, **kwargs):
|
def wait_groundspeed(self, speed_min, speed_max, timeout=30, **kwargs):
|
||||||
self.wait_vfr_hud_speed("groundspeed", speed_min, speed_max, timeout=timeout, **kwargs)
|
self.wait_vfr_hud_speed("groundspeed", speed_min, speed_max, timeout=timeout, **kwargs)
|
||||||
|
|
||||||
@ -6615,7 +6619,10 @@ class AutoTest(ABC):
|
|||||||
while self.get_sim_time_cached() < tstart + timeout: # if we failed to received message with the getter the sim time isn't updated # noqa
|
while self.get_sim_time_cached() < tstart + timeout: # if we failed to received message with the getter the sim time isn't updated # noqa
|
||||||
last_value = current_value_getter()
|
last_value = current_value_getter()
|
||||||
if called_function is not None:
|
if called_function is not None:
|
||||||
|
if print_diagnostics_as_target_not_range:
|
||||||
called_function(last_value, target)
|
called_function(last_value, target)
|
||||||
|
else:
|
||||||
|
called_function(last_value, minimum, maximum)
|
||||||
if validator is not None:
|
if validator is not None:
|
||||||
if print_diagnostics_as_target_not_range:
|
if print_diagnostics_as_target_not_range:
|
||||||
is_value_valid = validator(last_value, target)
|
is_value_valid = validator(last_value, target)
|
||||||
|
@ -6410,6 +6410,65 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm)
|
|||||||
self.wait_groundspeed(3, 100)
|
self.wait_groundspeed(3, 100)
|
||||||
self.disarm_vehicle()
|
self.disarm_vehicle()
|
||||||
|
|
||||||
|
def MAV_CMD_NAV_SET_YAW_SPEED(self):
|
||||||
|
'''tests for MAV_CMD_NAV_SET_YAW_SPEED guided-mode command'''
|
||||||
|
self.change_mode('GUIDED')
|
||||||
|
self.wait_ready_to_arm()
|
||||||
|
self.arm_vehicle()
|
||||||
|
|
||||||
|
for method in self.run_cmd, self.run_cmd_int:
|
||||||
|
self.change_mode('MANUAL')
|
||||||
|
self.wait_groundspeed(0, 1)
|
||||||
|
self.change_mode('GUIDED')
|
||||||
|
self.start_subtest("Absolute angles")
|
||||||
|
for (heading, speed) in (10, 5), (190, 10), (0, 2), (135, 6):
|
||||||
|
def cf(*args, **kwargs):
|
||||||
|
method(
|
||||||
|
mavutil.mavlink.MAV_CMD_NAV_SET_YAW_SPEED,
|
||||||
|
p1=heading,
|
||||||
|
p2=speed,
|
||||||
|
p3=0, # zero is absolute-angles
|
||||||
|
)
|
||||||
|
self.wait_groundspeed(speed-0.5, speed+0.5, called_function=cf, minimum_duration=2)
|
||||||
|
self.wait_heading(heading-0.5, heading+0.5, called_function=cf, minimum_duration=2)
|
||||||
|
|
||||||
|
self.start_subtest("relative angles")
|
||||||
|
original_angle = 90
|
||||||
|
method(
|
||||||
|
mavutil.mavlink.MAV_CMD_NAV_SET_YAW_SPEED,
|
||||||
|
p1=original_angle,
|
||||||
|
p2=5,
|
||||||
|
p3=0, # zero is absolute-angles
|
||||||
|
)
|
||||||
|
self.wait_groundspeed(4, 6)
|
||||||
|
self.wait_heading(original_angle-0.5, original_angle+0.5)
|
||||||
|
|
||||||
|
expected_angle = original_angle
|
||||||
|
for (angle_delta, speed) in (5, 6), (-30, 2), (180, 7):
|
||||||
|
method(
|
||||||
|
mavutil.mavlink.MAV_CMD_NAV_SET_YAW_SPEED,
|
||||||
|
p1=angle_delta,
|
||||||
|
p2=speed,
|
||||||
|
p3=1, # one is relative-angles
|
||||||
|
)
|
||||||
|
|
||||||
|
def cf(*args, **kwargs):
|
||||||
|
method(
|
||||||
|
mavutil.mavlink.MAV_CMD_NAV_SET_YAW_SPEED,
|
||||||
|
p1=0,
|
||||||
|
p2=speed,
|
||||||
|
p3=1, # one is absolute-angles
|
||||||
|
)
|
||||||
|
expected_angle += angle_delta
|
||||||
|
if expected_angle < 0:
|
||||||
|
expected_angle += 360
|
||||||
|
if expected_angle > 360:
|
||||||
|
expected_angle -= 360
|
||||||
|
self.wait_groundspeed(speed-0.5, speed+0.5, called_function=cf, minimum_duration=2)
|
||||||
|
self.wait_heading(expected_angle, called_function=cf, minimum_duration=2)
|
||||||
|
self.do_RTL()
|
||||||
|
self.disarm_vehicle()
|
||||||
|
|
||||||
def tests(self):
|
def tests(self):
|
||||||
'''return list of all tests'''
|
'''return list of all tests'''
|
||||||
ret = super(AutoTestRover, self).tests()
|
ret = super(AutoTestRover, self).tests()
|
||||||
@ -6445,6 +6504,7 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm)
|
|||||||
self.MAV_CMD_DO_SET_MISSION_CURRENT,
|
self.MAV_CMD_DO_SET_MISSION_CURRENT,
|
||||||
self.MAV_CMD_DO_CHANGE_SPEED,
|
self.MAV_CMD_DO_CHANGE_SPEED,
|
||||||
self.MAV_CMD_MISSION_START,
|
self.MAV_CMD_MISSION_START,
|
||||||
|
self.MAV_CMD_NAV_SET_YAW_SPEED,
|
||||||
self.Button,
|
self.Button,
|
||||||
self.Rally,
|
self.Rally,
|
||||||
self.Offboard,
|
self.Offboard,
|
||||||
|
Loading…
Reference in New Issue
Block a user