diff --git a/Tools/autotest/ArduCopter_Tests/BaroDrivers/copter_mission.txt b/Tools/autotest/ArduCopter_Tests/BaroDrivers/copter_mission.txt new file mode 100644 index 0000000000..c844ac4137 --- /dev/null +++ b/Tools/autotest/ArduCopter_Tests/BaroDrivers/copter_mission.txt @@ -0,0 +1,14 @@ +QGC WPL 110 +0 1 0 16 0.000000 0.000000 0.000000 0.000000 -35.362881 149.165222 582.000000 1 +1 0 3 22 0.000000 0.000000 0.000000 0.000000 -35.362881 149.165222 20.000000 1 +2 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.364652 149.163501 0.000000 1 +3 0 3 115 640.000000 20.000000 1.000000 1.000000 0.000000 0.000000 0.000000 1 +4 0 3 19 5.000000 0.000000 0.000000 1.000000 0.000000 0.000000 20.000000 1 +5 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.365361 149.163501 0.000000 1 +6 0 3 16 1.000000 0.000000 0.000000 0.000000 -35.365361 149.163995 40.000000 1 +7 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.365361 149.164563 20.000000 1 +8 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.364652 149.164531 20.000000 1 +9 0 3 16 0.000000 0.000000 0.000000 0.000000 -35.364652 149.163995 20.000000 1 +10 0 3 177 8.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1 +11 0 3 16 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1 +12 0 3 20 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1 diff --git a/Tools/autotest/arducopter.py b/Tools/autotest/arducopter.py index ba1239c0a4..fd71269023 100644 --- a/Tools/autotest/arducopter.py +++ b/Tools/autotest/arducopter.py @@ -6821,6 +6821,63 @@ class AutoTestCopter(AutoTest): if not ok: raise NotAchievedException("check_replay failed") + def BaroDrivers(self): + sensors = [ + ("MS5611", 2), + ] + for (name, bus) in sensors: + self.context_push() + if bus is not None: + self.set_parameter("BARO_EXT_BUS", bus) + self.set_parameter("BARO_PROBE_EXT", 1 << 2) + self.reboot_sitl() + self.wait_ready_to_arm() + self.arm_vehicle() + + # insert listener to compare airspeeds: + messages = [None, None, None] + + global count + count = 0 + + def check_pressure(mav, m): + global count + m_type = m.get_type() + count += 1 + # if count > 500: + # if press_abs[0] is None or press_abs[1] is None: + # raise NotAchievedException("Not receiving messages") + if m_type == 'SCALED_PRESSURE3': + off = 2 + elif m_type == 'SCALED_PRESSURE2': + off = 1 + elif m_type == 'SCALED_PRESSURE': + off = 0 + else: + return + + messages[off] = m + + # FIXME: make the numbers we use in the i2c simulated + # baros closer to the ones from AP_Baro_SITL + if None in messages: + return + first = messages[0] + for msg in messages[1:]: + delta_press_abs = abs(first.press_abs - msg.press_abs) + if delta_press_abs > 5: + raise NotAchievedException("Press_Abs mismatch (press1=%s press2=%s)" % (first, msg)) + delta_temperature = abs(first.temperature - msg.temperature) + if delta_temperature > 1000: # that's 10-degrees leeway + raise NotAchievedException("Temperature mismatch (t1=%s t2=%s)" % (first, msg)) + self.install_message_hook_context(check_pressure) + self.fly_mission("copter_mission.txt", strict=False) + if None in messages: + raise NotAchievedException("Missing a message") + + self.context_pop() + self.reboot_sitl() + def test_copter_gps_zero(self): # https://github.com/ArduPilot/ardupilot/issues/14236 self.progress("arm the vehicle and takeoff in Guided") @@ -7331,6 +7388,10 @@ class AutoTestCopter(AutoTest): "Test RangeFinder Basic Functionality", self.test_rangefinder), # 23s + ("BaroDrivers", + "Test Baro Drivers", + self.BaroDrivers), + ("SurfaceTracking", "Test Surface Tracking", self.test_surface_tracking), # 45s