通过百舸平台快速开始搭建 BEHAVIOR-1K 仿真环境并调用
一、产品简介
BEHAVIOR-1K 是斯坦福大学发布的家庭活动仿真基准,可以让您在电脑上模拟机器人在家庭场景中执行各种日常活动,无需真实机器人即可训练和测试。
核心能力:
- 提供 51 个家庭场景、1018 个日常活动任务(做饭、清洁、整理等),覆盖真实生活场景
- 基于 OmniGibson + NVIDIA Isaac Sim 仿真后端,提供高质量光线追踪渲染
- 支持 Turtlebot、Fetch、FrankaPanda、R1Pro 等多种机器人
- 内置 BehaviorTask、PointNavigationTask 等任务类型,适用于导航与操作策略研究
典型使用场景:
- 在无真实机器人的情况下验证家庭操作策略效果
- 对比不同策略模型在长程活动任务中的表现
- 利用高保真视觉渲染训练视觉-语言-动作模型
本指南帮助您快速上手核心功能。
二、快速开始
环境准备与开发机创建
硬件配置
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| GPU | L20 | L20 |
| NVIDIA 驱动 | 535.x | 535.161.08 |
| 内存 | 32GB | 64GB+ |
| CPU | 8 核 | 16 核+ |
| 存储 | 80GB | 200GB+(含数据集) |
BEHAVIOR-1K 使用 NVIDIA Isaac Sim 进行光追渲染,GPU 必须具备 RT Cores。A100、H800、H100 等纯计算卡不支持。请选择 RTX L20 等具备 RT Cores 的 GPU 机型。 NVIDIA 驱动请在添加资源池节点时进行配置。镜像内已预制 CUDA 12.4。
1.1 创建开发机
访问配置:
- 配置自定义端口:开启端口 8100(用于后续远程调用仿真服务,如果只做本地验证可先跳过)
- 配置 BLB:如需远程调用,请配置 BLB

