Files
BQP/srcs/RobotNet10/Shared/RobotNet10.Shared/Sensor/MagneticField.cs
2026-07-13 09:25:40 +07:00

59 lines
1.8 KiB
C#

using RobotNet10.Shared.Geometry;
using RobotNet10.Shared.Numbers;
namespace RobotNet10.Shared.Sensor;
/// <summary>
/// MagneticField message (sensor_msgs/MagneticField)
/// Measurement of the Magnetic Field vector at a specific location
/// </summary>
public struct MagneticField
{
/// <summary>
/// Header with timestamp and frame ID
/// </summary>
public Header Header { get; set; }
/// <summary>
/// Magnetic field vector in Tesla
/// </summary>
public RobotNet10.Shared.Numbers.Vector3 MagneticFieldVector { get; set; }
/// <summary>
/// Covariance matrix (row-major about x, y, z axes)
/// Size: 9 (3x3 matrix)
/// </summary>
public double[] MagneticFieldCovariance { get; set; }
/// <summary>
/// Size of magnetic field covariance matrix (3x3 = 9 elements)
/// </summary>
public const int MagneticFieldCovarianceSize = 9;
/// <summary>
/// Default constructor
/// </summary>
public MagneticField()
{
Header = new Header();
MagneticFieldVector = new RobotNet10.Shared.Numbers.Vector3();
MagneticFieldCovariance = new double[MagneticFieldCovarianceSize];
}
/// <summary>
/// Constructor with parameters
/// </summary>
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;
}
}