using System;
using CommonUsage.Chassis;
using MyParking.Shared;
namespace MultiWheelC.StateEstimation
{
///
/// 根据车载配置创建Detour位姿过滤与电机反馈平面速度组合的停车状态源。
///
public static class ParkingVehicleStateProviderFactory
{
///
/// 使用当前车辆运行配置创建停车轨迹控制的默认状态源。
///
public static WheelFeedbackVehicleStateProvider Create(
MultiWheelChassis chassis)
{
return Create(
chassis,
PilotDefinition.Conf);
}
///
/// 使用指定配置快照创建停车轨迹控制的默认状态源。
///
public static WheelFeedbackVehicleStateProvider Create(
MultiWheelChassis chassis,
PilotConfig config)
{
if (chassis == null)
{
throw new ArgumentNullException(nameof(chassis));
}
if (config == null)
{
throw new ArgumentNullException(nameof(config));
}
var velocityEstimator =
new VelocityEstimator2D(
config.ParkingDetourLinearVelocityFilterSeconds,
config.ParkingDetourAngularVelocityFilterSeconds);
var detourStateProvider =
new DetourVehicleStateProvider(
velocityEstimator,
config.ParkingDetourMaximumLinearSpeed,
AngleMath.DegreesToRadians(
config
.ParkingDetourMaximumAngularSpeedDegrees),
config.ParkingDetourPositionJumpMargin,
AngleMath.DegreesToRadians(
config.ParkingDetourHeadingJumpMarginDegrees),
config.ParkingDetourVelocityPositionResidual,
AngleMath.DegreesToRadians(
config
.ParkingDetourVelocityHeadingResidualDegrees),
config.ParkingDetourStationaryConfirmationSeconds,
config.ParkingDetourHeadingOutlierConfirmationFrames,
config
.ParkingDetourHeadingOutlierPredictionTimeoutSeconds,
config.ParkingDetourJumpConfirmationFrames,
config.ParkingDetourJumpConfirmationTimeoutSeconds,
config.ParkingDetourMaximumAutomaticFrameShift,
AngleMath.DegreesToRadians(
config
.ParkingDetourMaximumAutomaticHeadingShiftDegrees),
config.ParkingDetourMaximumCachedFrameAgeSeconds,
config
.ParkingDetourLocalizationQualityConfirmationFrames);
return new WheelFeedbackVehicleStateProvider(
detourStateProvider,
chassis,
config.ParkingWheelVelocityFilterSeconds);
}
}
}