Browse Source

autotest: add trivial test for BodyFrameOdom

zr-v5.1
Peter Barker 4 years ago committed by Peter Barker
parent
commit
0bd9610687
  1. 63
      Tools/autotest/arducopter.py

63
Tools/autotest/arducopter.py

@ -2505,6 +2505,65 @@ class AutoTestCopter(AutoTest): @@ -2505,6 +2505,65 @@ class AutoTestCopter(AutoTest):
if ex is not None:
raise ex
def fly_body_frame_odom(self):
"""Disable GPS navigation, enable input of VISION_POSITION_DELTA."""
if self.get_parameter("AHRS_EKF_TYPE") != 3:
# only tested on this EKF
return
self.customise_SITL_commandline(["--uartF=sim:vicon:"])
if self.current_onboard_log_contains_message("XKFD"):
raise NotAchievedException("Found unexpected XKFD message")
# scribble down a location we can set origin to:
self.progress("Waiting for location")
self.change_mode('LOITER')
self.wait_ready_to_arm()
old_pos = self.mav.recv_match(type='GLOBAL_POSITION_INT', blocking=True)
print("old_pos=%s" % str(old_pos))
# configure EKF to use external nav instead of GPS
self.set_parameters({
"EK3_SRC1_POSXY": 6,
"EK3_SRC1_VELXY": 6,
"EK3_SRC1_POSZ": 6,
"EK3_SRC1_VELZ": 6,
"GPS_TYPE": 0,
"VISO_TYPE": 1,
"SERIAL5_PROTOCOL": 1,
"SIM_VICON_TMASK": 8, # send VISION_POSITION_DELTA
})
self.reboot_sitl()
# without a GPS or some sort of external prompting, AP
# doesn't send system_time messages. So prompt it:
self.mav.mav.system_time_send(int(time.time() * 1000000), 0)
self.progress("Waiting for non-zero-lat")
tstart = self.get_sim_time()
while True:
self.mav.mav.set_gps_global_origin_send(1,
old_pos.lat,
old_pos.lon,
old_pos.alt)
gpi = self.mav.recv_match(type='GLOBAL_POSITION_INT',
blocking=True)
self.progress("gpi=%s" % str(gpi))
if gpi.lat != 0:
break
if self.get_sim_time_cached() - tstart > 60:
raise AutoTestTimeoutException("Did not get non-zero lat")
self.takeoff(alt_min=5, mode='ALT_HOLD', require_absolute=False, takeoff_throttle=1800)
self.change_mode('LAND')
# TODO: something more elaborate here - EKF will only aid
# relative position
self.wait_disarmed()
if not self.current_onboard_log_contains_message("XKFD"):
raise NotAchievedException("Did not find expected XKFD message")
def fly_gps_vicon_switching(self):
"""Fly GPS and Vicon switching test"""
self.customise_SITL_commandline(["--uartF=sim:vicon:"])
@ -7009,6 +7068,10 @@ class AutoTestCopter(AutoTest): @@ -7009,6 +7068,10 @@ class AutoTestCopter(AutoTest):
"Fly Vision Position",
self.fly_vision_position), # 24s
("BodyFrameOdom",
"Fly Body Frame Odometry Code",
self.fly_body_frame_odom), # 24s
("GPSViconSwitching",
"Fly GPS and Vicon Switching",
self.fly_gps_vicon_switching),

Loading…
Cancel
Save