using RobotNet10.Shared.Geometry; using RobotNet10.Shared.Numbers; namespace RobotNet10.Shared.Sensor; /// /// MagneticField message (sensor_msgs/MagneticField) /// Measurement of the Magnetic Field vector at a specific location /// public struct MagneticField { /// /// Header with timestamp and frame ID /// public Header Header { get; set; } /// /// Magnetic field vector in Tesla /// public RobotNet10.Shared.Numbers.Vector3 MagneticFieldVector { get; set; } /// /// Covariance matrix (row-major about x, y, z axes) /// Size: 9 (3x3 matrix) /// public double[] MagneticFieldCovariance { get; set; } /// /// Size of magnetic field covariance matrix (3x3 = 9 elements) /// public const int MagneticFieldCovarianceSize = 9; /// /// Default constructor /// public MagneticField() { Header = new Header(); MagneticFieldVector = new RobotNet10.Shared.Numbers.Vector3(); MagneticFieldCovariance = new double[MagneticFieldCovarianceSize]; } /// /// Constructor with parameters /// public MagneticField(Header header, RobotNet10.Shared.Numbers.Vector3 magneticFieldVector, double[] magneticFieldCovariance) { Header = header; MagneticFieldVector = magneticFieldVector; if (magneticFieldCovariance == null || magneticFieldCovariance.Length != MagneticFieldCovarianceSize) { throw new ArgumentException($"Magnetic field covariance array must have {MagneticFieldCovarianceSize} elements", nameof(magneticFieldCovariance)); } MagneticFieldCovariance = magneticFieldCovariance; } }