
9 种双臂机器人构型、2万小时真实操作数据
——真能跑通?
作为具身智能领域的开发者,我们一直在寻找一个真正可跨硬件、低门槛落地的 VLA 基座模型。
最近我们注意到蚂蚁灵波科技开源的 LingBot-VLA。
该模型基于 20000 多小时的大规模真机数据,覆盖了 9 种主流双臂机器人构型,包括 Agibot G1、AgileX、Galaxea R1Pro 等进行了预训练,并宣称在真机和仿真评测中超越了 Pi0.5 等基线模型。
更重要的是,真机后训练代码也一并开源,包含真机训练设置、开环评测代码、部署推理等。官方表示,仅需极少量数据(比如 150 条演示数据)即可实现高质量的任务迁移,并且训练效率是主流框架的 1.5 到 2.8 倍。

图 | 不同于以往的 VLA 模型仅在单一机器人本体上进行性能评估,LingBot-VLA 在多种异构机器人本体上均能超越当前最强基线模型©【深蓝具身智能】编译
真的有这么丝滑吗?
为了验证它的实际表现,我们决定完整“跑一遍” LingBot-VLA 的复现流程,看看它是否真的能做到“看得懂、用得上、跑得起来”。

开箱体验:对新手极其友好的环境与权重准备
打开 LingBot-VLA 的 GitHub 仓库,第一感觉是:代码内容规范,注释齐全,文档资料非常完整详细。

仓库的目录结构一目了然:configs/、deploy/、scripts/ ,README 里从环境依赖到快速上手的步骤很详细。
-
在环境搭建方面,官方给出的依赖非常清晰(Python 3.12.3, PyTorch 2.8.0, CUDA 12.8),并且提供了一个 install.sh 脚本。
我们直接克隆仓库并运行脚本,整个基础环境的配置基本上一路畅通,不过这里有一个小插曲:
我们在安装过程中遇到了 flash-attn 编译耗时较长的情况,我们几度怀疑是环境配置有冲突,但在排查过程中我们发现官方 README 里对此有所提示,是比较常见的现象,经过一段时间的等待也是顺利编译成功。
总体来看,在环境配置这一块,我们没有遇到常见的各种依赖冲突“坑”,这对于新手快速入门来说非常友好。
Bash
conda create -n lingbotvla python=3.12 -y
conda activate lingbotvla
git clone https://github.com/Robbyant/lingbot-vla.git
cd lingbot-vla
bash install.sh
-
在模型权重方面 ,蚂蚁灵波在 HuggingFace 上提供了非常丰富的选择。
包含两种配置:无深度版(LingBot-VLA-4B)和深度蒸馏版(LingBot-VLA-4B-Depth)。

图 | LingBot-VLA 的模型页面同时提供多种权重选择,除 HuggingFace 版本外,还附上了 ModelScope 的下载链接,对国内开发者而言十分友好,无需为网络访问问题烦恼,即可快速获取所需权重。©【深蓝具身智能】编译
如果你的任务需要更高的空间感知能力(比如处理透明物体),可以选择深度版。
使用官方提供的下载脚本,模型权重的拉取非常顺畅,从 README 到安装脚本,再到 HuggingFace 上的详细 Model Card,整个环境配置的门槛是比较低的。

数据准备:全面对接标准生态,映射配置灵活
做过具身智能复现的人都知道,最让人头疼的往往不是模型本身,而是数据格式的对齐。
LingBot-VLA 选择了一个对开发者比较友好的方向:
全面对接 HuggingFace LeRobot v3.0 生态。
这意味着如果你之前已经用 LeRobot 采集过数据,接入成本会非常低;即便是从零开始,官方也提供了完整的转换脚本和说明。
特别想提醒一句:我们最初在准备数据时忘记将 LeRobot v2.1 格式的数据先合并再转换,导致走了一段小弯路,后来仔细翻了一遍官方的 Custom Data Guide,发现文档里其实已经明确提示了"合并应在 v2.1 阶段完成,再统一转换到 v3.0"。
这也提醒大家:上手之前,把数据处理指南从头到尾通读一遍费长有必要,官方的文档写的非常详细,因此可能看起来有些“长”,但耐心读完能够避开不少坑。

