From 8f6990c2e30aacf12899310ef8e46242465f34ab Mon Sep 17 00:00:00 2001 From: Bartok9 Date: Thu, 23 Jul 2026 05:22:56 -0400 Subject: [PATCH] fix(python): type magnetometer covariance as list Match C++ MagnetometerBase::Output vector (3x3) instead of a float default that misrepresents the msgpack field shape. Signed-off-by: Bartok9 --- PythonClient/airsim/tests/__init__.py | 0 .../tests/test_magnetometer_covariance.py | 36 +++++++++++++++++++ PythonClient/airsim/types.py | 3 +- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 PythonClient/airsim/tests/__init__.py create mode 100644 PythonClient/airsim/tests/test_magnetometer_covariance.py diff --git a/PythonClient/airsim/tests/__init__.py b/PythonClient/airsim/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/PythonClient/airsim/tests/test_magnetometer_covariance.py b/PythonClient/airsim/tests/test_magnetometer_covariance.py new file mode 100644 index 0000000000..fcf3295d0e --- /dev/null +++ b/PythonClient/airsim/tests/test_magnetometer_covariance.py @@ -0,0 +1,36 @@ +import unittest + +import numpy as np + +# Import without full client stack when msgpackrpc missing +try: + from airsim.types import MagnetometerData, Vector3r +except Exception: + import sys, types + from pathlib import Path + root = Path(__file__).resolve().parents[2] + sys.path.insert(0, str(root)) + if 'msgpackrpc' not in sys.modules: + sys.modules['msgpackrpc'] = types.ModuleType('msgpackrpc') + from airsim.types import MagnetometerData, Vector3r + + +class MagnetometerCovarianceTests(unittest.TestCase): + def test_default_is_list(self): + m = MagnetometerData() + self.assertIsInstance(m.magnetic_field_covariance, list) + self.assertEqual(m.magnetic_field_covariance, []) + + def test_from_msgpack_list(self): + payload = { + 'time_stamp': np.uint64(1), + 'magnetic_field_body': {'x_val': 0.0, 'y_val': 0.0, 'z_val': 0.1}, + 'magnetic_field_covariance': [1.0] * 9, + } + m = MagnetometerData.from_msgpack(payload) + self.assertEqual(len(m.magnetic_field_covariance), 9) + self.assertIsInstance(m.magnetic_field_covariance, list) + + +if __name__ == '__main__': + unittest.main() diff --git a/PythonClient/airsim/types.py b/PythonClient/airsim/types.py index 7aef005549..d0f14caab3 100644 --- a/PythonClient/airsim/types.py +++ b/PythonClient/airsim/types.py @@ -435,7 +435,8 @@ class BarometerData(MsgpackMixin): class MagnetometerData(MsgpackMixin): time_stamp = np.uint64(0) magnetic_field_body = Vector3r() - magnetic_field_covariance = 0.0 + # C++ MagnetometerBase::Output uses vector (3x3, 9 elements) + magnetic_field_covariance = [] class GnssFixType(MsgpackMixin): GNSS_FIX_NO_FIX = 0