OpenVLA-OFT+ 在真实世界 ALOHA 机器人任务中的应用

相关文件

评估

  • experiments/robot/aloha/:ALOHA 训练和评估文件
    • run_aloha_eval.py:ALOHA 评估脚本(客户端;见下文 “服务器端”)
    • aloha_utils.py:ALOHA 评估工具
    • 从原始 ALOHA GitHub 仓库 复制的其他 ALOHA 机器人环境文件:
      • constants.py
      • real_env.py
      • robot_utils.py
  • experiments/robot/:通用评估工具文件
    • openvla_utils.py:OpenVLA 特定的评估工具
    • robot_utils.py:其他评估工具
  • vla-scripts/deploy.py:VLA 服务器部署脚本(服务器端)

注意:与 LIBERO 评估设置不同,这里我们使用服务器 - 客户端接口。如果用户用于控制机器人的机器无法访问具有足够规格的本地 GPU 来运行微调后的 VLA 策略,这将特别有用。

训练

  • experiments/robot/aloha/:ALOHA 训练和评估文件
    • preprocess_split_aloha_data.py:ALOHA 数据预处理脚本
  • vla-scripts/finetune.py:VLA 微调脚本

设置

为训练策略和在 VLA 服务器上部署它们设置一个 conda 环境(参见 SETUP.md 中的说明)。

在 ALOHA 机器人数据上进行微调

我们假设您已经收集了一组关于 ALOHA 机器人的专家演示。

首先,使用我们的 preprocess_split_aloha_data.py 脚本预处理原始 ALOHA 数据集:将图像从 480x640 缩小到 256x256,并分割为训练集和验证集。以下是我们论文中 “将 X 放入锅中” 任务的示例(每个情节有 3 个可能的目标对象):

python experiments/robot/aloha/preprocess_split_aloha_data.py \ --dataset_path /scr/moojink/data/aloha1_raw/put_green_pepper_into_pot/ \ --out_base_dir /scr/moojink/data/aloha1_preprocessed/ \ --percent_val 0.05 python experiments/robot/aloha/preprocess_split_aloha_data.py \ --dataset_path /scr/moojink/data/aloha1_raw/put_red_pepper_into_pot/ \ --out_base_dir /scr/moojink/data/aloha1_preprocessed/ \ --percent_val 0.05 python experiments/robot/aloha/preprocess_split_aloha_data.py \ --dataset_path /scr/moojink/data/aloha1_raw/put_yellow_corn_into_pot/ \ --out_base_dir /scr/moojink/data/aloha1_preprocessed/ \ --percent_val 0.05 

然后,将预处理后的 ALOHA 数据集转换为与 OpenVLA 微调兼容的单个 RLDS 数据集。此过程与原始 OpenVLA 仓库中的过程相同。有关转换为 RLDS 的说明,请参见 此处(示例 ALOHA 预处理到 RLDS 的转换脚本可在 此处 获得;该脚本将上述三个预处理数据集转换为一个统一的 RLDS 数据集,并包含训练 / 验证拆分)。

转换为 RLDS 后,通过在 configs.py此处)、transforms.py此处)和 mixtures.py此处)中为其添加条目,将数据集(对于上面的示例任务,称为 aloha1_put_X_into_pot_300_demos)注册到我们的数据加载器。作为参考,在每个这些文件中,都有我们在论文中使用的 ALOHA 数据集的示例条目。

微调之前,在 prismatic/vla/constants.py 中设置所需的 ALOHA 动作块大小(参见 ALOHA_CONSTANTS 中的 NUM_ACTIONS_CHUNK)。我们默认将其设置为 25,因为在 ALOHA 设置中,我们使用 25 Hz 的控制频率以降低存储成本和训练时间(同时仍保持机器人运动的平滑性)。如果您使用 50 Hz,我们建议将 NUM_ACTIONS_CHUNK 设置为 50。一般来说,1 秒长的动作块是一个不错的默认值。不要修改 ACTION_PROPRIO_NORMALIZATION_TYPE:由于 ALOHA 机器人动作空间是绝对关节角度,我们不希望使用会剪辑异常值的归一化方案(例如我们在 LIBERO 中用于相对末端执行器姿态动作的 Q1-Q99 归一化),因为这会阻止模型输出某些对解决任务至关重要的机器人关节角度。

现在开始微调!以下是使用我们的 OFT+ 方法在上面的 “将 X 放入锅中” 任务上微调 OpenVLA 的示例命令(“OFT+” 中的 “+” 表示包含 FiLM 以增强语言接地)。将第一行中的 X 替换为您可用的 GPU 数量。

