using System; namespace MultiWheelC.Control.Allocation { /// /// 表示发送给旧版多舵轮四轮解算前的有符号速度和前后GCP角度命令。 /// public readonly struct GcpMotionCommand { /// /// 创建统一使用m/s和rad的前后几何控制点运动命令。 /// public GcpMotionCommand( double speedMetersPerSecond, double frontAngleRadians, double rearAngleRadians) { EnsureFinite( speedMetersPerSecond, nameof(speedMetersPerSecond)); EnsureFinite( frontAngleRadians, nameof(frontAngleRadians)); EnsureFinite( rearAngleRadians, nameof(rearAngleRadians)); SpeedMetersPerSecond = speedMetersPerSecond; FrontAngleRadians = frontAngleRadians; RearAngleRadians = rearAngleRadians; } /// /// 获取准备交给底盘的有符号纵向速度,单位为m/s,正值表示前进。 /// public double SpeedMetersPerSecond { get; } /// /// 获取前几何控制点相对车体X轴的目标方向,单位为rad,逆时针为正。 /// public double FrontAngleRadians { get; } /// /// 获取后几何控制点相对车体X轴的目标方向,单位为rad,逆时针为正。 /// public double RearAngleRadians { get; } /// /// 检查底盘中间命令是否为有限值。 /// private static void EnsureFinite( double value, string parameterName) { if (double.IsNaN(value) || double.IsInfinity(value)) { throw new ArgumentOutOfRangeException( parameterName, "GCP运动命令必须由有限值组成。"); } } } }