From 42ad2a7911f1239e9320ca9ba67877d09840545f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 25 Nov 2024 15:39:37 +1100 Subject: [PATCH] autotest: added non-compass takeoff test --- ArduPlane/mode_takeoff.cpp | 2 +- Tools/autotest/arduplane.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ArduPlane/mode_takeoff.cpp b/ArduPlane/mode_takeoff.cpp index 4a8f7aef27453..42cdcb3d45673 100644 --- a/ArduPlane/mode_takeoff.cpp +++ b/ArduPlane/mode_takeoff.cpp @@ -88,7 +88,7 @@ void ModeTakeoff::update() const float groundspeed = groundspeed2d.length(); // see if we will skip takeoff as already flying - if (plane.is_flying() && (millis() - plane.started_flying_ms > 10000U) && ahrs.groundspeed() > 3) { + if (plane.is_flying() && (millis() - plane.started_flying_ms > 10000U) && groundspeed > 3) { if (altitude >= alt) { gcs().send_text(MAV_SEVERITY_INFO, "Above TKOFF alt - loitering"); plane.next_WP_loc = plane.current_loc; diff --git a/Tools/autotest/arduplane.py b/Tools/autotest/arduplane.py index d075b0a6cde9e..8e49b0f2038cc 100644 --- a/Tools/autotest/arduplane.py +++ b/Tools/autotest/arduplane.py @@ -4805,6 +4805,41 @@ def TakeoffTakeoff4(self): self.fly_home_land_and_disarm() + def TakeoffTakeoff5(self): + '''Test the behaviour of a takeoff with no compass''' + self.set_parameters({ + "COMPASS_USE": 0, + "COMPASS_USE2": 0, + "COMPASS_USE3": 0, + }) + import copy + start_loc = copy.copy(SITL_START_LOCATION) + start_loc.heading = 175 + self.customise_SITL_commandline(["--home=%.9f,%.9f,%.2f,%.1f" % ( + start_loc.lat, start_loc.lng, start_loc.alt, start_loc.heading)]) + self.reboot_sitl() + self.change_mode("TAKEOFF") + + # waiting for the EKF to be happy won't work + self.delay_sim_time(20) + self.arm_vehicle() + + target_alt = self.get_parameter("TKOFF_ALT") + self.wait_altitude(target_alt-5, target_alt, relative=True) + + # Wait a bit for the Takeoff altitude to settle. + self.delay_sim_time(5) + + bearing_margin = 35 + loc = self.mav.location() + bearing_from_home = self.get_bearing(start_loc, loc) + if bearing_from_home < 0: + bearing_from_home += 360 + if abs(bearing_from_home - start_loc.heading) > bearing_margin: + raise NotAchievedException(f"Did not takeoff in the right direction {bearing_from_home}") + + self.fly_home_land_and_disarm() + def TakeoffGround(self): '''Test a rolling TAKEOFF.''' @@ -6525,6 +6560,7 @@ def tests1b(self): self.TakeoffTakeoff2, self.TakeoffTakeoff3, self.TakeoffTakeoff4, + self.TakeoffTakeoff5, self.TakeoffGround, self.TakeoffIdleThrottle, self.TakeoffBadLevelOff,