torchrun --standalone --nnodes 1 --nproc-per-node X vla-scripts/finetune.py \ --vla_path openvla/openvla-7b \ --data_root_dir /PATH/TO/RLDS/DATASETS/DIR/ \ --dataset_name aloha1_put_X_into_pot_300_demos \ --run_root_dir /YOUR/CHECKPOINTS/AND/LOG/DIR/ \ --use_l1_regression True \ --use_diffusion False \ --use_film True \ --num_images_in_input 3 \ --use_proprio True \ --batch_size 4 \ --learning_rate 5e-4 \ --num_steps_before_decay 50000 \ --max_steps 100005 \ --use_val_set True \ --val_freq 10000 \ --save_freq 10000 \ --save_latest_checkpoint_only False \ --image_aug True \ --lora_rank 32 \ --wandb_entity "YOUR_WANDB_ENTITY" \ --wandb_project "YOUR_WANDB_PROJECT" \ --run_id_note parallel_dec--25_acts_chunk--continuous_acts--L1_regression--3rd_person_img--left_right_wrist_imgs--proprio_state--film 

如果 X = 8 并且评估 100K 步 checkpoint,上述训练命令应该能复现我们在 “将 X 放入锅中” 任务上的 OpenVLA-OFT+ 结果。它将使用 3 个输入图像(1 个第三人称图像 + 2 个手腕相机图像)微调 OpenVLA。请注意,我们在某个时间点(上面的命令中是 50K 步)后使用学习率衰减,因为这样做可以加快训练收敛(根据我们的经验,训练 L1 损失会大幅下降)。

微调的最佳实践:

  • 一般来说,我们建议微调直到训练 L1 损失低于 0.01 并开始趋于稳定。
    • 实现这一点的一种方法是使用我们默认的学习率 5e-4 进行微调,直到损失开始非常缓慢地下降,然后将学习率衰减 10 倍至 5e-5(这应该会使损失大幅下降),并训练直到训练 L1 损失最终趋于稳定。
  • 根据您的数据集大小,您可能需要调整一些超参数。例如,如果您使用包含超过 300 个演示的大型数据集,您可能需要稍后衰减学习率并训练更长时间以获得最佳性能。过早衰减可能会导致次优策略。
  • 如果您的任务不需要良好的语言接地(例如,如果只有一个语言指令),则 FiLM 不是必需的;考虑设置 --use_film False 来训练更少的模型参数。
  • 请确保使用训练时使用的相同设备 / GPU 测试您的策略!否则,性能可能会大幅下降。如果您在用于测试的下游设备上(例如,在 H100 上训练,然后在 A100 上合并后在 A100 上测试)将 LoRA 权重合并到基础模型中,您可能能够避免性能下降。您可以查看我们的脚本 vla-scripts/merge_lora_weights_and_save.py 以离线将 LoRA 适配器合并到基础模型中。如果您在微调期间已经将 LoRA 权重合并到基础 OpenVLA 模型中也没关系;只要您仍然拥有 LoRA 适配器,您总是可以重新下载基础模型并再次合并(merge_lora_weights_and_save.py 将为您处理此问题)。

如果您遇到任何问题,请打开一个新的 GitHub 问题。

启动 ALOHA 机器人评估

在您将用于启动 VLA 服务器的主要 conda 环境(openvla-oft)中,安装一些用于服务器 - 客户端接口的包:

conda activate openvla-oft pip install uvicorn fastapi json-numpy 

在您将用于控制机器人的机器上,设置第二个 conda 环境,该环境将用于运行机器人环境、查询 VLA 服务器并在环境中执行动作:

# 创建并激活客户端 conda 环境 conda create -n openvla-oft-aloha python=3.10 -y conda activate openvla-oft-aloha # 安装 PyTorch # 使用特定于您机器的命令:https://pytorch.org/get-started/locally/ pip3 install torch torchvision torchaudio # 克隆 openvla-oft 仓库并通过 pip 安装以下载依赖项 git clone https://github.com/moojink/openvla-oft.git cd openvla-oft pip install -e . # 安装 ALOHA 机器人环境所需的包 pip install -r experiments/robot/aloha/requirements_aloha.txt 

在具有您将用于运行模型推理的 GPU 的机器上启动 VLA 服务器(使用 openvla-oft conda 环境)。以下是为此的示例命令(根据需要更改):

python vla-scripts/deploy.py \ --pretrained_checkpoint /PATH/TO/FINETUNED/MODEL/CHECKPOINT/DIR/ \ --use_l1_regression True \ --use_film True \ --num_images_in_input 3 \ --use_proprio True \ --center_crop True \ --unnorm_key aloha1_put_X_into_pot_300_demos 

然后,运行 ALOHA 评估脚本。在 vla_server_url 参数中指定 VLA 服务器 URL 或 IP 地址。以下是示例命令:

