using System; using MultiWheelC.TrajectoryPlanning.CoarsePath; namespace MultiWheelC.TrajectoryPlanning.EMPlanner; /// /// 调用方一次性捕获的车辆运动状态;EMPlanner 只消费此快照,不直接读取定位、轮速或系统时钟。 /// public sealed class VehicleMotionState { /// /// 保存调用方捕获的车辆状态。构造器不校验 null、数值有限性、UTC 时效或序列号;服务在接受请求前负责验证,传入 的所有权仍归调用方。 /// public VehicleMotionState( Pose2D pose, double signedLongitudinalSpeedMetersPerSecond, double? longitudinalAccelerationMetersPerSecondSquared, DateTimeOffset capturedAtUtc, long sequenceId) { Pose = pose; SignedLongitudinalSpeedMetersPerSecond = signedLongitudinalSpeedMetersPerSecond; LongitudinalAccelerationMetersPerSecondSquared = longitudinalAccelerationMetersPerSecondSquared; CapturedAtUtc = capturedAtUtc; SequenceId = sequenceId; } /// /// 车辆世界位姿引用,其中位置单位为 m、航向单位为 rad;构造器允许 null,但服务要求有效位姿。 /// public Pose2D Pose { get; } /// /// 沿车辆前向轴的有符号纵向速度,单位 m/s;正负方向约定由上游状态生产者负责,服务要求其为有限数。 /// public double SignedLongitudinalSpeedMetersPerSecond { get; } /// /// 可选的沿车辆前向轴纵向加速度,单位 m/s²;null 表示采集方未提供该量,非 null 值必须由服务验证为有限数。 /// public double? LongitudinalAccelerationMetersPerSecondSquared { get; } /// /// 采集此状态的 UTC 时刻;服务用它相对请求发起时刻判断状态是否过期。 /// public DateTimeOffset CapturedAtUtc { get; } /// /// 调用方提供的状态快照序列版本;服务要求其非负,成功轨迹将其写入元数据供消费者关联。 /// public long SequenceId { get; } }