2026-08-06 15:14:12 +08:00
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
namespace MultiWheelC.Control.Abstractions
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 表示横向控制器生成的车体中心目标曲率命令。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public readonly struct LateralControlCommand
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 创建统一使用SI单位和左转为正约定的横向控制命令。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public LateralControlCommand(
|
|
|
|
|
double targetCurvaturePerMeter)
|
|
|
|
|
{
|
|
|
|
|
EnsureFinite(
|
|
|
|
|
targetCurvaturePerMeter,
|
|
|
|
|
nameof(targetCurvaturePerMeter));
|
|
|
|
|
|
|
|
|
|
TargetCurvaturePerMeter =
|
|
|
|
|
targetCurvaturePerMeter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取车体中心目标轨迹曲率,单位为1/m,左转为正、右转为负。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double TargetCurvaturePerMeter { get; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 创建保持直线行驶的零曲率命令。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static LateralControlCommand Straight =>
|
|
|
|
|
new LateralControlCommand(0.0);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查横向曲率命令是否为有限值。
|
|
|
|
|
/// </summary>
|
|
|
|
|
private static void EnsureFinite(
|
|
|
|
|
double value,
|
|
|
|
|
string parameterName)
|
|
|
|
|
{
|
|
|
|
|
if (double.IsNaN(value) ||
|
|
|
|
|
double.IsInfinity(value))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentOutOfRangeException(
|
|
|
|
|
parameterName,
|
|
|
|
|
"横向控制目标曲率必须是有限值。");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|