python experiments/robot/aloha/run_aloha_eval.py \ --center_crop True \ --num_open_loop_steps 25 \ --use_vla_server True \ --vla_server_url <VLA 服务器的 URL> \ --num_rollouts_planned <测试滚动次数> \ --max_steps <每次滚动的最大步数> 

如果您遇到任何问题,请打开一个新的 GitHub 问题。

故障排除提示

提示 #1:如果您遇到 ROS 错误,例如 ImportError: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0,请尝试在您的客户端 conda 环境(openvla-oft-aloha)中运行以下命令:plaintext

conda install -c conda-forge libffi

Read more

Android陀螺仪实战:从基础到VR运动策略封装

1. 陀螺仪基础:从传感器数据到三维旋转 大家好,我是老张,在移动端和智能硬件领域摸爬滚打了十几年,今天想和大家聊聊 Android 陀螺仪。很多刚接触的朋友会觉得这东西很神秘,什么角速度、姿态解算,听起来就头大。其实没那么复杂,你可以把陀螺仪想象成一个特别灵敏的“旋转速度计”。当你拿着手机转动时,它就能立刻告诉你:“嘿,你现在正绕着X轴,以每秒0.5弧度的速度在转呢!” 在 Android 里,我们通过 SensorManager 这个“大管家”来和陀螺仪打交道。第一步永远是获取服务,这就像你去银行办事得先取号一样。拿到 SensorManager 后,我们就能查询设备上有没有陀螺仪(Sensor.TYPE_GYROSCOPE)。现在绝大多数手机都有,但稳妥起见,检查一下总是好的。接下来就是注册一个监听器,告诉系统:“我准备好接收旋转数据了,有新数据就赶紧通知我。” 这里有个关键参数叫采样延迟,比如 SENSOR_DELAY_

OpenClaw本地部署接入飞书机器人完全安装指南

OpenClaw本地部署接入飞书机器人完全安装指南

作者:网心 2026-3-10 在 Windows 系统上从头开始部署 OpenClaw,并将其配置为可以接入飞书的智能机器人。我们将以实战中遇到的问题为鉴,确保安装过程顺畅无误。 第一章:准备工作与环境检查 在正式开始安装前,请确保您的电脑满足以下基础条件,并理解我们将要使用的关键命令。 1. 系统要求 操作系统: Windows 10 或 Windows 11 (需使用管理员权限运行 PowerShell)。 网络环境: 能够正常访问 GitHub 和 npm 仓库。如果您在网络受限的环境中,可能需要提前准备代理或镜像配置。 2. 核心命令解释 在整个安装过程中,有两个核心命令您需要理解: 一键安装命令:iwr -useb https://openclaw.ai/install.ps1 | iex iwr:Invoke-WebRequest 的别名,用于从指定网址下载文件。

openclaw多Agent和多飞书机器人配置

增加Agent多个飞书机器人 一个Agent尽量只用一个飞书机器人配置 一:先增加新的agent # 创建新的Agent,命名为new-agnet openclaw agents add new-agnet # 查看创建结果 openclaw agents list 二:新的agent与新的飞书链接 配置agnet下的channels: 在命令行输入 # 配置new-agnet机器人(替换为实际App ID和App Secret) openclaw config set agents.new-agnet.channels.feishu.appId "你的new-agnet 飞书 App ID" openclaw config set agents.new-agnet.channels.feishu.appSecret "你的new-agnet 飞书 App Secret"

Rokid 手势识别技术深度解析:解锁 AR 无接触交互的核心秘密

Rokid 手势识别技术深度解析:解锁 AR 无接触交互的核心秘密

引言 在聊手势识别前,咱们先搞清楚:Rokid是谁?它为啥能把AR手势做得这么自然? Rokid是国内AR(增强现实)领域的“老兵”了,从2014年成立就盯着一个目标——让AR走进日常。你可能见过它的产品:能戴在脸上的“AR眼镜”Max Pro、能揣在兜里的“AR主机”Station 2、适合专业场景的“Station Pro”,这些设备不是用来“炫技”的,而是想让咱们摆脱手机、手柄的束缚,直接用手“摸”虚拟东西。 而手势识别,就是Rokid给AR设备装的“最自然的遥控器”——比如调大虚拟屏幕像捏橡皮一样捏合手指,翻页像翻书一样挥手。但不同设备、不同开发需求,需要搭配不同版本的SDK(软件开发工具包),这就像“不同型号的手机要装对应版本的APP”。 一、基础认知:先选对版本,避免开发走弯路 Rokid手势识别技术随SDK版本迭代持续优化,不同版本适配的Unity(开发工具)