从零到真机可跑的完整流程:硬件选型 → 环境部署 → 模型推理 → 机械臂对接(含 ROS 2 示例)→ 闭环控制。全程基于小米开源的 Xiaomi-Robotics-0(VLA)


一、先搞清楚:VLA 输出什么?怎么控制机械臂?

小米 VLA 是端到端:图像 + 语言 → 动作序列

  • 输入:单目 / 双目 / RGB-D 图像 + 中文指令(如 “抓起杯子”)
  • 输出:连续动作 chunk(通常是:末端 6D 位姿 + 夹爪开合,7 维向量)
  • 控制频率:约 30Hz(80ms / 帧),消费级 GPU 可实时跑

所以流程是:

相机拍照 → VLA 推理 → 得到目标点位姿 → 发给机械臂控制器 → 运动执行

三、部署 VLA 模型(Ubuntu 22.04 示例)
1)拉取官方代码

git
 clone https://github.com/XiaomiRobotics/Xiaomi-Robotics-0
cd
 Xiaomi-Robotics-0
2)创建虚拟环境 & 安装依赖
bash

conda create -n mibot python=3.12
conda activate mibot

# 安装PyTorch(必须匹配CUDA)
pip 
install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8
.0 --index-url https://download.pytorch.org/whl/cu128

pip 
install transformers==4.57
.1
pip 
install flash-attn==2.8
.3 --no-build-isolation
pip 
install -r
 requirements.txt

3)下载权重(自动)
bash

python scripts/download_weights.py

• 权重约 4.2GB,自动存到 weights/
4)本地推理测试(图像 + 文字 → 动作)
python

import
 torch
import
 cv2
from models import
 XiaomiRoboticsVLA
from utils import process_image,
 decode_robot_action

device 
= "cuda" if torch.cuda.is_available() else "cpu"

# 加载模型
model 
= XiaomiRoboticsVLA.from_pretrained("weights/xiaomi_robotics_0_lite").to(device)
model
.eval()

# 读一张场景图
img 
= cv2.imread("demo.jpg")
img_tensor 
= process_image(img).to(device)

# 指令
instruction 
= "把红色杯子拿到左边"

# 推理
with torch.no_grad():
    action_chunk 
= model(img_tensor, instruction)  # shape: (T, 7)

# 解码成机械臂可执行指令
cmd 
= decode_robot_action(action_chunk)
print("输出动作序列:", cmd)

你会得到类似:
plaintext




[[x0,y0,z0,rx0,ry0,rz0,g0],
 [x1,y1,z1,rx1,ry1,rz1,g1],
 ...]

每一行是一帧末端位姿 + 夹爪状态。

四、对接机械臂(ROS 2 为例)
核心:把 VLA 输出的 7 维动作,转成 ROS 2 的目标位姿并发送给机械臂。
1)假设你的机械臂用 ROS 2 + MoveIt2
• 话题:/arm_controller/follow_joint_trajectory 或 /target_pose
• 消息类型:geometry_msgs/PoseStamped + std_msgs/Float32(夹爪)
2)写一个简单 bridge 节点(Python)
python


运行



import
 rclpy
from rclpy.node import
 Node
from geometry_msgs.msg import
 PoseStamped
from std_msgs.msg import
 Float32
import
 torch
from models import
 XiaomiRoboticsVLA
from utils import
 process_image

class VLAToRobot(Node):
    def __init__(self):
        super().__init__('vla_to_robot')
        self
.pose_pub = self.create_publisher(PoseStamped, '/target_pose', 10)
        self
.gripper_pub = self.create_publisher(Float32, '/gripper_cmd', 10)

        # 加载VLA
        self
.device = "cuda"
        self
.model = XiaomiRoboticsVLA.from_pretrained("weights/xiaomi_robotics_0_lite").to(self.device)
        self
.model.eval()

        # 相机订阅(RealSense示例)
        self
.create_subscription(Image, '/camera/color/image_raw', self.image_cb, 10)
        self
.img = None
        self
.instruction = "抓起桌上的杯子"

    def image_cb(self, msg):
        self
.img =
 msg
        self
.run_vla()

    def run_vla(self):
        if self.img is None:
            return
        # 图像预处理
        img_tensor 
= process_image(self.img).to(self.device)
        with torch.no_grad():
            action 
= self.model(img_tensor, self.instruction)[0]  # 取第一帧
        # action: [x,y,z,rx,ry,rz,g]
        x
,y,z,rx,ry,rz,g =
 action
        # 发位姿
        pose 
= PoseStamped()
        pose
.header.frame_id = "base_link"
        pose
.pose.position.x =
 x
        pose
.pose.position.y =
 y
        pose
.pose.position.z =
 z
        pose
.pose.orientation.x =
 rx
        pose
.pose.orientation.y =
 ry
        pose
.pose.orientation.z =
 rz
        pose
.pose.orientation.w = 1.0  # 简化
        self
.pose_pub.publish(pose)
        # 发夹爪
        self
.gripper_pub.publish(Float32(data=float(g)))

def main():
    rclpy
.init()
    node 
= VLAToRobot()
    rclpy
.spin(node)

if __name__ == "__main__":
    main
()

3)关键注意点
• 坐标对齐:VLA 输出是归一化 / 相对坐标,必须标定相机与机械臂基座的外参(手眼标定),否则会抓空。
• 动作平滑:VLA 一次输出一整段 chunk(如 10 帧),逐帧发送 + 插补,避免抖动。
• 安全限位:一定要加关节限位、碰撞检测、急停。

五、完整闭环流程(跑起来)
1. 启动机械臂 ROS 2 驱动 + MoveIt2
2. 启动 RealSense 相机节点
3. 启动 VLA bridge 节点
4. 对着场景说 / 输入指令:“把杯子放到盘子里”
5. 相机实时画面 → VLA 推理 → 输出末端轨迹 → 机械臂执行

六、常见坑 & 避坑
• ❌ 直接用原始输出:VLA 输出是相对 / 归一化坐标,必须手眼标定转成机械臂坐标系。
• ❌ 单相机无深度:尽量用RGB-D / 双目,否则 3D 空间不准,抓不准。
• ❌ 指令太模糊:要用具体动词 + 明确物体,如 “把红色杯子移到右边 5cm”,别用 “处理一下”。

七、下一步(你可以直接做)
1. 先在电脑上跑通单张图→动作的 demo(第三节)
2. 用 ** 仿真环境(如 PyBullet/Isaac Sim)** 对接 VLA,先在模拟器里动起来
3. 再上真实机械臂,先做手眼标定,再跑抓取任务

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