牵引车适配案例

来自MDCS wiki2
跳到导航 跳到搜索


概述 / Overview

牵引车(也称双阿克曼车型、tow-truck、tractor)的关键特征是 有非完整约束(不能瞬时横移),加上 后挂多节拖车时存在 逆向跟踪难折叠/失稳 风险。MDCS 通过专用 Movement 与额外的拖车包络处理这些问题。

The tractor / double-Ackermann (tow-truck) vehicle has non-holonomic constraints (can't translate laterally) and, when towing trailers, the difficulties of reverse-tracking, jackknife avoidance, and trailer swing. MDCS handles these via dedicated Movements and trailer envelopes.

参考:浙江中力 (`D:\src\cookbook\adaption-reference\浙江中力\`) 等拖车 / 牵引适配案例。 References: Zhejiang Zhongli (`adaption-reference\浙江中力\`) and similar.

车型变体 / Variants

子型 / Sub-type 说明 / Description
单阿克曼 / Single-Ackermann 前轮转向,后轮驱动,无拖车 / Front-steer, rear-drive, no trailer
双阿克曼 / Double-Ackermann 前后都可转向(蟹行)/ Both axles steer (can crab-walk)
牵引 + 1 挂 / Tractor + 1 trailer 单个铰接点 / single hitch
牵引 + N 挂 / Tractor + N trailers 多铰接,每节带额外的运动学约束
双向牵引 / Bidirectional tractor 前后都能作为牵引头 / can lead from either end

1. Medulla 适配 / Medulla side

关键 IO(以双阿克曼为例):

public class TowCart : CartDefinition
{
    [AsInitParam] public string canIface = "can0";
    [AsInitParam] public float  wheelBase = 1450;   // mm
    [AsInitParam] public float  trackFront = 1100;
    [AsInitParam] public float  trackRear  = 1100;
    [AsInitParam] public bool   doubleAckermann = true;

    [AsUpperIO] public float vCmd;
    [AsUpperIO] public float steerFrontCmd;     // 前轮转角 / rad
    [AsUpperIO] public float steerRearCmd;      // 后轮转角 / rad  (sign for crab vs co-turn)
    [AsUpperIO] public bool  brakeOn;
    [AsUpperIO] public bool  hitchEngaged;      // 挂钩控制 / hitch control

    [AsLowerIO] public float vEst;
    [AsLowerIO] public float steerFrontEst, steerRearEst;
    [AsLowerIO] public float hitchAngle1, hitchAngle2, hitchAngle3; // 每节拖车的折角
    [AsLowerIO] public bool  hitchOK;
    [AsLowerIO] public bool  eStop;
}

铰接角 / Hitch angles:每节拖车与前一节的相对角度,是逆向跟踪与失稳预警的关键状态。`hitchAngleN` 用 IMU 双轴 或 单点编码器测。

The hitch angle of each trailer relative to the one in front is the key state for reverse-tracking and jackknife warning. Measure via dual-axis IMUs or a hitch encoder.

2. Clumsy 自动驾驶适配 / Clumsy side

关键 Movement

Movement 用途 / Use
`SteeringLineFollowing` 正向行驶(单 / 双阿克曼通用)/ forward driving
`SteeringLineFollowingReverse` 逆向行驶(带 trailer)/ reverse with trailer
`CrabLineFollowing` 蟹行(仅双阿克曼)/ crab walk (double-Ackermann only)
`TractorTurnAround` 调头动作(多段曲线)/ multi-segment U-turn
`JackknifeGuard` 守护线程:检测 hitch 角度过大时刹停 / guard thread for excessive hitch angle

逆向跟踪(reverse-track with trailer)

带 N 节拖车做逆向跟踪时,运动学是 非线性、不稳定。MDCS 采用:

Reverse-tracking with N trailers is nonlinear and unstable. MDCS uses:

  1. 在路径规划时 禁止带挂逆向超过 5 m。
  2. 仅允许在专用的 逆向缓冲区做带挂倒车,且车速 ≤ 100 mm/s。
  3. 控制器:以 最后一节拖车的姿态为状态,通过非线性逆向控制律解算前轴转角。
  4. 任何 hitch 角度 ≥ 30° 立即停车 + 报警。
  1. Path planning forbids reverse-with-trailer > 5 m.
  2. Reverse-with-trailer only permitted in dedicated reverse buffer zones at ≤ 100 mm/s.
  3. Controller takes the rear-most trailer pose as the state and inverts to front-axle angle.
  4. Any hitch angle ≥ 30° → e-stop + alarm.

调头 / U-turn

不带挂的牵引车 必须用最小转弯半径以内的曲线段拼接来调头,常见 K-turn 或 U-turn。MDCS 的 `TractorTurnAround` Movement 包含一个解析的多段 Dubin's 路径生成器,已考虑 wheelBase + minTurnRadius。

A tractor without a trailer needs a multi-segment path within its minimum turning radius. The `TractorTurnAround` Movement uses an analytic Dubin's path generator parameterised by wheelBase and minTurnRadius.

3. SimpleComposer 端 / SimpleComposer side

拖车包络 / Trailer envelope

牵引 + N 挂的包络必须由 拖车折角计算 —— 直行时是简单的长矩形,弯路时各节会摆向不同方向,整体包络变成 扇形

The envelope of a tractor + N trailers is shaped by hitch angles. Straight-line travel gives a long rectangle; turning causes each segment to swing differently, producing a fan-shaped envelope. SimpleComposer dynamically recomputes this from hitch-angle readings.

调度约束 / Scheduling constraints

  • 最小转弯半径声明在车型属性中,调度寻路时排除半径过小的弯。
  • 带挂不带挂是两种不同的可达性状态(可达性状态编程)。
  • 拖车数量影响交管锁;多挂车一次锁连续多个站点。
  • Minimum turn radius declared in car props; pathfinder excludes tighter turns.
  • Towing vs not-towing are two reachability states.
  • Multi-trailer cars take multi-site locks at once.

4. 标定与调试 / Calibration & tuning

  1. 前轮 / 后轮转角极性 / Steer polarity: 单独测各轴的左 / 右极性,确认与 IMU 一致。
  2. 单阿克曼直线度 / Single-Ackermann straight: 直行 10 m 后侧向偏差 < 30 mm。
  3. 双阿克曼蟹行 / Crab walk: 命令 30° 蟹行 5 m,实际方向偏差 < 1°。
  4. 拖车铰接角度 / Hitch zero: 静态直拖时 hitchAngle 应 = 0;偏 > 1° 必须重做 IMU 零点。
  5. 极限工况 / Boundary: 满载 + 满拖 + 最小半径转弯,确认无失稳。
  1. Steer polarity per axle; confirm IMU sign agreement.
  2. Single-Ack straight-line: < 30 mm drift over 10 m.
  3. Double-Ack crab-walk: 30° crab × 5 m → heading drift < 1°.
  4. Hitch zero: static straight tow → hitchAngle = 0 ± 1°.
  5. Boundary: fully-loaded, full trailer train, min-radius turn → no jackknife.

5. 常见问题 / Common pitfalls

  • 逆向失控 / Reverse instability: 拖车超 2 节时控制律不收敛;改成 分段倒车(每次只倒 0.5 m 复位)。
  • 弯道挂车摆动 / Trailer swing on curves: 把 `basespeed` 在弯道前先降到 50%,并加大 弯道前提早转向时间。
  • hitch 编码器漂 / Hitch encoder drift: 检查机械连接 + IMU 零点;每天上电后做一次自检。
  • 带挂掉头空间不足 / Insufficient room for U-turn: 调度寻路前必须知道拖车节数,否则 `TractorTurnAround` 会规划出穿墙路径。

6. 双向牵引 / Bidirectional tractor

双向牵引车前后都可拖挂;切换"主拉端"时,Detour 的车体坐标需要同步 翻转 180°,并切换前向 / 后向激光雷达为 SLAM 主源。

A bidirectional tractor can pull from either end. When swapping the "lead end", flip the vehicle frame 180° in Detour and switch the primary SLAM lidar from front to rear.

相关页面 / See also