diff --git a/Tools/autotest/rover.py b/Tools/autotest/rover.py index 42aefb375a..2f393ee73c 100644 --- a/Tools/autotest/rover.py +++ b/Tools/autotest/rover.py @@ -3642,6 +3642,48 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm) if delta < max_delta: self.progress("Reached destination") + def drive_to_location(self, loc, tolerance=1, timeout=30, target_system=1, target_component=1): + self.assert_mode('GUIDED') + + type_mask = (mavutil.mavlink.POSITION_TARGET_TYPEMASK_VX_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_VY_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_VZ_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_AX_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_AY_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_AZ_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_YAW_IGNORE + + mavutil.mavlink.POSITION_TARGET_TYPEMASK_YAW_RATE_IGNORE) + + last_sent = 0 + tstart = self.get_sim_time() + while True: + now = self.get_sim_time_cached() + if now - tstart > timeout: + raise NotAchievedException("Did not get to location") + if now - last_sent > 10: + last_sent = now + self.mav.mav.set_position_target_global_int_send( + 0, + target_system, + target_component, + mavutil.mavlink.MAV_FRAME_GLOBAL_INT, + type_mask, + int(loc.lat * 1.0e7), + int(loc.lng * 1.0e7), + 0, # alt + 0, # x-ve + 0, # y-vel + 0, # z-vel + 0, # afx + 0, # afy + 0, # afz + 0, # yaw, + 0, # yaw-rate + ) + if self.get_distance(self.mav.location(), loc) > tolerance: + continue + return + def drive_somewhere_breach_boundary_and_rtl(self, loc, target_system=1, target_component=1, timeout=60): tstart = self.get_sim_time() last_sent = 0