From f2bc79750164411abd4aeb30076e6f15b4becc95 Mon Sep 17 00:00:00 2001 From: Jacob Feng Date: Wed, 24 Sep 2025 17:12:03 -0600 Subject: [PATCH 1/3] Refactored set_mode_wait and wait_vehicle_arm into single new method --- mavctl/messages/Navigator.py | 10 +++++++++- mavctl/tests/flight_tests/air.py | 5 +---- mavctl/tests/flight_tests/auto.py | 6 +----- mavctl/tests/flight_tests/first_flight.py | 5 +---- mavctl/tests/flight_tests/plane.py | 7 +------ mavctl/tests/flight_tests/quad.py | 7 +------ mavctl/tests/flight_tests/swarm/copter1.py | 10 ++-------- mavctl/tests/flight_tests/swarm/copter2.py | 5 +---- mavctl/tests/flight_tests/waypoint.py | 2 +- 9 files changed, 18 insertions(+), 39 deletions(-) diff --git a/mavctl/messages/Navigator.py b/mavctl/messages/Navigator.py index ebd6b36..1341418 100644 --- a/mavctl/messages/Navigator.py +++ b/mavctl/messages/Navigator.py @@ -48,6 +48,15 @@ def wait_vehicle_armed(self): self.mav.motors_armed_wait() print("Armed!") + def wait_for_mode_and_arm(self, mode="GUIDED", timeout=None) -> bool: + """Wait for the vehicle to enter ``mode`` and finish arming.""" + mode_ready = self.set_mode_wait(mode=mode, timeout=timeout) + if not mode_ready: + return False + + self.wait_vehicle_armed() + return True + def disarm(self): """ Disarms the drone. @@ -450,4 +459,3 @@ def wait_target_reached_global(self, target, timeout = 30): return False return True - diff --git a/mavctl/tests/flight_tests/air.py b/mavctl/tests/flight_tests/air.py index 31cb72b..82a0b59 100644 --- a/mavctl/tests/flight_tests/air.py +++ b/mavctl/tests/flight_tests/air.py @@ -10,10 +10,7 @@ mav = conn.connect() master = Navigator(mav) -while master.wait_vehicle_armed(): - pass - -while not master.set_mode_wait(): +while not master.wait_for_mode_and_arm(): pass print("moving") diff --git a/mavctl/tests/flight_tests/auto.py b/mavctl/tests/flight_tests/auto.py index 6660f4d..cb8b2c6 100644 --- a/mavctl/tests/flight_tests/auto.py +++ b/mavctl/tests/flight_tests/auto.py @@ -11,10 +11,6 @@ master = Navigator(mav) master.send_status_message("MAVCTL: Online") -while master.wait_vehicle_armed(): +while not master.wait_for_mode_and_arm(): pass -while not master.set_mode_wait(): - pass - - diff --git a/mavctl/tests/flight_tests/first_flight.py b/mavctl/tests/flight_tests/first_flight.py index 1933777..5300dfb 100644 --- a/mavctl/tests/flight_tests/first_flight.py +++ b/mavctl/tests/flight_tests/first_flight.py @@ -11,10 +11,7 @@ master = Navigator(mav) master.send_status_message("MAVCTL: Online") -while master.wait_vehicle_armed(): - pass - -while not master.set_mode_wait(): +while not master.wait_for_mode_and_arm(): pass master.takeoff(10) diff --git a/mavctl/tests/flight_tests/plane.py b/mavctl/tests/flight_tests/plane.py index 7ed6a93..a90fd11 100644 --- a/mavctl/tests/flight_tests/plane.py +++ b/mavctl/tests/flight_tests/plane.py @@ -6,12 +6,7 @@ mav = conn.connect() master = Navigator(mav) - - -while master.wait_vehicle_armed(): - pass - -while not master.set_mode_wait(): +while not master.wait_for_mode_and_arm(): pass print("moving") diff --git a/mavctl/tests/flight_tests/quad.py b/mavctl/tests/flight_tests/quad.py index 85349e5..d62df93 100644 --- a/mavctl/tests/flight_tests/quad.py +++ b/mavctl/tests/flight_tests/quad.py @@ -6,12 +6,7 @@ mav = conn.connect() master = Navigator(mav) - - -while master.wait_vehicle_armed(): - pass - -while not master.set_mode_wait(): +while not master.wait_for_mode_and_arm(): pass master.takeoff(10) diff --git a/mavctl/tests/flight_tests/swarm/copter1.py b/mavctl/tests/flight_tests/swarm/copter1.py index ca989de..a88ce5d 100644 --- a/mavctl/tests/flight_tests/swarm/copter1.py +++ b/mavctl/tests/flight_tests/swarm/copter1.py @@ -17,17 +17,11 @@ master2 = Navigator(mav2) -while master1.wait_vehicle_armed(): +while not master1.wait_for_mode_and_arm(): pass -while not master1.set_mode_wait(): - pass - - -while master2.wait_vehicle_armed(): - pass -while not master2.set_mode_wait(): +while not master2.wait_for_mode_and_arm(): pass diff --git a/mavctl/tests/flight_tests/swarm/copter2.py b/mavctl/tests/flight_tests/swarm/copter2.py index 1933777..5300dfb 100644 --- a/mavctl/tests/flight_tests/swarm/copter2.py +++ b/mavctl/tests/flight_tests/swarm/copter2.py @@ -11,10 +11,7 @@ master = Navigator(mav) master.send_status_message("MAVCTL: Online") -while master.wait_vehicle_armed(): - pass - -while not master.set_mode_wait(): +while not master.wait_for_mode_and_arm(): pass master.takeoff(10) diff --git a/mavctl/tests/flight_tests/waypoint.py b/mavctl/tests/flight_tests/waypoint.py index dcfd739..cf615b0 100644 --- a/mavctl/tests/flight_tests/waypoint.py +++ b/mavctl/tests/flight_tests/waypoint.py @@ -7,7 +7,7 @@ mav = conn.connect() master = Navigator(mav) -while master.set_mode_wait() and master.wait_vehicle_armed(): +while not master.wait_for_mode_and_arm(): pass master.takeoff(10) From e3367adb170ba9d6834e0d93bf97e767de49db30 Mon Sep 17 00:00:00 2001 From: Fawwaz Date: Sat, 27 Sep 2025 21:57:36 -0600 Subject: [PATCH 2/3] modified some logic behind the the mode/arm function --- mavctl/messages/{Navigator.py => navigator.py} | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) rename mavctl/messages/{Navigator.py => navigator.py} (98%) diff --git a/mavctl/messages/Navigator.py b/mavctl/messages/navigator.py similarity index 98% rename from mavctl/messages/Navigator.py rename to mavctl/messages/navigator.py index 1341418..b28362c 100644 --- a/mavctl/messages/Navigator.py +++ b/mavctl/messages/navigator.py @@ -49,13 +49,14 @@ def wait_vehicle_armed(self): print("Armed!") def wait_for_mode_and_arm(self, mode="GUIDED", timeout=None) -> bool: - """Wait for the vehicle to enter ``mode`` and finish arming.""" + """Wait for the vehicle to enter ``mode`` and to be armed""" mode_ready = self.set_mode_wait(mode=mode, timeout=timeout) if not mode_ready: return False - - self.wait_vehicle_armed() - return True + + while not self.wait_vehicle_armed(): + return True + pass def disarm(self): """ @@ -93,7 +94,6 @@ def set_mode_wait(self, mode = "GUIDED", timeout = None) -> bool: start_time = time.time() mode_mapping = self.mav.mode_mapping() - print(mode_mapping) if mode not in mode_mapping: raise ValueError("MAVCTL Error: Mode " + mode + "not recognized") @@ -116,7 +116,6 @@ def set_mode_wait(self, mode = "GUIDED", timeout = None) -> bool: if msg: current_mode_id = msg.custom_mode - print(current_mode_id, mode_id) if current_mode_id == mode_id: print("MAVCTL: Set to " + mode + " mode") return True From bbd7f25d23b6eb6b598152fc8c0fdb6206a812f7 Mon Sep 17 00:00:00 2001 From: HameedFawwaz Date: Fri, 28 Nov 2025 15:12:05 -0700 Subject: [PATCH 3/3] Minor changes --- mavctl/messages/navigator.py | 1 - mavctl/tests/flight_tests/first_flight.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/mavctl/messages/navigator.py b/mavctl/messages/navigator.py index b28362c..80c3e0a 100644 --- a/mavctl/messages/navigator.py +++ b/mavctl/messages/navigator.py @@ -53,7 +53,6 @@ def wait_for_mode_and_arm(self, mode="GUIDED", timeout=None) -> bool: mode_ready = self.set_mode_wait(mode=mode, timeout=timeout) if not mode_ready: return False - while not self.wait_vehicle_armed(): return True pass diff --git a/mavctl/tests/flight_tests/first_flight.py b/mavctl/tests/flight_tests/first_flight.py index 5300dfb..dbd1f78 100644 --- a/mavctl/tests/flight_tests/first_flight.py +++ b/mavctl/tests/flight_tests/first_flight.py @@ -1,6 +1,6 @@ from connect import conn from pymavlink import mavutil -from messages.Navigator import Navigator +from messages.navigator import Navigator from messages.messenger import Messenger from messages import advanced import time