|
|
|
@ -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), |
|
|
|
|