图 | 官方提供了详尽的自定义数据处理指南,覆盖从数据合并、格式转换到特征映射的完整流程,开发者无需担心自有设备的数据是否适配,只需按照文档一步步操作,便能将手头的演示数据顺利接入训练流水线。©【深蓝具身智能】编译
在查阅官方的 Custom Data Guide 时,我们发现整个数据准备流程被清晰地拆解为三步:
-
将演示数据转换为 LeRobot v3.0 格式;
-
准备 Robot Config 定义特征映射;
-
计算归一化统计量。
其中最具亮点的,就是 Robot Config 的设计。
我们知道,不同本体的机械臂,其关节维度、相机视角命名千差万别。在 configs/robot_configs/ 目录下,官方通过简洁的 YAML 文件,优雅地解决了这个问题。
以官方提供的robotwin.yaml中states部分为例,可以非常直观地看到原始数据键值是如何映射到统一特征空间的:
YAML
states:
- observation.state.arm.position:
origin_keys:
- observation.state: # left arm joints [0:6)
start: 0
end: 6
- observation.state: # right arm joints [7:13)
start: 7
end: 13
通过将左臂和右臂的关节数据拼接,可以轻松地映射到统一的 arm.position。
相机视角的映射也同样简单,比如将 cam_high 映射为标准的 camera_top。这种设计极大地降低了适配自定义数据集的难度。
准备好映射后,只需要运行一行代码即可生成归一化统计文件:
Bash
CUDA_VISIBLE_DEVICES=0 bash train.sh scripts/compute_norm.py ./configs/vla/real_load20000h.yaml \
--data.data_name robotwin \
--data.train_path path_to_dataset \
--data.norm_stats_file norm_path.json
整个数据流转过程逻辑清晰,即便是第一次接触该框架的开发者,也能照着文档顺利走通。

真机后训练实战:少量数据与高效率的碰撞
数据准备就绪,接下来就是“真机后训练”。
我们仔细翻了官方提供的真机推荐配置 configs/vla/real_load20000h.yaml。
坦白说,第一眼看到这么多参数,还是有点懵:fsdp2、use_compile、rmpad 这些选项如果没有说明文档,很难知道该怎么调。
不过官方提供了一份 Training_Config.md,把每一个参数的含义和建议值都解释得很清楚,对着文档看一遍之后,整体思路就清晰多了。
这份文档我们也非常推荐各位刚上手调参经验还不是非常丰富的开发者阅读。
model:
model_path: robbyant/lingbot-vla-4b
tokenizer_path: Qwen/Qwen2.5-VL-3B-Instruct
data:
datasets_type: vla
data_name: robot_config_filename
train_path: path_to_dataset
joints:
- arm.position: 14
- effector.position: 2
cameras:
- camera_top
- camera_wrist_left
- camera_wrist_right
num_workers: 8
norm_type: meanstd
norm_stats_file: norm_path
train:
output_dir: "output/"
data_parallel_mode: fsdp2
enable_full_shard: false
module_fsdp_enable: true
use_compile: true
rmpad: false
rmpad_with_pos_ids: false
ulysses_parallel_size: 1
freeze_vision_encoder: false
tokenizer_max_length: 72
max_action_dim: 75
max_state_dim: 75
lr: 5.0e-5
lr_decay_style: constant
micro_batch_size: 32
gradient_accumulation_steps: 1 # global_batch_size = micro_batch_size * gradient_accumulation_steps * 8 = 256 when we train with 8 GPUs
max_steps: 40000
ckpt_manager: dcp
save_steps: 10000
save_epochs: 0
enable_fp32: true # Control the precision of the action expert
enable_resume: true

