Update fleet manual remote scaling
This commit is contained in:
@@ -26,6 +26,7 @@ public partial class CartDefinition
|
||||
MultiVehicleManualVx = 0;
|
||||
MultiVehicleManualVy = 0;
|
||||
MultiVehicleManualVth = 0;
|
||||
MultiVehicleHold = false;
|
||||
}
|
||||
|
||||
[IOObjectUtility]
|
||||
@@ -43,7 +44,6 @@ public partial class CartDefinition
|
||||
var crabOn = false; // 蟹行(四轮同向平移)
|
||||
var rotateOn = false; // 原地旋转(绕车队中心)
|
||||
// 速度比例 0~1,作用于摇杆输出的线速度/横移/角速度。
|
||||
var speedRatio = 1f;
|
||||
UseGesture? manip = null;
|
||||
|
||||
// 0=常规(前进+转向) 1=蟹行 2=原地旋转。crab 优先于 rotate(同时打开时蟹行生效)。
|
||||
@@ -87,7 +87,6 @@ public partial class CartDefinition
|
||||
return;
|
||||
}
|
||||
|
||||
var ratio = Math.Clamp(speedRatio, 0, 1);
|
||||
var px = Math.Clamp(pos.X, -1, 1);
|
||||
var py = Math.Clamp(pos.Y, -1, 1);
|
||||
var mode = CurrentMode();
|
||||
@@ -95,31 +94,27 @@ public partial class CartDefinition
|
||||
|
||||
if (mode == 2)
|
||||
{
|
||||
// 原地旋转:pos.X(左右) → 角速度(deg/s),绕车队中心。
|
||||
MultiVehicleManualVx = 0;
|
||||
MultiVehicleManualVy = 0;
|
||||
MultiVehicleManualVth = px * MaxManualAngularSpeed * ratio;
|
||||
MultiVehicleManualVth = px;
|
||||
}
|
||||
else if (mode == 1)
|
||||
{
|
||||
// 蟹行:pos.Y → 前后向线速度,pos.X → 横向线速度(m/s)。
|
||||
MultiVehicleManualVx = py * MaxManualSpeed * ratio;
|
||||
MultiVehicleManualVy = px * MaxManualSpeed * ratio;
|
||||
MultiVehicleManualVx = py;
|
||||
MultiVehicleManualVy = px;
|
||||
MultiVehicleManualVth = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 常规:pos.Y → 线速度(m/s),pos.X → 转向角(deg)。
|
||||
MultiVehicleManualVx = py * MaxManualSpeed * ratio;
|
||||
MultiVehicleManualVx = py;
|
||||
MultiVehicleManualVy = 0;
|
||||
MultiVehicleManualVth = px * MaxManualAngularSpeed * ratio;
|
||||
MultiVehicleManualVth = px;
|
||||
}
|
||||
|
||||
if ((DateTime.Now - _fleetDiagLastStick).TotalMilliseconds >= 200)
|
||||
{
|
||||
_fleetDiagLastStick = DateTime.Now;
|
||||
FleetDiag($"STICK mode={mode} pos=({pos.X:0.00},{pos.Y:0.00}) manip={manipulating} ratio={ratio:0.00} " +
|
||||
$"-> Vx={MultiVehicleManualVx:0.000} Vy={MultiVehicleManualVy:0.000} Vth={MultiVehicleManualVth:0.0} en={MultiVehicleManualEnabled}");
|
||||
FleetDiag($"STICK mode={mode} pos=({pos.X:0.00},{pos.Y:0.00}) manip={manipulating} raw " +
|
||||
$"-> Vx={MultiVehicleManualVx:0.000} Vy={MultiVehicleManualVy:0.000} Vth={MultiVehicleManualVth:0.000} en={MultiVehicleManualEnabled}");
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -169,15 +164,6 @@ public partial class CartDefinition
|
||||
}
|
||||
});
|
||||
|
||||
manip.AddWidget(new UseGesture.ThrottleWidget
|
||||
{
|
||||
name = "fleet_speed_ratio",
|
||||
text = "速度比例",
|
||||
position = "50%+10px, 64%+10px",
|
||||
size = "37.5%-10px, 10%-10px",
|
||||
bounceBack = false,
|
||||
OnValue = (val, _) => speedRatio = Math.Clamp(val, 0, 1)
|
||||
});
|
||||
|
||||
manip.AddWidget(new UseGesture.ButtonWidget
|
||||
{
|
||||
@@ -218,8 +204,7 @@ public partial class CartDefinition
|
||||
pb.SeparatorText("状态");
|
||||
var modeName = MultiVehicleManualMode == 2 ? "原地旋转" : MultiVehicleManualMode == 1 ? "蟹行" : "常规";
|
||||
pb.Label($"车队联动: {MultiVehicleManualEnabled} 模式: {modeName}");
|
||||
pb.Label($"速度比例: {speedRatio:0.00}");
|
||||
pb.Label($"Vx={MultiVehicleManualVx:0.000} Vy={MultiVehicleManualVy:0.000} m/s, Vth={MultiVehicleManualVth:0.0}");
|
||||
pb.Label($"VxRatio={MultiVehicleManualVx:0.000} VyRatio={MultiVehicleManualVy:0.000}, VthRatio={MultiVehicleManualVth:0.000}");
|
||||
pb.Label($"优先级: {CartActivator.CartDefinition.currentPriority} ({CartActivator.CartDefinition.currentPriorityDesc})");
|
||||
pb.Label("请勿同时打开「手动控制」面板");
|
||||
pb.Panel.Repaint();
|
||||
|
||||
Reference in New Issue
Block a user