我会把“VLA 大脑 → 小脑 → 运动学/轨迹 → 伺服控制 → 电机/物理 → 反馈”拆成完整控制链,并用一组前后一致的 7 自由度单臂 + 平行夹爪示例数据贯穿“抓苹果放入篮子”。同时我会区分论文/开源实现里明确存在的接口,和工程上常见但并非 VLA 标准定义的“小脑”层。
先给一个关键结论:论文里并没有统一定义一个名为“小脑(Cerebellum)”的模块。OpenVLA 这类系统常直接输出 7 维末端增量动作,再由机器人环境做坐标变换和 IK;而π0.5\pi_0.5π0.5这类层级模型已经明确区分“高层子任务”和“低层动作专家”,这与“VLA 大脑 + 小脑”的工程抽象非常接近。
工程上最值得注意的是“动作空间”。同一个 VLA 可能输出笛卡尔末端动作(Cartesian End-Effector Action),也可能输出关节动作(Joint-Space Action)。OpenVLA 的 OXE 配置明确支持“末端Δxyz\Delta xyzΔxyz+Δ\DeltaΔRPY + 夹爪”,而 Physical Intelligence 的 DROID 部署则使用“7 个关节速度 + 1 个夹爪量、15 Hz”。所以 IK 是否出现,取决于小脑最后输出在哪个空间。
可以。下面我把它按一个真正可落地的分层具身控制(Hierarchical Embodied Control)系统拆开。
先明确一个重要事实:业界并没有统一规定一个模块必须叫“小脑(Cerebellum)”。为了和你前面的“大脑 + 小脑 + IK”讨论保持一致,我采用下面这个工程定义:
VLA 大脑→高层子任务→小脑→连续动作→IK/控制器→机器人\boxed{\text{VLA 大脑}\rightarrow\text{高层子任务}\rightarrow\text{小脑}\rightarrow\text{连续动作}\rightarrow\text{IK/控制器}\rightarrow\text{机器人}}VLA 大脑→高层子任务→小脑→连续动作→IK/控制器→机器人
这种划分与π0.5\pi_{0.5}π0.5的论文结构尤其接近:它把高层推理写成“根据观测和总任务预测下一子任务”,再由动作专家根据该子任务预测低层动作序列。OpenVLA、RT-2 则证明了另一种路线:VLA 可以直接输出机器人低层动作。turn195172view0
下面以一台类似 Franka Panda 的7 自由度机械臂(7-DoF Manipulator)+平行双指夹爪(Parallel-Jaw Gripper)为例,实现:
“把桌子上的红苹果放进桌子上的篮子。”
一、先看整个系统到底分成哪些层
我建议实际系统按照下面这些层划分:
| 层级 | 模块 | 核心作用 | 典型输出 |
|---|---|---|---|
| L6 | VLA 大脑(VLA Brain) | 看懂场景、理解指令、决定下一子任务 | approach apple |
| L5 | 小脑(Cerebellum / Action Policy) | 把子任务变成短时连续动作 | 末端动作 chunk |
| L4 | 动作适配器(Action Adapter) | 反归一化、坐标系转换、安全限幅 | Δx,ΔR,g\Delta x,\Delta R,gΔx,ΔR,g |
| L3 | 逆运动学(Inverse Kinematics, IK) | 末端动作变关节目标 | qdesq_{\mathrm{des}}qdes |
| L2 | 关节伺服控制(Joint Servo Control) | 关节目标变力矩/速度/位置命令 | τ\tauτ或qcmdq_{\mathrm{cmd}}qcmd |
| L1 | 驱动器(Actuator / Motor Driver) | 执行控制命令 | 电机转矩 |
| L0 | 机械系统(Robot Dynamics) | 真正产生运动 | qt+1,q˙t+1q_{t+1},\dot q_{t+1}qt+1,q˙t+1 |
| Feedback | 传感器反馈(Sensor Feedback) | RGB、关节、夹爪、力矩等 | 新观测ot+1o_{t+1}ot+1 |
其中 OpenVLA 的官方 OXE 配置明确支持这种末端动作:
at=[Δx,Δy,Δz,Δroll,Δpitch,Δyaw,g]a_t=[\Delta x,\Delta y,\Delta z,\Delta roll,\Delta pitch,\Delta yaw,g]at=[Δx,Δy,Δz,Δroll,Δpitch,Δyaw,g]
也就是 3 维平移 + 3 维旋转 + 1 维夹爪。
二、先定义一个接近真实机械臂的场景
为了下面所有数字能够串起来,先固定坐标系。
这里定义机器人底座坐标系为:
{ B}\{B\}{B}
单位:
- 位置:m
- 角度:rad
- 速度:m/s、rad/s
- 力:N
- 力矩:N·m
场景如下。
苹果
苹果直径约:
dapple=0.064 md_{\mathrm{apple}}=0.064\text{ m}dapple=0.064 m
苹果中心:
papple=[0.480, 0.140, 0.033]p_{\mathrm{apple}}=[0.480,\ 0.140,\ 0.033]papple=[0.480, 0.140, 0.033]
也就是:
- 机器人前方 48 cm
- 左侧 14 cm
- 苹果直径约 6.4 cm
这个尺寸适合 8 cm 左右最大开口的双指夹爪。
篮子
篮子内部中心:
pbasket=[0.530, −0.220, 0.070]p_{\mathrm{basket}}=[0.530,\ -0.220,\ 0.070]pbasket=[0.530, −0.220, 0.070]
篮口高度:
zrim=0.125 mz_{\mathrm{rim}}=0.125\text{ m}zrim=0.125 m
内部有效尺寸约:
240 mm × 180 mm因此苹果放入中心位置非常安全。
机械臂初始状态
7 个关节:
q0=[0.100,−0.550,0.120,−2.050,0.050,1.630,0.780]q_0=[0.100,-0.550,0.120,-2.050,0.050,1.630,0.780]q0=[0.100,−0.550,0.120,−2.050,0.050,1.630,0.780]
单位 rad。
关节速度:
q˙0=[0.030,−0.010,0.020,0,0.010,−0.020,0.010]\dot q_0=[0.030,-0.010,0.020,0,0.010,-0.020,0.010]q˙0=[0.030,−0.010,0.020,0,0.010,−0.020,0.010]
夹爪当前开口:
w0=0.078 mw_0=0.078\text{ m}w0=0.078 m
当前末端大致位于:
pee=[0.380, 0.000, 0.320]p_{ee}=[0.380,\ 0.000,\ 0.320]pee=[0.380, 0.000, 0.320]
末端朝下。
下面这些数字是一组工程上合理的示例数据,不代表某一台 Franka 的实际标定记录;真实系统中的q↔TCPq\leftrightarrow TCPq↔TCP精确对应关系由 URDF、工具坐标和标定参数决定。
三、VLA 大脑的输入到底是什么?
这是最容易混淆的地方。
不同 VLA 不完全相同。
OpenVLA 的典型接口非常简单:
image+language instruction ↓ predict_action()↓7-DoF action其官方示例就是 RGB 图像 + prompt,然后predict_action()输出机器人动作。
而π0/π0.5\pi_0/\pi_{0.5}π0/π0.5更进一步,会显式输入机器人自身的本体感觉(Proprioception)。Physical Intelligence 的 DROID 适配代码实际构造的是:
外部相机 RGB 腕部相机 RGB 7 个关节位置 1 个夹爪位置 语言 prompt其中代码明确将:
joint_position: 7 + gripper_position: 1 = state: 8 dimensions拼接后输入模型。
VLA 大脑输入示例
例如当前时刻:
instruction: "把桌子上的红苹果放进篮子。" base_rgb: dtype = uint8 shape = [224, 224, 3] wrist_rgb: dtype = uint8 shape = [224, 224, 3] joint_position: [ 0.100, -0.550, 0.120, -2.050, 0.050, 1.630, 0.780 ] gripper_position_normalized: [0.025]于是本体状态:
qtVLA=[0.100,−0.550,0.120,−2.050,0.050,1.630,0.780,0.025]q_t^{VLA}=[0.100,-0.550,0.120,-2.050,0.050,1.630,0.780,0.025]qtVLA=[0.100,−0.550,0.120,−2.050,0.050,1.630,0.780,0.025]
OpenPI 的 DROID 实现同样使用外部相机和腕部相机,并将输入调整为224×224224\times224224×224。
注意:
VLA 实际收到的是图像,而不是:
apple = [0.480, 0.140, 0.033] basket = [0.530, -0.220, 0.070]这些显式坐标通常不会直接提供给 VLA。
VLA 是从图像里面“看出来”:
红苹果在左前方,篮子在右前方。
在仿真或者调试日志中,我们才可能同时知道物体的 ground truth 坐标。
四、VLA 大脑的输出是什么?
这里有两种业界主流方案。
方案 A:VLA 直接输出动作
RT-2 和 OpenVLA 更接近这种方式:
It+l→atI_t+l\rightarrow a_tIt+l→at
例如:
输入: "把苹果放进篮子" + 当前 RGB 输出: [+0.008, +0.010, -0.012, 0, 0, 0, +1]这已经是低层机器人动作。
RT-2 就是把机器人动作离散成 token,推理以后再反解成机器人动作,并执行闭环控制。
五、更适合“大脑 + 小脑”的方案
如果你明确想做:
VLA 大脑 + 小脑
那么更推荐π0.5\pi_{0.5}π0.5风格的层级。
论文中的观测可以写成:
ot=[It1,…,ItN,qt]o_t=[I_t^1,\dots,I_t^N,q_t]ot=[It1,…,ItN,qt]
其中包括:
- 多路摄像头
- 机器人状态
总任务为:
lll
例如:
put the red apple into the basket大脑先产生高层子任务:
l^t\hat l_tl^t
然后动作专家产生动作:
at:t+Ha_{t:t+H}at:t+H
论文实际上把这个关系写成:
πθ(at:t+H,l^∣ot,l)=πθ(at:t+H∣ot,l^)πθ(l^∣ot,l)\pi_\theta(a_{t:t+H},\hat l\mid o_t,l)=\pi_\theta(a_{t:t+H}\mid o_t,\hat l)\pi_\theta(\hat l\mid o_t,l)