Update fleet crab walk control
This commit is contained in:
+32
-19
@@ -144,28 +144,45 @@ TwoLegGuessX = -(TestCarSyncDistance - DeltaDetectCenter)
|
||||
|
||||
## 6. 自动蟹行动作(FleetCrabWalk / MovementTest「车队联动-自动蟹行」)
|
||||
|
||||
在 Clumsy 侧 MovementTest 面板触发,以**当前车队中心**为起点,构造一条与车队朝向夹角 `FleetCrabAngleDeg`、长度 `FleetCrabLengthMm` 的**直线路径**,执行侧复用 FleetRemote 已验证丝滑的脚本手动等价输入(`MultiVehicleScriptEnabled + mode=1`)让整队**斜向平移(蟹行)**:
|
||||
在 Clumsy 侧 MovementTest 面板触发,以**当前车队中心**为起点,构造一条与启动时车队朝向夹角 `FleetCrabAngleDeg`、长度 `FleetCrabLengthMm` 的**直线路径**。MovementTest 会保持启动时车身朝向追踪路径;因此如果“路径相对小车”的夹角为 `x` 度(路径在车体右侧为正),应配置 `FleetCrabAngleDeg = -x`。当前实现不再复用脚本手动链路,而是参考几何控制器思路,在 `MultiWheelC` 内计算并写入 `MultiVehicleAuto...` 字段:
|
||||
|
||||
- 动作每拍读取主车 Detour 反推车队中心,计算直线进度 `along`、横向偏差 `lateral` 和剩余距离 `remain`。
|
||||
- 横向偏差只转成一个**小幅、带斜率限制的蟹行方向修正**,再写入 `MultiVehicleScriptVx/Vy`;`TickMultiVehicle` 仍按手动蟹行逻辑合成 `frontTh==rearTh` 并广播从车。
|
||||
- 这样保留手动蟹行的平滑执行链路,同时让自动动作具备温和的路径纠偏;避免旧几何控制器 `bias/dTh` 直接叠到 gcp 时出现舵角阶跃。
|
||||
- **前提**:在**主车**(`MultiVehicleMasterEndpoint="/"`)上运行,且主车有 Detour 定位(用于反推车队中心起点)。
|
||||
- 动作每拍读取主车 Detour 反推车队中心,计算直线进度 `along`、横向偏差 `lateral`、剩余距离 `remain` 和车身目标朝向偏差 `headingErr`。
|
||||
- `lateral` 通过 `BiasFac/BiasThreshold` 转为前后 GCP 同向舵角修正;`headingErr` 通过 `DthLinearFac/DthLinearThreshold` 转为前后 GCP 反向舵角修正。
|
||||
- 动作直接输出 `MultiVehicleAutoVx/FrontTh/RearTh/IdealX/IdealY/IdealTh`,由 `TickMultiVehicle` 的自动分支统一广播、下发 `SendMotion`,并继续受识别丢失、成员超时、舵角余量不足等整队缓停联锁保护。
|
||||
- **前提**:在**主车**(`MultiVehicleMasterEndpoint="/"`)上运行,且主车有 Detour 定位(用于反推车队中心起点与运行中闭环)。
|
||||
|
||||
| 字段(`clumsy.json` → `msConf`) | 含义 | 默认值 |
|
||||
|------|------|--------|
|
||||
| `FleetCrabAngleDeg` | 蟹行路径**与当前车队朝向的夹角**(deg,逆时针为正)。决定斜行方向:0=正前方,90=正左方平移,-90=正右方。稳态下即各舵轮的蟹行角 | `45` |
|
||||
| `FleetCrabAngleDeg` | 蟹行路径方向相对**启动时车队朝向**的夹角(deg,逆时针为正)。MovementTest 同时把车身-路径夹角设为该值,因此 `FleetCrabAngleDeg=-x` 会让车身保持启动朝向,并以 `x` 度夹角追踪路径 | `45` |
|
||||
| `FleetCrabLengthMm` | 蟹行路径**长度**(mm),沿夹角方向行驶该距离后停车结束 | `2000` |
|
||||
| `FleetCrabSpeed` | 蟹行**行驶速度**(m/s) | `0.2` |
|
||||
| `FleetCrabGcpThetaThreshold` | 兼容旧几何控制器实现的 gcp 舵角上限;当前脚本手动等价实现不直接使用 | `95` |
|
||||
| `FleetCrabCorrectionGain` | 横向误差纠偏增益。增大后收敛更快,但更容易出现方向摆动 | `1` |
|
||||
| `FleetCrabCorrectionAngleDeg` | 自动纠偏最大改向角(deg)。越小越接近手动蟹行,越大纠偏越强 | `8` |
|
||||
| `FleetCrabCommandAccel` | `Vx/Vy` 命令斜率限制(m/s²),抑制纠偏方向突变 | `0.4` |
|
||||
| `MultiVehicleCrabSteerLimitDeg` | mode=1 蟹行舵角上限,应与 Medulla 侧 `WheelAngleLowerLimit/UpperLimit` 匹配;`-95°` 在默认 120° 内会直接下发 | `120` |
|
||||
| `FleetCrabSpeed` | 蟹行巡航速度(m/s),写入 `MultiVehicleAutoVx`;接近终点时会被 `SlowDistance/SlowingPow/FinishSpeed` 降速 | `0.2` |
|
||||
| `FleetCrabGcpThetaThreshold` | 自动蟹行输出 `frontTh/rearTh` 的绝对值上限(deg)。应小于实际舵角可行范围,并给 `AngleLimitMarginDeg` 留余量 | `95` |
|
||||
|
||||
自动蟹行还会使用下列通用控制参数:
|
||||
|
||||
| 字段 | 影响 | 默认来源 |
|
||||
|------|------|----------|
|
||||
| `BiasFac` / `BiasThreshold` | 横向偏差 `lateral` → 前后 GCP 同向修正。增大后收敛更快,但过大可能摆动 | `MultiWheelPilotConfig` |
|
||||
| `DthLinearFac` / `DthLinearThreshold` | 车身目标朝向偏差 `headingErr` → 前后 GCP 反向修正,用于保持车身与路径夹角 | `MultiWheelPilotConfig` |
|
||||
| `SlowDistance` / `SlowingPow` / `FinishDistance` / `FinishSpeed` | 终点减速和结束判定 | `BasicPilotConfig` |
|
||||
| `MultiVehicleAutoUseIdealCenter` | 是否把自动蟹行计算出的 `IdealX/Y/Th` 广播给从车做前馈 | `true` |
|
||||
| `MultiVehicleAutoRequireFleetCenter` | 自动模式是否要求有效车队中心;定位/车队中心失效时整队停车 | `true` |
|
||||
| `MultiVehicleAutoCmdTimeoutMs` | 自动命令新鲜度超时,0 表示按联动周期自动计算 | `0` |
|
||||
| `MultiVehicleUseDetect` / `MultiVehicleDetectBias*` | 互识别纠正与安全门;检测丢失时整队停车 | 见 §5 |
|
||||
| `MultiVehicleSyncUseDetour` / `MultiVehiclePosBias*` | 车队内姿态纠正(POS 补偿);不影响整车队中心计算 | 见 §5 |
|
||||
|
||||
已删除的旧自动蟹行参数:
|
||||
|
||||
| 已删除字段 | 原用途 | 当前替代 |
|
||||
|------------|--------|----------|
|
||||
| `FleetCrabCorrectionGain` | 旧脚本链路的横向误差纠偏增益 | `BiasFac` |
|
||||
| `FleetCrabCorrectionAngleDeg` | 旧脚本链路的最大改向角 | `BiasThreshold` / `FleetCrabGcpThetaThreshold` |
|
||||
| `FleetCrabCommandAccel` | 旧脚本链路的 `Vx/Vy` 斜率限制 | 由自动联动周期、底盘速度斜坡和终点减速共同约束 |
|
||||
|
||||
**行为要点 / 注意**
|
||||
|
||||
- 当前实现不走 `MultiVehicleAuto*`/`MultiVehicleSendMotion`,也不再临时改 `MultiVehicleAutoUseIdealCenter`;结束/急停会清零脚本字段。
|
||||
- `FleetCrabDbg` 会记录 `along/lateral/remain/corr/localAngle/cmd(Vx,Vy)`;`MultiVehicleDbg` 可继续对照最终 `frontTh≈rearTh`、是否有 POS/Detect 补偿,以及 `CRAB in/raw/limit/rev` 是否在舵角上限内保持连续表达。
|
||||
- 当前实现走 `MultiVehicleAuto*` 自动字段链路,不再开启 `MultiVehicleScriptEnabled`,也不受 `MultiVehicleCrabSteerLimitDeg` 影响(该字段只影响手动 `mode=1` 蟹行)。
|
||||
- `FleetCrabDbg` 会记录 `along/lateral/remain/headingErr/baseTh/bias/dth/auto(vx,fTh,rTh)/ideal`;`MultiVehicleDbg` 可继续对照最终 `BASE/SEND`、POS/Detect 补偿、ready/stop 状态。
|
||||
- `MultiVehicleUseDetect=true` 时仍受 2 腿检测安全门约束(检测丢失会被置零停车)。
|
||||
- Playground 双车场景的 `actuator.maxSteeringAngle` 也必须与该上限一致;若仍为 `90`,Clumsy 发出的 `-98°` 纠偏会在仿真执行层被夹回 `-90°`,表现为纯横移路径无法收敛。
|
||||
|
||||
@@ -202,11 +219,7 @@ TwoLegGuessX = -(TestCarSyncDistance - DeltaDetectCenter)
|
||||
"FleetCrabAngleDeg": 45,
|
||||
"FleetCrabLengthMm": 2000,
|
||||
"FleetCrabSpeed": 0.2,
|
||||
"FleetCrabGcpThetaThreshold": 95,
|
||||
"FleetCrabCorrectionGain": 1.0,
|
||||
"FleetCrabCorrectionAngleDeg": 8,
|
||||
"FleetCrabCommandAccel": 0.4,
|
||||
"MultiVehicleCrabSteerLimitDeg": 120
|
||||
"FleetCrabGcpThetaThreshold": 95
|
||||
```
|
||||
|
||||
```text
|
||||
|
||||
Reference in New Issue
Block a user