新增倒车以及项目结构优化

This commit is contained in:
2026-08-11 17:06:26 +08:00
parent a59499e638
commit 33a33af710
41 changed files with 817 additions and 2654 deletions
+47 -9
View File
@@ -9,16 +9,54 @@ using MyParking.Shared;
namespace MultiWheelC
{
// C层测试准备:停车并等待四个舵轮稳定回到车体前向0°。
/// <summary>
/// 停车并等待四个舵轮稳定回到车体前向0°。
/// </summary>
public class PrepareWheelsForward : MovementDefinition
{
public float ToleranceDegrees = 2f;
public float StableSeconds = 0.3f;
public float TimeoutSeconds = 10f;
/// <summary>
/// 获取或设置本次动作的回正到位容差覆盖值,单位为deg;为空时读取车辆配置。
/// </summary>
public float? ToleranceDegrees;
/// <summary>
/// 获取或设置本次动作的稳定确认时间覆盖值,单位为s;为空时读取车辆配置。
/// </summary>
public float? StableSeconds;
/// <summary>
/// 获取或设置本次动作的超时覆盖值,单位为s;为空时读取车辆配置,0表示关闭超时。
/// </summary>
public float? TimeoutSeconds;
public bool Completed { get; private set; }
/// <summary>
/// 读取一次有效配置并等待全部舵轮在容差内稳定保持车体前向0°。
/// </summary>
public override IEnumerable<bool> Get()
{
var config = PilotDefinition.Conf;
var toleranceDegrees =
ToleranceDegrees ??
config.ParkingWheelForwardToleranceDegrees;
var stableSeconds =
StableSeconds ??
config.ParkingWheelForwardStableSeconds;
var timeoutSeconds =
TimeoutSeconds ??
config.ParkingWheelForwardTimeoutSeconds;
NumericGuard.EnsureFiniteNonNegative(
toleranceDegrees,
nameof(ToleranceDegrees));
NumericGuard.EnsureFiniteNonNegative(
stableSeconds,
nameof(StableSeconds));
NumericGuard.EnsureFiniteNonNegative(
timeoutSeconds,
nameof(TimeoutSeconds));
var chassis =
PilotDefinition.Chassis as MultiWheelChassis;
if (chassis == null)
@@ -32,7 +70,7 @@ namespace MultiWheelC
PilotDefinition.Self.CarNum);
adapter.ResetToBodyFrame();
var toleranceRadians =
AngleMath.DegreesToRadians(ToleranceDegrees);
AngleMath.DegreesToRadians(toleranceDegrees);
var startTime = DateTime.UtcNow;
DateTime? alignedSince = null;
@@ -59,7 +97,7 @@ namespace MultiWheelC
if ((DateTime.UtcNow -
alignedSince.Value).TotalSeconds >=
StableSeconds)
stableSeconds)
{
Completed = true;
yield break;
@@ -70,12 +108,12 @@ namespace MultiWheelC
alignedSince = null;
}
if (TimeoutSeconds > 0f &&
if (timeoutSeconds > 0f &&
(DateTime.UtcNow - startTime).TotalSeconds >
TimeoutSeconds)
timeoutSeconds)
{
throw new TimeoutException(
$"舵轮回正超过{TimeoutSeconds:F1}s" +
$"舵轮回正超过{timeoutSeconds:F1}s" +
"测试已经取消。");
}