第三次组会
参考文献:[2605.28634] PrimitiveVLA:学习可重复使用的运动原语以实现高效且可推广的机器人操作
WSL2调用摄像头并使用OpenCV - 教程 - ljbguanli - 博客园
视觉-语言-行动(VLA)模型为通用机器人策略提供了有前景的范式,但其瓶颈源于盛行的直接指令到控制映射,该映射迫使模型记忆单一的轨迹,而非可重复使用的运动模式。由此引出PrimitiveVLA
PrimitiveVLA
核心思想,是将复杂的机器人任务拆解成一系列可复用的“运动基元”,从而提升VLA模型的数据效率和泛化能力
PrimitiveVLA主要依赖两个关键技术
-
可组合的基元库(Composable Primitives):论文中定义了一个包含11种可复用基元的库,分为三大类:
-
空间移动:如“抓取”(Grasp)、“放置”(Place)、“举起”(Lift)、“移动”(Move)。
-
接触与交互:如“推”(Push)、“拉”(Pull)、“插入”(Insert)、“按压”(Press)。
-
方向控制:如“扭转”(Twist)、“倾斜”(Tilt)、“旋转”(Rotate)。
-
-
多模态规范表示(Multimodal Canonical Representation, MCR):这是连接分解和组装两阶段的“翻译器”。MCR负责将不同任务中语义相似但表现各异的指令和图像,转换成统一的、标准化的表示,提取“不变性”。让模型学习到“抓取”这一不变的运动模式,而不是某个特定物体的特定轨迹。
技术挑战:
1. 微调过程中的拆解(标签稀缺):相关原语标签稀缺
应对方案:利用VLM和LLMs的自动分割流水线,无需手动操作即可将轨迹拆解为原语。
2. 推理中的组装(控制复杂性):在推理过程中有效将离散原语组装成一个连贯的任务,需要一个稳健的机制来管理执行流程,切换逻辑。
应对方案:VLM规划器对原语进行序列,而LLM生成的代码管理切换逻辑,将它们组装成连贯任务。
3. 在任务间保持不变性(上下文干扰):原语必须保持一致且可重用。然而,任务特定的细节常常干扰原始学习,而过度统一则可能移除任务相关信息,使原语无法重用。
应对方案:MCR通过统一指令对齐运动模式和使用以对象为中心的掩码保持任务上下文,解决了上下文干扰。
“视觉特征”与“动作决策”的解耦
两者如果不解耦,机器人学到的是一个具体物体的具体轨迹,当物品发生改变,运动轨迹无法泛化,这就是传统VLA的缺陷,PrimitiveVLA实现了视觉和动作的解耦。
MCR在生成基元数据进行微调过程中发挥作用,运动轨迹经过自动化“任务拆解”生成基元数据后,由MCR“标准化处理”,用于微调。
在PrimitiveVLA的MCR模块里,解耦发生在两个层面:
-
将“视觉特征”中的“物体属性信息”剥离出来
视觉输入(图像)包含了大量信息:颜色、材质、光照、背景、物体轮廓等等。MCR通过掩码(Mask),把这些信息都“盖住”,只留下与动作相关的关键点(比如抓取的中心点坐标)。 -
将“动作决策”与“具体的视觉画面”分开
规划器在做决策时,不再直接看原始图像,而是看MCR输出的标准化表示(比如“基元类型:抓取;目标坐标:X,Y”)。
DMP 核心公式:
实操阶段:
继续上周未完成的实验进行,首先将电脑自带摄像头导入WSL,让linux系统可以调用USB摄像头。调用yolo11代码完成实时物品识别,如下图:

接着把 YOLO 检测到的物体中心坐标,发布到一个新话题 /target_point
终端3检测到target_point如下图所示

模拟DMP路径
为了验证YOLO检测到的目标点能不能驱动仿真环境里的小球移动,打通“看见→移动”这个闭环。
-
在PyBullet仿真环境里放一个小球,起点在原点
-
YOLO检测到物体后,把图像坐标(比如338, 325)通过ROS 2发出来
-
小球收到坐标后,转成仿真世界坐标,然后一步一步走过去
-
每0.1秒走一步,走到目标点附近(距离小于0.03)就停下

如图是小球在没有设置避障点下从原点运动到第一个中心点的轨迹图
实验结果:小球成功从原点移动到目标点,一共走了54步,耗时约5.4秒。轨迹图显示小球走了一条近似直线,没有偏移或抖动。
路径规划算法:A* 算法
A* 算法平衡了找到最短路径和搜索效率这两个核心需求,需要提前知道地图。
是 Dijkstra 的“智能升级版”,它多了一个“指南针”(启发式函数),能一边探路,一边朝着终点的方向走,所以效率高得多
-
核心逻辑:它给每个点算一个综合分数
f(n) = g(n) + h(n)。g(n)是起点到当前点的实际距离,h(n)是当前点到终点的“估算距离”(比如直线距离)。它会优先探索f(n)最小的点,也就是“既离起点近,又感觉离终点也近”的点。
A* 算法实现避障的方式
第一步:把世界变成一张“棋盘”(地图预处理):
-
栅格化:想象把整个地面划分成无数个小方格(比如每个格子代表实际世界中的 0.1 米)。
-
状态标记:然后你挨个检查每个小格:
-
如果格子里是空地(没有障碍物),就标记为 “可通过”(0)。
-
如果格子里有障碍物,就标记为 “不可通过”(1) 或 “障碍物”。
-
第二步:有“指南针”的搜索(A* 的核心逻辑)
地图准备好后,A* 开始从起点到终点进行搜索。它在搜索时,会遵循一个非常核心的评估函数来决定下一步往哪走。这个函数可以简单理解为对每个待探索格子的“打分”:
总代价 F = 已经走过的实际距离 G + 到目标的预估距离 H
-
G(实际代价):从起点走到当前这个格子,确实走了多远。这确保了算法不会选择一个绕远路的路径。 -
H(启发代价):从当前这个格子到终点,估计还要走多远(比如计算两点的直线距离)。这就像给算法装了一个“指南针”,让它的搜索方向始终优先朝着目标点前进。
然后看了本算法的代码
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)