Browse Source

Autotest: wait_and_maintain add support of Vector3

zr-v5.1
Pierre Kancir 5 years ago committed by Peter Barker
parent
commit
0ca8e817d5
  1. 34
      Tools/autotest/common.py

34
Tools/autotest/common.py

@ -24,6 +24,7 @@ from MAVProxy.modules.lib import mp_util
from pymavlink import mavwp, mavutil, DFReader from pymavlink import mavwp, mavutil, DFReader
from pymavlink import mavextra from pymavlink import mavextra
from pymavlink import mavparm from pymavlink import mavparm
from pymavlink.rotmat import Vector3
from pysim import util, vehicleinfo from pysim import util, vehicleinfo
from io import StringIO from io import StringIO
@ -4058,20 +4059,31 @@ class AutoTest(ABC):
def wait_and_maintain(self, value_name, target, current_value_getter, validator=None, accuracy=2.0, timeout=30, **kwargs): def wait_and_maintain(self, value_name, target, current_value_getter, validator=None, accuracy=2.0, timeout=30, **kwargs):
tstart = self.get_sim_time() tstart = self.get_sim_time()
achieving_duration_start = None achieving_duration_start = None
sum_of_achieved_values = 0.0 if type(target) is Vector3:
last_value = 0.0 sum_of_achieved_values = Vector3()
last_value = Vector3()
else:
sum_of_achieved_values = 0.0
last_value = 0.0
count_of_achieved_values = 0 count_of_achieved_values = 0
called_function = kwargs.get("called_function", None) called_function = kwargs.get("called_function", None)
minimum_duration = kwargs.get("minimum_duration", 0) minimum_duration = kwargs.get("minimum_duration", 0)
self.progress("Waiting for %s=%.02f with accuracy %.02f" % (value_name, target, accuracy)) if type(target) is Vector3:
self.progress("Waiting for %s=(%s) with accuracy %.02f" % (value_name, str(target), accuracy))
else:
self.progress("Waiting for %s=%.02f with accuracy %.02f" % (value_name, target, accuracy))
last_print_time = 0 last_print_time = 0
while self.get_sim_time_cached() < tstart + timeout: # if we failed to received message with the getter the sim time isn't updated while self.get_sim_time_cached() < tstart + timeout: # if we failed to received message with the getter the sim time isn't updated
last_value = current_value_getter() last_value = current_value_getter()
if called_function is not None: if called_function is not None:
called_function(last_value, target) called_function(last_value, target)
if self.get_sim_time_cached() - last_print_time > 1: if self.get_sim_time_cached() - last_print_time > 1:
self.progress("%s=%0.2f (want %f +- %f)" % if type(target) is Vector3:
(value_name, last_value, target, accuracy)) self.progress("%s=(%s) (want (%s) +- %f)" %
(value_name, str(last_value), str(target), accuracy))
else:
self.progress("%s=%0.2f (want %f +- %f)" %
(value_name, last_value, target, accuracy))
last_print_time = self.get_sim_time_cached() last_print_time = self.get_sim_time_cached()
if validator is not None: if validator is not None:
is_value_valid = validator(last_value, target) is_value_valid = validator(last_value, target)
@ -4083,13 +4095,19 @@ class AutoTest(ABC):
if achieving_duration_start is None: if achieving_duration_start is None:
achieving_duration_start = self.get_sim_time_cached() achieving_duration_start = self.get_sim_time_cached()
if self.get_sim_time_cached() - achieving_duration_start >= minimum_duration: if self.get_sim_time_cached() - achieving_duration_start >= minimum_duration:
self.progress("Attained %s=%f" % (value_name, sum_of_achieved_values / count_of_achieved_values)) if type(target) is Vector3:
self.progress("Attained %s=%s" % (value_name, str(sum_of_achieved_values * (1.0 / count_of_achieved_values))))
else:
self.progress("Attained %s=%f" % (value_name, sum_of_achieved_values / count_of_achieved_values))
return True return True
else: else:
achieving_duration_start = None achieving_duration_start = None
sum_of_achieved_values = 0.0 if type(target) is Vector3:
sum_of_achieved_values.zero()
else:
sum_of_achieved_values = 0.0
count_of_achieved_values = 0 count_of_achieved_values = 0
raise AutoTestTimeoutException("Failed to attain %s want %s, reach %f" % (value_name, str(target), (sum_of_achieved_values / count_of_achieved_values) if count_of_achieved_values != 0 else last_value)) raise AutoTestTimeoutException("Failed to attain %s want %s, reach %s" % (value_name, str(target), str(sum_of_achieved_values * (1.0 / count_of_achieved_values)) if count_of_achieved_values != 0 else str(last_value)))
def wait_heading(self, heading, accuracy=5, timeout=30, **kwargs): def wait_heading(self, heading, accuracy=5, timeout=30, **kwargs):
"""Wait for a given heading.""" """Wait for a given heading."""

Loading…
Cancel
Save