1.2 登录开发机
开发机镜像中已经预装了完整的 BEHAVIOR-1K 环境,目录结构如下:
1/root/workspace/
2└── BEHAVIOR-1K/ # 项目源码
3 ├── datasets/ # 数据集
4 ├── baige/ # 百舸预置脚本(包含一键启动、验证等工具)
5 └── behavior-1k-quickstart.ipynb # 本文件
Python 环境:全局 Python 3.10(/usr/bin/python3),已安装 PyTorch 2.6.0+cu124 和 Isaac Sim 4.5.0。
下载数据集
执行以下命令在开发机中下载数据集:
1# 从百度 BOS 下载
2bcecmd bos cp -r bos:/aibox-private/behavior-1k/ ~/workspace/BEHAVIOR-1K/datasets/
数据集包含:omnigibson-robot-assets、behavior-1k-assets、2025-challenge-task-instances 等。
运行环境配置
运行该脚本配置 Behavior-1k 运行所需环境:
1bash ~/workspace/BEHAVIOR-1K/baige/run_env.sh
该脚本:
- 检测内核驱动版本,修复
libcuda.so.1等 symlink - 验证 CUDA 可用性
- 启动 Xvfb 虚拟显示
- 设置环境变量
环境可用性检查
1"""
2BEHAVIOR-1K 快速验证
3测试内容:
4 1. 创建环境(Rs_int 场景 + Turtlebot + DummyTask)
5 2. reset + 随机 step × 5
6 3. 打印 obs keys 和 reward
7运行方式:
8 cd ~/workspace/BEHAVIOR-1K/OmniGibson
9 bash ../baige/run_env.sh # 先修复 CUDA
10 python3 -u baige/behavior_test.py --/rtx/verifyDriverVersion/enabled=false
11"""
12
13import os
14import sys
15
16# 必须在 import omnigibson 之前设置
17os.environ.setdefault("OMNIGIBSON_HEADLESS", "True")
18os.environ.setdefault("OMNI_KIT_ACCEPT_EULA", "Yes")
19
20import time
21
22print("=== BEHAVIOR-1K 环境验证 ===\n")
23
24# 1. 导入
25try:
26 import omnigibson as og
27 from omnigibson.macros import gm
28 gm.RENDER_VIEWER_CAMERA = False
29 print("OmniGibson 导入成功")
30except ImportError as e:
31 print(f"[ERROR] 导入失败: {e}")
32 sys.exit(1)
33
34# 2. 创建环境
35print("\n[1/4] 创建环境 (Rs_int + Turtlebot + DummyTask)...")
36try:
37 t0 = time.time()
38 cfg = {
39 "env": {"flatten_action_space": True, "flatten_obs_space": True},
40 "scene": {"type": "InteractiveTraversableScene", "scene_model": "Rs_int"},
41 "robots": [{"type": "Turtlebot", "obs_modalities": ["rgb", "depth"]}],
42 "task": {"type": "DummyTask"},
43 }
44 env = og.Environment(configs=cfg)
45 print(f" 环境创建成功(耗时 {time.time()-t0:.1f}s)")
46except Exception as e:
47 print(f"[ERROR] 创建环境失败: {e}")
48 import traceback; traceback.print_exc()
49 sys.exit(1)
50
51# 3. Reset
52print("\n[2/4] Reset 环境...")
53try:
54 obs, info = env.reset()
55 print(f" obs keys 数量: {len(obs)}")
56 print(f" obs keys 示例: {list(obs.keys())[:5]}")
57except Exception as e:
58 print(f"[ERROR] Reset 失败: {e}")
59 import traceback; traceback.print_exc()
60 sys.exit(1)
61
62# 4. 随机 step
63print("\n[3/4] 随机 step × 5...")
64try:
65 for i in range(5):
66 action = env.action_space.sample()
67 obs, reward, terminated, truncated, info = env.step(action)
68 print(f" step {i+1}: reward={reward:.4f}, done={terminated}")
69except Exception as e:
70 print(f"[ERROR] Step 失败: {e}")
71 import traceback; traceback.print_exc()
72 sys.exit(1)
73
74og.shutdown()
75print("\n=== 验证完成 ✓ ===")
期望输出:
1=== BEHAVIOR-1K 环境验证 ===
2
3OmniGibson 导入成功
4
5[1/4] 创建环境 (Rs_int + Turtlebot + DummyTask)...
6 环境创建成功(耗时 147.3s) ← 首次启动较慢
7
8[2/4] Reset 环境...
9 obs keys 数量: 3
10 obs keys 示例: ['robot_...::rgb', 'robot_...::depth', 'task::low_dim']
11
12[3/4] 随机 step × 5...
13 step 1: reward=0.0000, done=False
14 step 2: reward=0.0000, done=False
15 ...
16
17=== 验证完成 ✓ ===
首次启动较慢(~2 分钟),因为 Isaac Sim 需要编译 GPU shader。后续启动约 30-80 秒。
基础用法
1import os
2os.environ["OMNIGIBSON_HEADLESS"] = "True"
3os.environ["OMNI_KIT_ACCEPT_EULA"] = "Yes"
4
5import omnigibson as og
6from omnigibson.macros import gm
7gm.RENDER_VIEWER_CAMERA = False
8
9# 创建导航任务环境
10cfg = {
11 "env": {
12 "flatten_action_space": True,
13 "flatten_obs_space": True,
14 "external_sensors": [{
15 "sensor_type": "VisionSensor",
16 "name": "external_sensor0",
17 "relative_prim_path": "/external_sensor0",
18 "modalities": ["rgb"],
19 "sensor_kwargs": {"image_height": 128, "image_width": 128},
20 "position": [0, 0, 1.0],
21 "orientation": [0.707, 0.0, 0.0, 0.707],
22 "pose_frame": "parent",
23 }],
24 },
25 "scene": {"type": "InteractiveTraversableScene", "scene_model": "Rs_int"},
26 "robots": [{"type": "Turtlebot", "obs_modalities": ["rgb", "depth"]}],
27 "task": {"type": "PointNavigationTask", "goal_type": "geolocation"},
28}
29env = og.Environment(configs=cfg)
30
31# 标准交互循环
32obs, info = env.reset()
33for step in range(100):
34 action = env.action_space.sample() # 替换为您的策略
35 obs, reward, terminated, truncated, info = env.step(action)
36 if terminated or truncated:
37 obs, info = env.reset()
38
39og.shutdown()
三、远程调用
场景说明
在实际使用中,您可能希望将仿真环境和策略推理部署在不同的机器上,例如:
- 仿真环境运行在一台 GPU 服务器上,负责物理模拟和画面渲染(需要 RT Cores GPU)
- 策略推理运行在另一台机器上,负责决策计算
- 团队中多人共享同一个仿真服务,各自运行不同的策略
此时可以使用远程调用功能,将系统拆分为两台机器通过网络通信:

