尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

050、RT-Trajectory轨迹引导:视觉轨迹作为动作提示的新范式

050、RT-Trajectory轨迹引导:视觉轨迹作为动作提示的新范式 050、RT-Trajectory轨迹引导视觉轨迹作为动作提示的新范式调试机器人夹爪抓取一个透明水杯的时候我盯着示教器上的轨迹回放看了整整一个下午。RT-1在仿真里跑得风生水起一到真实世界就抓瞎——杯子是透明的视觉特征几乎为零模型把背景里的桌面纹理当成了抓取依据。后来我把示教轨迹直接画在输入图像上模型突然就开窍了。这个细节让我意识到RT-Trajectory的核心思想其实就藏在这种朴素的直觉里与其让模型从零开始推理动作序列不如把人类示教的轨迹直接画给它看。从语言指令到视觉轨迹动作提示的维度跃迁RT-1用的是自然语言作为任务提示比如把红色杯子放到蓝色托盘上。问题在于语言是离散符号而机器人动作是连续轨迹这中间存在一个巨大的语义鸿沟。模型需要先理解语言再想象出对应的动作模式最后映射到关节空间。每一步都是误差累积的机会。RT-Trajectory换了个思路——直接把轨迹画在图像上。不是画一个点或者一个箭头而是画完整的末端执行器运动路径。想象一下输入图像上叠加了一条从杯子位置到托盘位置的平滑曲线模型要做的就是沿着这条曲线生成具体的动作。这相当于把做什么和怎么做之间的推理过程压缩掉了模型只需要关注如何沿着这条线走。我在实际调试中发现一个有意思的现象当轨迹画得足够精确时模型对语言指令的依赖程度会显著下降。甚至在某些任务里你只给轨迹不给语言模型也能完成操作。这说明视觉轨迹本身携带了丰富的任务语义信息语言反而成了辅助通道。架构设计轨迹编码器的那些坑RT-Trajectory的架构看起来和RT-1很像都是Transformer-based的VLA模型但关键区别在于输入侧多了一个轨迹编码分支。原始图像和轨迹图像分别经过两个独立的视觉编码器然后在token层面进行融合。这里有个容易踩坑的地方——轨迹图像不能简单地和原始图像做通道拼接那样会让模型混淆场景特征和动作线索。我一开始图省事直接把轨迹画在RGB图像上三个通道变成四个通道输入同一个编码器。结果训练loss死活降不下去模型在仿真里表现还行一到真实环境就完全崩溃。后来仔细分析才发现轨迹线条的像素值范围、粗细、颜色都会影响编码器的特征提取模型学到的是线条长什么样而不是线条指向哪里。正确的做法是用两个独立的编码器一个处理原始观测一个处理轨迹图像。轨迹编码器可以设计得轻量一些毕竟它只需要提取空间路径信息不需要理解复杂的语义场景。我在实际实现中用了ResNet-18作为轨迹编码器输入是二值化的轨迹掩码图输出是固定长度的token序列然后和主编码器的token做concatenation。轨迹表示连续曲线还是离散关键点这是我在工程化过程中纠结最久的一个问题。论文里用的是连续轨迹通过多项式拟合生成平滑曲线。但真实机器人系统里示教轨迹往往是离散的点序列而且带有传感器噪声。直接把这些点连成线画在图像上会出现锯齿状边缘模型很难从中提取稳定的特征。我试过几种不同的轨迹表示方式。第一种是原始点序列直接连线效果最差模型对噪声极其敏感。第二种是先用RDP算法做轨迹简化保留关键转折点然后用三次样条插值生成平滑曲线效果好了很多。第三种是只画关键点不连线每个点用不同大小的圆圈表示时间先后——这个方案在仿真里效果不错但真实环境里小圆圈容易被遮挡实用性不强。最终我采用的是关键点方向箭头的组合表示。在轨迹上均匀采样8到12个关键点每个点画一个小圆相邻点之间画一个短箭头指示运动方向。这样既保留了轨迹的形状信息又显式编码了运动方向模型不需要自己去推断从A到B应该怎么走。训练策略从仿真到真实的迁移艺术RT-Trajectory的训练分为两个阶段。第一阶段在仿真环境里大规模预训练用随机生成的轨迹和对应的专家演示数据。第二阶段用真实世界的少量示教数据做微调。这个流程听起来简单实际操作中有一个关键细节——仿真环境里生成的轨迹和真实示教轨迹的分布差异非常大。仿真里轨迹通常是完美的直线或者平滑曲线而真实示教轨迹充满了微小的抖动和冗余运动。如果直接混合训练模型会学到轨迹越平滑越好的偏见在真实环境里反而表现不佳。我的解决方案是在仿真数据里人为加入噪声和随机扰动让轨迹分布更接近真实情况。具体做法是对生成的轨迹做高斯平滑然后叠加随机游走噪声幅度控制在轨迹长度的5%以内。另一个容易忽视的问题是轨迹的时间信息。图像上的轨迹是静态的但动作执行是有时间顺序的。模型需要知道先经过这个点再经过那个点。我在轨迹编码器里加入了位置编码按照轨迹点的先后顺序赋予不同的空间位置编码。这个细节让模型的动作预测准确率提升了将近15个百分点。推理阶段轨迹引导的注意力机制在推理时RT-Trajectory的工作流程是这样的给定当前观测图像和任务描述模型先根据语言指令生成一个粗略的轨迹草图然后把这个草图叠加到观测图像上输入到轨迹编码器最后通过Transformer解码器输出具体的动作序列。这里有个工程上的trick——轨迹草图不需要一次生成到位。我实现了一个迭代优化机制模型先生成一条粗糙轨迹执行一小段然后根据新的观测重新生成轨迹再执行下一段。这种生成-执行-再生成的闭环方式比一次性生成完整轨迹要稳健得多。特别是在长程任务里累积误差会被不断修正。我在调试中发现轨迹的初始生成质量对最终成功率影响很大。如果初始轨迹偏离正确路径太远后续的迭代优化很难拉回来。解决办法是在语言指令到轨迹草图的映射中加入一个基于任务原型的先验。比如抓取类任务的轨迹原型是从当前位置到目标物体再回到起始位置放置类任务则是从当前位置到目标位置。这个先验可以通过少量示例学习得到不需要额外的标注。实验对比RT-Trajectory到底赢在哪里我在自己的机器人平台上做了系统的对比实验包括RT-1、RT-2以及RT-Trajectory的复现版本。测试任务涵盖了抓取、放置、堆叠、插拔等常见操作每个任务设置50次重复实验。最让我意外的是RT-Trajectory在透明物体和反光表面这两类视觉特征极弱的场景下成功率比RT-1高出将近40个百分点。原因很好理解——轨迹提供了空间位置信息模型不需要依赖物体的视觉外观来推断抓取位置。这在真实工业场景里太重要了透明容器、金属零件、暗色物体都是视觉模型的噩梦。另一个有意思的发现是RT-Trajectory对语言指令的鲁棒性更强。当我故意把语言指令写错比如把红色说成蓝色RT-1的成功率直接掉到20%以下而RT-Trajectory还能保持60%以上的成功率。这说明轨迹信息在某种程度上纠正了语言理解的错误——模型更相信视觉轨迹而不是语言描述。落地经验那些论文里不会告诉你的细节如果你打算在自己的机器人系统里复现RT-Trajectory有几个坑我必须提前告诉你。轨迹图像的分辨率不要和原始图像一样。我一开始用224x224的轨迹图结果模型在小物体抓取任务上表现极差。后来把轨迹图分辨率提高到448x448小物体的轨迹细节清晰了很多成功率提升了将近20%。代价是推理速度变慢但可以通过轻量化的轨迹编码器来补偿。轨迹的粗细和颜色也有讲究。太细的线在降采样后容易断裂太粗的线会遮挡物体特征。我试过从1像素到8像素的不同线宽最终发现3到4像素是最优区间。颜色方面红色和黄色在大多数场景下对比度最好蓝色和绿色容易被背景吸收。数据增强对轨迹分支的影响比主分支更大。我在训练时对轨迹图像做了随机平移、旋转、缩放幅度控制在10%以内。这个操作让模型对相机位姿的微小变化更加鲁棒在真实环境里的泛化能力提升明显。最后一点也是最重要的一点——轨迹生成模块的质量决定了整个系统的上限。如果你的轨迹生成器本身就不准后面的轨迹编码器和动作解码器再强大也没用。我建议在轨迹生成阶段投入更多的精力比如用更强大的语言模型、加入任务先验、做多轮迭代优化。这个模块值得你花70%的调试时间。回到开头那个透明水杯的问题。当我第一次把示教轨迹画在输入图像上模型成功抓起了杯子的时候我意识到这不仅仅是一个技术改进更是一种范式的转变——从让模型理解任务到让模型跟随轨迹我们把最难的推理部分从模型身上剥离出来交给了人类示教。这种分工方式在当前的VLA模型能力水平下可能是最务实的路线。
返回列表