RoboLab#
通过 RPent 的观测和动作工具运行 Isaac Lab RoboLab 任务,每次运行连接一个 DROID 关节位置控制环境。任务成功由 RoboLab 原生评估器判定。本地六任务评估属于子集实验,不代表完整 RoboLab 基准结果。
概览#
DROID 关节位置控制的 Pi0.5,或不使用模型直接执行原生动作。
api、claude_code、codex。
RoboLab 基准任务类,例如 BananaInBowlTask。
Linux、NVIDIA GPU、Python 3.11、Isaac Sim 5.0 / Isaac Lab 2.2.0。
任务#
选项 |
作用 |
|---|---|
|
从已安装的 RoboLab 中选择一个基准任务,创建一个仿真环境。 |
|
将种子传入原生环境配置。 |
任务类由已安装的 RoboLab 版本提供。RPent 不包含其任务定义或场景资产。
观测与动作#
项目 |
说明 |
|---|---|
观测 |
外部与腕部 RGB 图像、八个 DROID 关节/夹爪状态值和任务指令。策略使用 224 像素图像;保存给规划器的图像保持相机原始分辨率。 |
动作 |
|
奖励与成功判定 |
RoboLab 的原生环境结果写入 |
任务指令 |
当前环境的任务指令,也会传给 Pi0.5。 |
安装与资源准备#
准备 Linux、兼容的 NVIDIA 驱动、Python 3.11、uv、Git、Git LFS 和 ffmpeg,然后在 RPent 仓库根目录运行:
bash script/install_robolab.sh
脚本创建 .venv-robolab-policy 和 .venv-robolab-sim,安装 RPent 的 robolab 可选依赖,并将 RoboLab 固定版本 b6cfcf6 及 LFS 资产下载到仓库旁的 ../RoboLab-runtime。可通过第一个参数指定其他外部目录;已有 checkout 必须符合固定版本。模型权重需要单独准备。
安装器会检查两个环境及图形运行库。在 Ubuntu 22.04 x86_64 上,缺少的 EGL、GLU、OpenGL 和 Vulkan 库通过 curl、dpkg-deb 和 sha256sum 安装到 .venv-robolab-sim/system-libs,无需 sudo,也不修改 NVIDIA 驱动。其他发行版需要通过系统包管理器安装缺少的图形库。下载并发和超时可通过 UV_* 环境变量调整,具体见 bash script/install_robolab.sh --help。
手动安装#
手动安装时,沿用其他仿真环境的 uv venv 和可选依赖安装方式:
uv venv --python 3.11 .venv-robolab-policy
source .venv-robolab-policy/bin/activate
uv pip install -e ".[robolab]"
RoboLab 从源码包相邻的 assets/ 读取 USD 资产。因此另建 Isaac 环境,并在
RPent 仓库之外安装带资产的 RoboLab 源码,并安装 openpi-client。
git lfs pull 下载任务所需资产。以下命令使用 Isaac Sim 5.0:
export ROBOLAB_SOURCE="$HOME/.cache/rpent/RoboLab"
git lfs install
mkdir -p "$(dirname "$ROBOLAB_SOURCE")"
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/NVlabs/RoboLab.git "$ROBOLAB_SOURCE"
git -C "$ROBOLAB_SOURCE" checkout b6cfcf6
git -C "$ROBOLAB_SOURCE" lfs pull
export RPENT_ROOT="$PWD"
uv venv --python 3.11 .venv-robolab-sim
(
cd "$ROBOLAB_SOURCE"
UV_PROJECT_ENVIRONMENT="$RPENT_ROOT/.venv-robolab-sim" \
uv sync --python 3.11 --extra isaac50 --no-dev --locked
uv pip install --python "$RPENT_ROOT/.venv-robolab-sim/bin/python" \
-e ".[isaac50]" openpi-client
)
完成手动安装后,检查图形库和依赖:
bash script/install_robolab_graphics.sh
uv pip check --python .venv-robolab-policy/bin/python
uv pip check --python .venv-robolab-sim/bin/python
完整 RPent 包仅安装在策略环境中。仿真进程通过启动器设置的 PYTHONPATH,
从本仓库加载环境服务和共享 RPC 模块。将 RPent 的规划器依赖装入 Isaac 环境,
会与 Isaac Sim 固定的依赖版本冲突。
模型权重#
仿真进程从已安装的 robolab 包及其相邻的 assets/ 读取资源,不读取
RPent 的 ref-repo/ 或 data/。另行设置 Pi0.5 检查点路径,路径可以在仓库外:
export PI05_CHECKPOINT_PATH=/absolute/path/to/pi05_droid_jointpos_torch
检查点需要匹配 DROID 关节位置 Pi0.5 模型:预测长度为 15,环境动作维度为 8。
策略环境使用 RLinf 的 pi05_droid_polaris 模型配置。请提供兼容的 PyTorch 权重目录,包含 model.safetensors 和 assets/droid/norm_stats.json。安装脚本不会下载或转换模型权重,JAX checkpoint 不能直接传入此加载器。运行不要求仓库中预先存在本地数据或权重目录;通过 --pi05-checkpoint 或 PI05_CHECKPOINT_PATH 指定自己的路径。
运行一个任务#
激活策略环境并检查本地 Codex 登录。随依赖安装的 CLI 使用当前用户登录,此登录方式无需 API Key。其他规划器及认证方式见 规划器配置。
source .venv-robolab-policy/bin/activate
export CODEX_BIN="$(python -c 'from codex_cli_bin import bundled_codex_path; print(bundled_codex_path())')"
"$CODEX_BIN" login
"$CODEX_BIN" login status
rpent-check-llm --planner codex --timeout-s 90 --json
连接检查成功后运行任务。将 --cuda-device 设置为显存充足的物理 GPU 编号,示例使用 GPU 0。规划器默认读取 Codex 配置中的模型,也可以通过 --model 指定。
rpent --robot robolab --task BananaInBowlTask --seed 0 \
--sim-python "$PWD/.venv-robolab-sim/bin/python" \
--cuda-device 0 --planner codex \
--output-dir ./logs/first-robolab
快捷脚本会在启动任务前检查当前 Codex 登录:
bash script/run_robolab.sh "$PI05_CHECKPOINT_PATH" BananaInBowlTask 0 ./logs/first-robolab
运行快捷脚本的终端应配置好仿真需要的 GPU 可见性;上面的 CLI 命令可直接指定物理 GPU。脚本使用现有 Codex 配置和登录。
只检查环境而不加载检查点时,加入 --policy-backend none。此时可使用
execute_action 和 view_env_state,但没有 pi05_act。
要使用 Dashboard,将 --task BananaInBowlTask --seed 0 改为
--dashboard,再通过 /rpent-task BananaInBowlTask 0 创建任务。
Dashboard 在多个任务间共用 Pi0.5,并为每个任务创建新环境;该模式需要 Pi0.5。
查看结果#
logs/first-robolab/states.json 保存 RPent 步骤记录;main.png 和
wrist.png 目录保存观测图像。result.json 单独记录原生任务成功状态;
RoboLab 尚未返回终止结果时,success 为 null。
env_server.log 与 vla_server.log
分别保存组件日志。RoboLab 原生输出位于 logs/first-robolab/native/。
查看最后一次 view_env_state:只有 RoboLab 报告成功时,state.success
才为 true。原生任务尚未结束时,该值为 null;达到步数上限不代表成功。
任务记忆#
RoboLab 默认使用本地记忆目录。传入
--memory-profile local --memory-dir /path/to/memory 可复用自己的任务笔记。
运行时不会下载 RoboLab 专属记忆库。
评估任务子集#
评估脚本串行运行六个任务,各使用环境 seed 0、1、2:BananaInBowlTask、BowlStackingLeftOnRightTask、BowlStackingRightOnLeftTask、BananaThenRubiksCubeTask、ReorientRedMugTask 和 StackYellowOnRedTask。模型权重路径必须显式传入,结果默认保存到 logs/robolab_eval/unaligned_6tasks_3seeds/。先预览运行命令:
bash script/eval_robolab_subset.sh \
--checkpoint "$PI05_CHECKPOINT_PATH" --gpu 0 \
--output-dir ./logs/robolab-subset --dry-run
去掉 --dry-run 后开始执行,也可通过 --tasks 和 --seeds 选择更小的子集。默认每回合最多 400 个规划轮次、3600 秒规划预算,推理强度为 low;仿真启动时间不计入规划预算。每次尝试使用空白的 RPent 本地记忆,Codex 会话存储遵循用户配置。环境 seed 不会固定策略采样随机数。策略使用上游 RLinf 实现、10 步去噪、两路图像,每次预测最多执行 15 个动作;规划器可缩短动作块或直接发送动作。
manifest.json 保存配置、依赖版本和源码哈希。summary.json 与 summary.csv 分别统计原生成功、失败、提前结束、预算耗尽、运行错误和中断。成功率以已结束的评估回合为分母,其中包括提前结束和预算耗尽;运行错误与中断单独报告。重复相同命令会跳过已结束回合,对错误或中断使用新的 attempt 目录重试。遇到运行错误时脚本停止;配置或源码改变后必须使用新输出目录,避免混合结果。
问题排查#
若环境启动失败,查看 env_server.log,确认 --sim-python 指向的
Isaac 环境以 editable 模式安装了带 assets/ 的 RoboLab。若策略启动失败,
查看 vla_server.log 和检查点路径。仿真与策略依赖冲突时,保持两个 Python
环境分离。
遇到 Vulkan 初始化错误或缺少 libGLU.so.1 时,重新执行 bash script/install_robolab_graphics.sh 并查看 Isaac 日志;启动器会自动加入本地图形库路径。渲染和物理仿真使用选定的物理 GPU,并禁用多 GPU 渲染;Isaac 仍可能在其他 GPU 创建少量 CUDA 上下文。在共享机器上使用 nvidia-smi 检查实际显存占用。
下载 wheel 超时时,可对相同外部目录和虚拟环境重新执行安装脚本,已有下载缓存会保留。依赖冲突应分别查看两个环境的 uv pip check 输出。Codex 网络错误记录在规划器日志中,可能自动重试;进程正常退出本身不能证明原生任务成功。