Files
ParkingRobot/ClumsyPilot/ParkrobTrajplanner/EMPlanner/Configuration/LongitudinalConfiguration.cs
T

79 lines
4.3 KiB
C#

namespace MultiWheelC.TrajectoryPlanning.EMPlanner;
/// <summary>
/// ST 纵向优化的速度、舒适性和终端保持限制配置;所有数值由 <see cref="EmPlannerConfiguration.CreateDefault"/> 提供低速泊车默认值。
/// </summary>
public sealed class LongitudinalConfiguration
{
/// <summary>
/// 前进方向允许的最大速度;单位 m/s,默认值 1,必须为正有限值。
/// </summary>
public double MaximumForwardSpeedMetersPerSecond { get; set; }
/// <summary>
/// 倒车方向允许的最大速度;单位 m/s,默认值 0.5,必须为正有限值。
/// </summary>
public double MaximumReverseSpeedMetersPerSecond { get; set; }
/// <summary>
/// 前进方向的目标巡航速度;单位 m/s,默认值 1,必须为正有限值且不得超过 <see cref="MaximumForwardSpeedMetersPerSecond"/>。
/// </summary>
public double DesiredForwardSpeedMetersPerSecond { get; set; }
/// <summary>
/// 倒车方向的目标巡航速度;单位 m/s,默认值 0.5,必须为正有限值且不得超过 <see cref="MaximumReverseSpeedMetersPerSecond"/>。
/// </summary>
public double DesiredReverseSpeedMetersPerSecond { get; set; }
/// <summary>
/// 允许的最大纵向加速度;单位 m/s²,默认值 0.20,必须为正有限值。
/// </summary>
public double MaximumAccelerationMetersPerSecondSquared { get; set; }
/// <summary>
/// 允许的最大纵向减速度幅值;单位 m/s²,默认值 0.30,必须为正有限值。
/// </summary>
public double MaximumDecelerationMetersPerSecondSquared { get; set; }
/// <summary>
/// 允许的最大纵向加加速度幅值;单位 m/s³,默认值 0.50,必须为正有限值。
/// </summary>
public double MaximumJerkMetersPerSecondCubed { get; set; }
/// <summary>
/// 由速度和曲率共同施加的最大横向加速度;单位 m/s²,默认值 0.20,必须为正有限值。
/// </summary>
public double MaximumLateralAccelerationMetersPerSecondSquared { get; set; }
/// <summary>
/// 车辆曲率随时间变化的上限;单位 1/(m·s),默认值 0.50,必须为正有限值。
/// </summary>
public double MaximumCurvatureRatePerMeterPerSecond { get; set; }
/// <summary>
/// 将进度速度视为停止的容差;单位 m/s,默认值 0.01,必须为非负有限值。
/// </summary>
public double StopSpeedToleranceMetersPerSecond { get; set; }
/// <summary>
/// 到达零速度后需保持的时长;单位 s,默认值 0.20,必须为正有限值。
/// </summary>
public double ZeroSpeedHoldSeconds { get; set; }
/// <summary>
/// 纵向 QP 目标函数的权重集合;无直接单位,必须非空且其每项为非负有限值,默认值为新的 <see cref="LongitudinalWeights"/> 对象。
/// </summary>
public LongitudinalWeights Weights { get; set; }
/// <summary>
/// 复制当前纵向配置;输入为当前标量和权重引用,输出为不共享非空权重对象的可修改快照,权重为 <c>null</c> 时保持为空且不产生失败状态。
/// </summary>
internal LongitudinalConfiguration Copy()
{
return new LongitudinalConfiguration
{
MaximumForwardSpeedMetersPerSecond = MaximumForwardSpeedMetersPerSecond,
MaximumReverseSpeedMetersPerSecond = MaximumReverseSpeedMetersPerSecond,
DesiredForwardSpeedMetersPerSecond = DesiredForwardSpeedMetersPerSecond,
DesiredReverseSpeedMetersPerSecond = DesiredReverseSpeedMetersPerSecond,
MaximumAccelerationMetersPerSecondSquared = MaximumAccelerationMetersPerSecondSquared,
MaximumDecelerationMetersPerSecondSquared = MaximumDecelerationMetersPerSecondSquared,
MaximumJerkMetersPerSecondCubed = MaximumJerkMetersPerSecondCubed,
MaximumLateralAccelerationMetersPerSecondSquared = MaximumLateralAccelerationMetersPerSecondSquared,
MaximumCurvatureRatePerMeterPerSecond = MaximumCurvatureRatePerMeterPerSecond,
StopSpeedToleranceMetersPerSecond = StopSpeedToleranceMetersPerSecond,
ZeroSpeedHoldSeconds = ZeroSpeedHoldSeconds,
Weights = Weights == null ? null : Weights.Copy(),
};
}
}