XYT·星野图
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面
返回上一级

输入契约 v3:TD25A 三条输入全部定稿

写作时间:2026-08-26 14:00
# 端到端
# 覆盖清扫
# DrivoR
# 输入契约
# TD25A

状态:契约 v3,输入侧定稿。 DrivoR 侧数字均对 valeoai/DrivoR@main 逐行核对, 设计依据来自 ICML 2024 覆盖路径规划工作的实验结论。

一眼版

BEV 支路   N=2 · 8 通道 · 224²        →  2 × 16 = 32 token
   近图  0.05 m/格(±5.6 m)
   远图  0.20 m/格(±22.4 m)

相机支路   N=1 · RGB 640×480          →      16 token

ego 向量   4 维  (v, ω, a, ω̇)         →   加到 proposal query 上
──────────────────────────────────────────────────────
                              上下文  =  48 token

对比 DrivoR:4 路相机 = 64 token,11 维 ego。


一、BEV 支路

通道

# 通道 来源 近图 远图
0 静态图 地图 ✓ ✓
1 tanh(0.2·visits) 软覆盖 几何记账 ✓ ✓
2 frontier 由 0/1 算出 ✓ ✓
3 occ_a 0.03–0.15 m STVL 体素 ✓ 0
4 occ_b 0.15–1.01 m STVL 体素 ✓ 0
5 occ_c 1.01–2.00 m STVL 体素 ✓ 0
6 z_min 最低回波对地高度 STVL 体素 ✓ 0
7 z_max 最高回波对地高度 STVL 体素 ✓ 0

远图后 5 个通道填 0——「这个尺度上没有雷达数据」本身就是有意义的信息, 雷达标记半径只有 4 m,铺到 ±22.4 m 上没有意义。

为什么远图必须单独过一遍,不能堆成通道

近图第 (100,100) 格是车前 0.5 m,远图同一格是车前 2 m。 两个尺度的像素位置不对应同一个世界坐标——堆成同一张图的通道, 卷积核会把两个不同地点的东西当成同一点。

ICML 2024 那篇专门为此设计了 SGCNN,按尺度分组分别卷积。我们的对应做法是 把近图和远图当成 N=2 塞进同一个 ImgEncoder——DrivoR 的 4 路相机本来就是这么共享 ViT 的。

为什么是 2 级不是 4 级

级数由场地尺寸定。ICML 那篇用 4 级,是因为他们最细一级只有 1.2 m 见方 (32×32 @ 0.0375 m),得叠 4 级才够到 76.8 m。

我们最细一级是 11.2 m 见方,边长就是他们的 9 倍:

级 我们 他们
1 11.2 m 1.2 m
2 44.8 m 4.8 m
3 179 m 19.2 m
4 — 76.8 m

第 2 级 44.8 m 覆盖整层楼绰绰有余,第 3 级纯属浪费。

二、相机支路

值
路数 1(RealSense RGB)
分辨率 640×480 —— ÷16 正好 = 40×30 = 1,200 patch
预处理 和 DrivoR 完全一致:resize → ÷255 → ImageNet 标准化
GridMask 保持开启(相机上是合理增强;BEV 支路才必须关)
内外参 不用——DrivoR 本来就不消费 cam_K / world_2_cam

一期就接,走「冻结骨干 + 少量标注」路线。

理由:相机的价值是语义——地上 8 mm 高的东西,是数据线(会卷进滚刷,必须绕) 还是地砖缝(直接压过去)?几何上一模一样,只能看图像。

而冻结的 DINOv2/v3 特征本身已经把语义分开了(拿官方素材跑一遍, 主成分上色后路面、植被、车体、天空各自成片,没人教过它)。所以只需要 在那 16 个 register token 上分出一路轻量辅助头,标几百到几千张就够—— 不必标到分割数据集的量级。这和 DrivoR 用 bev_semantic_map 做辅助监督是同一个套路。

三、ego 向量

4 维  (v, ω, a, ω̇)  →  Linear(4 → 256)  →  加到 64 条 proposal query 上

DrivoR 是 11 维、其中 3 维恒为零;我们删掉 pose、vy 换 ω、ay 换 ω̇、命令位闲置。

逐维对照、每一条的理由、以及两条被否掉的自研维度(footprint / 定位置信度), 全部搬到了单独一篇:机器人姿态输入对比 →

一句话记住:ω 是新增的——DrivoR 根本没有角速度, 而 53 次 cusp 硬停恰恰全在原地转那个动作上。

四、明确不要的六样

这一节比上面三节更重要——每一条都是想加过、然后被否掉的。

不要 理由
全局坐标 (x, y) 位置用图给不用数字给。ICML 2024 §3.3 明确比较过并选择不给(详述)
footprint 6 顶点 一期机构冻结 → 每帧同一组数 → 常量就是死输入
定位置信度 改用 ICML 的做法:训练时往位姿注入高斯噪声,让策略学出鲁棒性,有实验背书
实时占据(costmap 层) 带 inflation_radius: 0.55(= 11 格)的膨胀,会把桌腿间隙抹平——正是高度分档要暴露的东西
深度相机 留在 stvl_depth_layer 喂安全否决层。并进 z_min 会把玻璃幻影带进「能不能钻」的判据
超声波 enabled: false,2026-06-27 已退出导航,只留驱动层 30 cm 硬急停

从这六条里长出来的四条规矩

  1. 死输入比没有输入更糟。 DrivoR 那 3 维恒零的 ego_pose 就是活教材—— 官方自己的另一个 agent 早把它删了,DrivoR 留着纯属照抄没删。
  2. 图里看得出来的东西,不要再喂一遍数字。 喂了是有损的重复,还会让网络背地图。
  3. 膨胀是规划器的概念,不是感知的概念。 TransFuser、BEVFormer、占据网络喂进网络的 全是原始几何,没有一个先做膨胀。
  4. 不同尺度不能堆成同一张图的通道。 像素位置不对应同一个世界坐标。

五、仍待定

  • 辅助头预测什么——二分类(前方有无线缆/液体)还是小分割图
  • 标注类别与数量
  • 相机接入时机——一开始就带,还是先训通纯 BEV 再加?后者可能更稳
  • 清扫意图(沿带进度 / 横向偏差 / 目标带方向)——闲置中。 三个量里只有「目标带方向」是 driving_command 的真对应物, 另外两个是空间量、BEV 图里本来就有

参考

  • DrivoR 怎么处理相机 · 雷达 z 轴怎么编码 · 11 维自车状态 · 覆盖染色图格式 · 为什么不给全局坐标
  • Jonnarth, Zhao & Felsberg. Learning Coverage Paths in Unknown Environments with Deep RL. ICML 2024(多尺度、frontier 跨尺度、噪声鲁棒性、TV 奖励)
  • valeoai/DrivoR@main · turn_on_td25a_robot/config/nav2_params.yaml
avatar

XYT

以文字为星,以思考为野,绘一幅属于自己的星野图。

RECOMMENDED

DrivoR 怎么处理相机:4 张图到 64 个 token

2026-08-25 18:10

想法博客

2026-08-27 23:50

机器人姿态输入对比:DrivoR 的 11 维与 TD25A 的 4 维

2026-08-26 15:30

Table of Contents