Simplify fleet curve configuration
This commit is contained in:
@@ -452,12 +452,12 @@ namespace MultiWheelC
|
||||
}
|
||||
|
||||
track.Speed = speed;
|
||||
track.CarDirectionBias = PilotDefinition.Conf.FleetCurveCarDirectionBias;
|
||||
track.CarDirectionBias = 0f;
|
||||
|
||||
DLog.Log(
|
||||
$"call FleetCurveWalk(src=({srcX:0},{srcY:0},id:{srcId}), dst=({dstX:0},{dstY:0},id:{dstId}), " +
|
||||
$"speed={speed:0.000}, trackType={trackType}, controls={controlPointNum}, track={track.GetType().Name}, " +
|
||||
$"carDirectionBias={PilotDefinition.Conf.FleetCurveCarDirectionBias:0.0})",
|
||||
$"carDirectionBias=0.0)",
|
||||
"FleetCurveDbg");
|
||||
|
||||
if (dstId != -1)
|
||||
@@ -473,8 +473,7 @@ namespace MultiWheelC
|
||||
{
|
||||
Track = track,
|
||||
CurveSpeed = speed,
|
||||
CarDirectionBias = PilotDefinition.Conf.FleetCurveCarDirectionBias,
|
||||
BezierResolution = PilotDefinition.Conf.FleetCurveBezierResolution,
|
||||
CarDirectionBias = 0f,
|
||||
SlowDistance = PilotDefinition.Conf.FleetCurveSlowDistance,
|
||||
FinishDistance = PilotDefinition.Conf.FleetCurveFinishDistance,
|
||||
FinishSpeed = PilotDefinition.Conf.FleetCurveFinishSpeed,
|
||||
@@ -492,7 +491,7 @@ namespace MultiWheelC
|
||||
if (srcId != -1)
|
||||
{
|
||||
Leave(srcId);
|
||||
DLog.Log($"閲婃斁鏀捐溅鐐箋srcId}", "FleetCurveDbg");
|
||||
DLog.Log($"release srcId={srcId}", "FleetCurveDbg");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -287,9 +287,7 @@ public class FleetCrabWalk : MovementDefinition
|
||||
"FleetCrabDbg");
|
||||
|
||||
var gcpLimit = Math.Max(1f, Math.Abs(GcpThetaThreshold));
|
||||
var controlRadius = Math.Max(1f, Math.Abs(conf.MultiVehicleControlRadius > 0
|
||||
? conf.MultiVehicleControlRadius
|
||||
: conf.TestCarSyncDistance / 2f));
|
||||
var controlRadius = Math.Max(1f, Math.Abs(conf.TestCarSyncDistance) / 2f);
|
||||
ResolveCrabDriveEquivalent(0f, (float)CommonMath.ThDiff(phi, theta),
|
||||
(float)CommonMath.ThDiff(phi, theta), gcpLimit, out _, out var holdFrontTh, out var holdRearTh,
|
||||
out _, out _);
|
||||
|
||||
@@ -289,9 +289,7 @@ public class FleetCurveWalk : MovementDefinition
|
||||
var resolution = Math.Max(2, BezierResolution);
|
||||
var speedFinish = Math.Min(baseSpeed, Math.Abs(FinishSpeed));
|
||||
var gcpLimit = Math.Max(1f, Math.Abs(GcpThetaThreshold));
|
||||
var controlRadius = Math.Max(1f, Math.Abs(conf.MultiVehicleControlRadius > 0
|
||||
? conf.MultiVehicleControlRadius
|
||||
: conf.TestCarSyncDistance / 2f));
|
||||
var controlRadius = Math.Max(1f, Math.Abs(conf.TestCarSyncDistance) / 2f);
|
||||
|
||||
ApplyFleetControlPointRadius(chassis, controlRadius);
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ using CommonUsage.Chassis;
|
||||
using CommonUsage.Mathematics;
|
||||
using MDCSToolBox.Clumsy.Movements;
|
||||
using MDCSToolBox.Clumsy.Pilot;
|
||||
using MDCSToolBox.Clumsy.Tracks;
|
||||
|
||||
namespace MultiWheelC;
|
||||
|
||||
@@ -441,21 +442,25 @@ public class FleetCurveWalkTest : MovementTest
|
||||
return;
|
||||
}
|
||||
|
||||
if (!FleetCurveWalk.TryParsePointList(PilotDefinition.Conf.FleetCurveControlPoints,
|
||||
out var relativePoints, out var error))
|
||||
var pointCount = Math.Max(3, PilotDefinition.Conf.FleetCurveTestControlPointCount);
|
||||
var controlPoints = new List<Vector2>();
|
||||
for (var i = 0; i < pointCount; i++)
|
||||
controlPoints.Add(UI.GetPoint($"FleetCurve point {i + 1}/{pointCount}"));
|
||||
var fleetCenter = new Vector2(x, y);
|
||||
if (Vector2.Distance(fleetCenter, controlPoints[0]) >
|
||||
Vector2.Distance(fleetCenter, controlPoints[controlPoints.Count - 1]))
|
||||
controlPoints.Reverse();
|
||||
var track = new BezierTrack(controlPoints)
|
||||
{
|
||||
DLog.Log($"FleetCurveWalkTest abort: {error}", "FleetCurveDbg");
|
||||
Hedingben.ToastText(error, "FleetCurve");
|
||||
return;
|
||||
}
|
||||
Speed = PilotDefinition.Conf.FleetCurveSpeed,
|
||||
CarDirectionBias = 0f
|
||||
};
|
||||
|
||||
var controlPoints = FleetCurveWalk.BuildRelativeControlPoints(new Vector2(x, y), th, relativePoints);
|
||||
_proc = new FleetCurveWalk
|
||||
{
|
||||
ControlPoints = controlPoints,
|
||||
Track = track,
|
||||
CurveSpeed = PilotDefinition.Conf.FleetCurveSpeed,
|
||||
CarDirectionBias = PilotDefinition.Conf.FleetCurveCarDirectionBias,
|
||||
BezierResolution = PilotDefinition.Conf.FleetCurveBezierResolution,
|
||||
CarDirectionBias = 0f,
|
||||
SlowDistance = PilotDefinition.Conf.FleetCurveSlowDistance,
|
||||
FinishDistance = PilotDefinition.Conf.FleetCurveFinishDistance,
|
||||
FinishSpeed = PilotDefinition.Conf.FleetCurveFinishSpeed,
|
||||
|
||||
@@ -46,9 +46,6 @@ public class PilotConfig : MultiWheelPilotConfig
|
||||
|
||||
[FieldMember(desc = "多车联动:启用互识别纠正")] public bool MultiVehicleUseDetect = false;
|
||||
|
||||
// E: 编队控制点半径(mm)。0 表示自动取 syncDistance/2(与 SetOriginBias 几何一致),>0 时按本值固定。
|
||||
// 取代历史硬编码 510,避免改间距后控制点半径不跟随导致转向/补偿几何错位。
|
||||
[FieldMember(desc = "多车联动:控制点半径(mm,0=syncDistance/2)")] public float MultiVehicleControlRadius = 0f;
|
||||
// B: 自动速度命令新鲜度(ms)。主车超过此时长未从路径控制器收到新速度命令(路径结束/早退/卡顿),
|
||||
// 即视为失效并清零下发速度,避免车队按末速度滑行。0 表示自动取 max(200, interval*4)。
|
||||
[FieldMember(desc = "多车联动:自动速度命令超时(ms,0=auto)")] public int MultiVehicleAutoCmdTimeoutMs = 0;
|
||||
@@ -204,18 +201,12 @@ public class PilotConfig : MultiWheelPilotConfig
|
||||
public float FleetCrabStartWheelAlignDeg = 2f;
|
||||
|
||||
// ===== Fleet linked Bezier curve walk =====
|
||||
[FieldMember(desc = "FleetCurve MovementTest control points relative to fleet start; format x,y;x,y;...")]
|
||||
public string FleetCurveControlPoints = "0,0;1000,800;2000,800;3000,0";
|
||||
|
||||
[FieldMember(desc = "FleetCurve Bezier resolution")]
|
||||
public int FleetCurveBezierResolution = 100;
|
||||
[FieldMember(desc = "FleetCurve MovementTest Bezier control point count")]
|
||||
public int FleetCurveTestControlPointCount = 4;
|
||||
|
||||
[FieldMember(desc = "FleetCurve speed(m/s)")]
|
||||
public float FleetCurveSpeed = 0.2f;
|
||||
|
||||
[FieldMember(desc = "FleetCurve car direction bias(deg); body target follows tangent+bias")]
|
||||
public float FleetCurveCarDirectionBias = 0f;
|
||||
|
||||
[FieldMember(desc = "FleetCurve slow distance(mm)")]
|
||||
public float FleetCurveSlowDistance = 2000f;
|
||||
|
||||
|
||||
@@ -1098,10 +1098,8 @@ public class PilotDefinition : MultiWheelPilotDefinition<PilotConfig, PilotDefin
|
||||
if (fleetReady && !fleetStopActive)
|
||||
{
|
||||
chassis.SetOriginBias(layoutX, layoutY, layoutTh);
|
||||
// E: 统一控制点半径——配置 >0 用配置值,否则取 syncDistance/2(与编队几何一致),不再硬编码 510。
|
||||
var controlRadius = Conf.MultiVehicleControlRadius > 0
|
||||
? Conf.MultiVehicleControlRadius
|
||||
: syncDistance / 2f;
|
||||
// E: 统一控制点半径,取 syncDistance/2,与编队几何一致。
|
||||
var controlRadius = syncDistance / 2f;
|
||||
chassis.ControlPointRadius = controlRadius;
|
||||
// #1 纠偏随旋转缩放:把每轮纠偏钳到旋转切向的比例,减速末段切向变小时纠偏同步缩小,杜绝轮向乱摆。
|
||||
chassis.RotateCompTangentFrac = rotateParams.CompTangentFrac;
|
||||
|
||||
Reference in New Issue
Block a user