创建流程
需要创建两台开发机(仿真服务器 + 推理服务器),创建步骤与「二、快速开始」相同,额外注意以下配置。
仿真服务器配置(Server B)
在开发机创建阶段,需要额外操作:
- 配置自定义端口:开启端口 8100(如在快速开始中已配置,可跳过)
- 配置 BLB:选择您使用的 BLB
- GPU 选型:仿真服务器必须选择带 RT Cores 的 GPU
创建成功后,在开发机详情页中会显示该机器的 IP 地址与仿真服务绑定端口
第一步:启动仿真服务
在仿真服务器上登录终端,执行以下命令:
1cd ~/workspace/BEHAVIOR-1K
2bash baige/behavior_deploy.sh
脚本自动执行:修复 CUDA symlink → 启动 Xvfb → 启动 FastAPI 服务 → 健康检查轮询。
启动成功后输出:
1✅ 服务器就绪!
2API 地址: http://<机器IP>:8100
3健康检查: curl http://localhost:8100/health
4查看日志: tail -f /tmp/behavior_env_server.log
确认服务是否正常运行:
1# 健康检查
2!curl http://localhost:8100/health
3# {"status":"ok"}
4
5# 查看支持的场景和机器人
6!curl http://localhost:8100/tasks
7# {"scenes": ["Rs_int", ...], "robots": ["A1", "Fetch", ...], "task_types": ["DummyTask", ...]}
第二步:运行推理客户端
如果需要在远程推理服务器(或本地机器)上调用仿真服务,则需要将 <仿真服务器IP> 与 <仿真服务实际对外暴露端口> 替换为你实际使用的值
1%%bash
2python3 ~/workspace/BEHAVIOR-1K/baige/behavior_test_client.py \
3 --server http://<仿真服务器IP>:<仿真服务实际对外暴露端口> \ # 远程调用
4 # --server http://localhost:8100 \ # 本地运行推理用于测试
5 --scene Rs_int \
6 --robot Turtlebot \
7 --steps 20 \
8 --output behavior_episode.gif
输出示例:
1=== BEHAVIOR-1K 远程随机推理 ===
2Server : http://192.168.1.100:8100
3Scene : Rs_int
4Robot : Turtlebot
5Steps : 20
6
7[✓] 服务健康: {'status': 'ok'}
8[✓] 可用场景数: 51
9
10创建环境(首次约 2 分钟)...
11 env_id=6e90a48f...
12 reset OK | obs_keys=3
13
14steps=20 | reward=0.0000 | done=False | 45.2s
15
16[✓] GIF 已保存: behavior_episode.gif
说明:因为使用的是随机策略,所以 reward 为 0 是正常现象。实际使用请替换为训练好的策略模型。
四、关键参数说明
仿真服务 API 接口
仿真服务启动后,提供以下 HTTP 接口供推理端调用:
| 接口 | 方法 | 说明 |
|---|---|---|
/health |
GET | 健康检查,确认服务是否正常 |
/tasks |
GET | 列出所有支持的场景、机器人和任务类型 |
/env/create |
POST | 创建一个新的仿真环境 |
/env/{env_id}/reset |
POST | 重置环境到初始状态 |
/env/{env_id}/step |
POST | 执行一个动作,获取结果 |
/env/{env_id} |
DELETE | 销毁环境,释放资源 |
创建环境示例:
1!curl -s -X POST http://localhost:8100/env/create \
2 -H "Content-Type: application/json" \
3 -d '{"scene_model": "Rs_int", "robot_type": "Turtlebot", "task_type": "PointNavigationTask"}'
创建环境参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
scene_model |
"Rs_int" |
场景名称(51 个可选,见第五节) |
robot_type |
"Turtlebot" |
机器人类型 |
task_type |
"DummyTask" |
任务类型:DummyTask / PointNavigationTask / BehaviorTask |
activity_name |
null | BEHAVIOR 活动名(task_type 为 BehaviorTask 时必填) |
image_height |
128 | 图像高度 |
image_width |
128 | 图像宽度 |
step 请求/响应示例:
请求:
1{"action": [0.5, 0.1]}
响应:
1{
2 "reward": -0.001,
3 "done": false,
4 "truncated": false,
5 "info": {...},
6 "obs": {"robot_...::rgb": "ndarray(128,128,4)", "task::low_dim": [0.0, ...]},
7 "image_base64": "<base64 encoded PNG>",
8 "depth_base64": "<base64 encoded PNG>"
9}
推理客户端参数(behavior_test_client.py)
| 参数 | 必选 | 说明 | 默认值 |
|---|---|---|---|
--server |
是 | 仿真服务器地址(含端口) | - |
--scene |
否 | 场景名称(见第五节场景列表) | Rs_int |
--robot |
否 | 机器人类型 | Turtlebot |
--steps |
否 | 每个轨迹的步数 | 20 |
--output |
否 | GIF 输出路径 | behavior_episode.gif |
五、常见场景与任务列表
以下是 BEHAVIOR-1K 中常用的场景和任务。
scene_model参数需填写「场景名称」列中的值。
常用场景
| 场景名称 | 说明 |
|---|---|
Rs_int |
单层公寓(推荐入门) |
Beechwood_0_int |
Beechwood 别墅底层 |
Merom_0_int |
Merom 住宅底层 |
Pomaria_0_int |
Pomaria 住宅底层 |
Wainscott_0_int |
Wainscott 住宅底层 |
提示:BEHAVIOR-1K 共支持 51 个场景。如需查看完整列表,可在 Python 中执行:
1from omnigibson.utils.asset_utils import get_available_behavior_1k_scenes
2print(get_available_behavior_1k_scenes())
常用机器人
| 机器人名称 | 说明 |
|---|---|
Turtlebot |
差速驱动机器人(推荐入门导航任务) |
Fetch |
移动操作机器人(带机械臂) |
FrankaPanda |
固定基座机械臂 |
R1Pro |
双臂移动机器人 |
如需查看所有可用机器人,可在 Python 中执行:
1import omnigibson as og
2print(list(og.REGISTERED_ROBOTS.keys()))
任务类型
| 任务类型 | 说明 |
|---|---|
DummyTask |
空任务(用于环境验证,无目标) |
PointNavigationTask |
导航任务(移动到目标位置) |
BehaviorTask |
行为任务(完成指定日常活动,需配合 activity_name) |
常用 BEHAVIOR 活动(需 task_type 为 BehaviorTask)
| 活动名称 | 说明 |
|---|---|
cleaning_out_fridge |
清理冰箱 |
washing_pots_and_pans |
洗锅 |
organizing_boxes |
整理箱子 |
making_tea |
泡茶 |
picking_up_trash |
捡垃圾 |
提示:BEHAVIOR-1K 共支持 1018 个活动。如需查看完整列表,可在 Python 中执行:
1from omnigibson.utils.bddl_utils import BEHAVIOR_ACTIVITIES
2print(list(BEHAVIOR_ACTIVITIES)[:20]) # 显示前20个
六、最佳实践建议
- 首次使用:推荐先运行 CUDA 修复脚本(
bash baige/run_env.sh)+ 环境验证脚本,确认环境正常后再进行后续操作 - 快速测试:使用
DummyTask+Rs_int场景进行初步验证,确认流程跑通后再切换到复杂任务 - GPU 选型:务必选择带 RT Cores 的 GPU(RTX 3070/4090/L4/L40),A100/H800/H100 不可用
- 首次启动慢:Isaac Sim 首次启动需要编译 shader(~2 分钟),后续启动约 30-80 秒,这是正常现象
- 远程调用:如果需要仿真和推理分离部署,使用内置的
behavior_env_server+ 推理客户端方案 - 单实例限制:当前仿真服务仅支持同时运行 1 个环境实例(GPU 内存限制),切换场景/任务需通过
env/create重新创建
七、常见问题(FAQ)
Q1:运行时出现 CUDA error 804: forward compatibility was attempted on non supported HW,怎么办?
这是百舸容器中 NVIDIA 库 symlink 版本不匹配导致的。运行修复脚本即可:
1bash ~/workspace/BEHAVIOR-1K/baige/run_env.sh
如果修复后仍然报错,可手动执行:
1cd /usr/lib/x86_64-linux-gnu
2DRIVER_VER=$(cat /proc/driver/nvidia/version | grep -oP 'Module\s+\K[\d.]+')
3ln -sf libcuda.so.${DRIVER_VER} libcuda.so.1
4ln -sf libnvidia-ptxjitcompiler.so.${DRIVER_VER} libnvidia-ptxjitcompiler.so.1
5ln -sf libnvidia-nvvm.so.${DRIVER_VER} libnvidia-nvvm.so.4
Q2:运行时出现 ERROR_DEVICE_LOST 或 Segmentation fault,怎么办?
最常见的原因是 GPU 不具备 RT Cores。A100、H800、H100 等纯计算卡不支持 Isaac Sim 的光追渲染。
解决方法:更换为具备 RT Cores 的 GPU 机型(RTX 3070/4090/L4/L40 等)。
Q3:运行时出现 VK_ERROR_INCOMPATIBLE_DRIVER (-9),怎么办?
这是 NVIDIA 驱动 580.x 与 Isaac Sim 4.5 不兼容导致的。
解决方法:选择提供 535.x 驱动的 GPU 机型。可通过 nvidia-smi 查看当前驱动版本。
Q4:环境启动非常慢(>3 分钟),怎么办?
首次启动需要编译 GPU shader(RtPso async compilation),耗时 2-3 分钟是正常的。后续启动会利用 shader 缓存,约 30-80 秒。
如果后续启动仍然很慢,请检查:
- GPU 驱动是否正确安装(
nvidia-smi正常显示) - 磁盘 I/O 是否正常(shader 缓存读写受磁盘速度影响)
Q5:远程调用模式下,推理客户端连不上仿真服务器?
请依次检查:
- 仿真服务是否已启动:在仿真服务器上执行
curl http://localhost:8100/health,应返回{"status":"ok"} - 两台开发机是否在同一 VPC 网络下 / 正确配置了 BLB
- BLB 是否正确配置了 8100 端口的监听
- 防火墙是否放行了 8100 端口
Q6:BEHAVIOR-1K 可以在 CPU 机器上运行吗?
不可以。与 RoboCasa(CPU + OSMesa 可运行)不同,BEHAVIOR-1K 依赖 Isaac Sim 的光追渲染,必须有带 RT Cores 的 GPU。
Q7:OMNIGIBSON_HEADLESS=True 设置后仍然报显示相关错误?
请确保在 import omnigibson 之前设置该环境变量,并且 Xvfb 已启动:
1Xvfb :99 -screen 0 1024x768x24 &
2export DISPLAY=:99
3export OMNIGIBSON_HEADLESS=True
4export OMNI_KIT_ACCEPT_EULA=Yes
或直接使用 bash baige/run_env.sh 一键配置。
评价此篇文章