图 | 官方提供的详尽训练配置参数说明,为所有超参数都做了详细的解释说明并给出例子,对于调参经验少的开发者来说,直接使用官方提供的默认配置即可跑出不错的效果。©【深蓝具身智能】编译
启动训练的命令非常简洁,也是一行代码即可跑通。
Bash
bash train.sh tasks/vla/train_lingbotvla.py ./configs/vla/real_load20000h.yaml \
--data.data_name robotwin \
--data.train_path path_to_dataset \
--data.norm_stats_file norm_path.json \
--train.output_dir output/
在模拟训练的过程中,我们重点关注了官方提到的两个核心优势:
少量数据微调、极高的训练效率。
-
首先是数据量。
得益于 20000+ 小时的大规模预训练,LingBot-VLA 在迁移新任务时的起点比较高。
官方宣称仅需 150 条演示数据即可实现高质量迁移,这个数字确实让人有些将信将疑,但从训练逻辑来看,模型收敛速度较快,这和它预训练阶段打下的基础密切相关。
当然,具体效果还是要看任务复杂度和数据质量,不能一概而论。
-
其次是训练效率。
底层代码库的优化,如引入了 PyTorch 的 torch.compile 和 FSDP2,效果显著。
根据官方技术报告,在 8-GPU 环境下,系统的吞吐量达到了惊人的 261 samples/sec。
对于显存有限的开发者,配置中也支持通过设置 gradient_accumulation_steps 来实现大 global batch size 训练,算力成本被极致压缩。

部署与评测:让机器人真正“动”起来
训练完成后,如何验证效果并部署到真机?
官方提供了一套完整的验证闭环。
可以先用 scripts/open_loop_eval.py 进行开环评测,快速验证模型对当前任务的掌握程度。确认无误后,就可以使用 deploy 目录下的脚本启动推理服务了:
Bash
export QWEN25_PATH=path_to_Qwen2.5-VL-3B-Instruct
python -m deploy.lingbot_vla_policy \
--model_path path_to_posttraining_ckpt \
--use_compile \
--use_length 25
阅读 deploy/lingbot_vla_policy.py 源码可以发现,推理脚本的封装非常成熟。它支持自适应的动作集成(action ensemble),并且在加载模型时会自动合并训练配置。
当模型真正在机器上运行起来时,整体表现还是比较稳定的。
同一套权重确实能够迁移到不同构型的双臂机器人上,这一点我们通过 Demo 来呈现比较直观:
比如在精细操作方面,部署算法之后,LingBot-VLA 能够控制机械臂准确地抓取托盘中指定颜色的玩具骨头,并将其平稳地移出放置。
-
整个“拾取与放置(Pick and Place)”的过程,机械臂的动作连贯且精准。
-
在稍微复杂一些的连贯任务中
部署了LingBotVLA的机器人,都能丝滑地完成“打开微波炉门 -> 取出里面的碗 -> 关上微波炉门”这一系列动作。
特别是机械臂夹爪与微波炉门把手之间的交互,展现出了极高的控制精度。
这些真实场景下的部署表现,证明了 LingBot-VLA 在面对不同硬件本体和不同日常任务时,都具备极强的适应能力和执行能力。
特别是在使用了带有 Depth 深度信息的模型后,机器人获得了更高质量的空间感知。

不止于“能跑通”
走完这一整套复现流程,我们对蚂蚁灵波 LingBot-VLA 的评价可以用三个词概括:规范、高效、实用。
-
代码与文档极具诚意:从一键安装脚本到详尽的 YAML 配置文件,再到 HuggingFace 上完善的模型卡片,处处体现着对开发者的友好。
-
复现门槛大幅降低:统一的 Robot Config 解决了硬件适配痛点,少量数据微调即可见效,打破了以往“换任务就得重头再来”的魔咒。
-
部署简单,容易跑通:无论是环境配置、数据转换还是最后的真机推理,整个流程跑下来没有遇到阻塞性的技术壁垒,对新手相对包容。当然,真正到了自己的硬件上,难免还会遇到各种细节问题,好在官方的 Issues 区回复比较及时,遇到问题可以直接去提。
当然,从开发者的角度来看,我们也有一些更多的期待:
目前官方提供的 Robot Config 示例主要覆盖了双臂构型,对于单臂或移动底盘等其他形态的机器人,适配文档还可以进一步补充;
此外,如果未来能提供一套端到端的视频教程,或者更多真实任务的最佳实践案例,相信会帮助更多"非科班"背景的开发者快速上手。
编辑|阿豹
审编|具身君
扫码添加阿蓝,选择想要加入的交流群即可
(按照提交顺序邀请,请尽早选择)
👇
