1. 课程导入
视觉-语言-动作模型(Vision-Language-Action,VLA)正在把机器人从“按脚本执行”推进到“按语义理解并生成动作”。但一个常被低估的事实是:VLA 的能力上限,往往不由网络结构单独决定,而由数据集与动作表示共同决定。同一套模型,换一种动作标注方式、换一批采集场景,成功率可能相差数倍。本课程围绕“数据怎么来、动作怎么表示、工程怎么落地”三条主线展开,帮助你建立可复用的数据与动作工程能力。
一、核心概念:VLA 数据集的四层结构
VLA 数据集不是“图片加标签”那么简单。它通常包含四个层次:感知层(多视角 RGB、深度、点云)、语言层(任务指令、子目标描述、语言标注)、状态层(关节角、末端位姿、夹爪开合、力/触觉)、动作层(示教动作序列、动作块、动作 token)。四层之间必须时间对齐、坐标统一、语义一致,否则模型学到的是“错位的因果”。
动作表示是其中最容易出问题的环节。常见表示包括:关节空间位置/速度、末端笛卡尔位姿、增量动作(delta pose)、动作块(action chunk)、离散动作 token、以及扩散/流匹配生成的动作轨迹。不同表示对应不同的控制频率、平滑性、泛化性和学习难度。
二、方法流程:从原始示教到可训练数据集
一条可复现的数据工程流水线通常包含六步:任务定义 → 采集 → 同步与对齐 → 清洗与标注 → 动作表示转换 → 数据集划分与版本管理。每一步都会影响最终策略。例如,若采集时相机与机械臂未做硬件触发同步,后续再插值也无法恢复真实因果;若动作表示选择关节速度而控制端使用位置控制,部署时会出现明显滞后。
# 典型数据工程配置示例(YAML 片段)
dataset:
name: vla_pick_place_v1
fps: 30
cameras: [front, wrist, top]
state_dim: 14 # 双臂关节角 + 夹爪
action:
type: delta_pose # joint_pos | delta_pose | chunk
horizon: 16
dim: 7
alignment:
max_time_offset_ms: 10
split:
train: 0.8
val: 0.1
test: 0.1
三、案例场景:同一任务,两种动作表示的差异
以“抓取杯子并放到托盘”为例。若使用绝对关节位置,模型容易记住特定初始姿态,换一个杯子位置就失败;若使用末端增量动作,模型学到的是“相对移动”,对初始位姿更鲁棒,但长时间累积会漂移。工程上常见的折中方案是:训练时用增量动作,推理时以固定频率重锚定到当前末端位姿,并配合动作块平滑。
| 维度 | 绝对关节位置 | 末端增量动作 | 动作块(Chunk) |
|---|---|---|---|
| 泛化性 | 低,依赖初始姿态 | 较高,相对运动 | 高,含时序上下文 |
| 累积误差 | 无 | 有,需重锚定 | 中等,块内平滑 |
| 控制频率 | 高频稳定 | 中高频 | 低频预测 + 高频执行 |
| 典型用途 | 固定工位精密操作 | 移动抓取、柔性任务 | 长时序、多阶段任务 |
四、误区与复盘:数据工程中最常见的三个坑
- 只堆数据量,不看数据分布。大量重复同一场景的示教,只会让模型过拟合到该场景。应优先覆盖物体位置、光照、遮挡、指令表述的多样性。
- 动作表示与控制器不匹配。训练用增量、部署用绝对,或频率不一致,都会导致“离线指标好、真机失败”。
- 忽略失败样本的价值。失败轨迹若标注了失败原因,可用于负样本对比、奖励建模和恢复策略学习,直接丢弃是浪费。
本课程后续将沿着“采集—处理—表示—训练—评估”的主线逐层展开,每一节都会给出可操作的参数、检查清单和工程判断依据。掌握这条主线,你就能把零散的示教数据,转化为真正驱动 VLA 策略提升的数据资产。