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;
}
}