首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用Isaac Lab导入厨房场景模拟SO101手臂拿橘子

用Isaac Lab导入厨房场景模拟SO101手臂拿橘子

原创
作者头像
用户4730701
发布2025-10-21 11:26:26
发布2025-10-21 11:26:26
5250
举报

如果您已经完成前面的《用Isaac Lab玩转 LeRobot 机械手臂训练》项目,在IsaacLab里面透过键盘去模拟 SO101机械手臂6个关节的操作,那么本项目将带您进一步透过 SO101实体的leader手臂,在IsaacLab里面操控模拟器的follower手臂拿取橘子的实验(如下图),并且录制数据以及结合进行训练与推理,可以作为 Isaac 模拟环境与 SO101 手臂的一个结合演示。

Isaac Lab 结合 SO101 leader 手臂操作厨房场景的 follower模拟手臂拿橘子
Isaac Lab 结合 SO101 leader 手臂操作厨房场景的 follower模拟手臂拿橘子

本项目是复现 https://github.com/LightwheelAI/leisaac 提供的开源仓内容,这里假设您已经安装好 IsaacSim 与 IsaacLab 的对应版本,如果还没安装这两个模拟器的话,请参考《用Isaac Lab玩转 LeRobot 机械手臂训练》项目,里面有完整的操作教程,这里不重复赘述。

以下是本文操作的系统配置与环境,提供大家参考:

  • 操作系统:Ubuntu 24.04 Desktop
  • CPU/内存:12th Gen Intel® Core™ i5-12500TE × 12 w/ 64GB 内存
  • GPU/显存:NVIDIA GeForce RTX 4060 Ti w/ 16GB 显存
  • 驱动版本:570.195.03
  • CUDA版本:12.8
  • Isaac模拟器: NVIDIA Isaac Sim 5.0 (不需要 Assets )+ Isaac Lab 2.2.0
  • Python 版本:使用 conda 创建 3.11.13
  • LeRobot 手臂:SO-101

准备事项:

IsaacSim

CUDA

Python

IsaacLab

4.5.0

11.8

3.10

2.1.1

5.0.0

12.8

3.11

2.2.0

本实验采用 IsaacSim 5.0.0 的组合,用 conda 创建 python 的虚拟环境。

  • 下载 LeIsaac 项目代码并执行安装:
代码语言:bash
复制
git clone https://github.com/LightwheelAI/leisaac.git
cd leisaac
pip install -e source/leisaac
  • 下载SO-101 follower 的 USD 文件与所需要的场景文件:
代码语言:bash
复制
# 下载 so101 follower 的 usd 文件
wget https://github.com/LightwheelAI/leisaac/releases/download/v0.1.0/so101_follower.usd -O assets/robots/so101_follower.usd
# 下载 kitchen 场景文件
wget https://github.com/LightwheelAI/leisaac/releases/download/v0.1.0/kitchen_with_orange.zip
unzip kitchen_with_orange.zip -d assets/scenes/

确认场景文件在 assets 目录下的结构是否如下图:

代码语言:javascript
复制
<assets>
├── robots/
│   └── so101_follower.usd
└── scenes/
    └── kitchen_with_orange/
        ├── scene.usd
        ├── assets
        └── objects/
            ├── Orange001
            ├── Orange002
            ├── Orange003
            └── Plate

采集数据:

  • 执行 teleoperate 控制:
代码语言:bash
复制
# 确保端口可读写
sudo chmod 666 /dev/ttyACM0  $$ sudo usermod -aG dialout $USER
# 执行数据采集
python scripts/environments/teleoperation/teleop_se3_agent.py \
    --task=LeIsaac-SO101-PickOrange-v0 \
    --teleop_device=so101leader \
    --port=/dev/ttyACM0 \
    --num_envs=1 \
    --device=cuda \
    --enable_cameras \
    --record \
    --dataset_file=./datasets/dataset.hdf5

下面简单说明一下这些参数的用法,加粗的部分表示重要的参数:

  • --task指定要运行的任务环境名称这里有固定的对应名称,列如本项目必须使用"LeIsaac-SO101-PickOrange-v0"
  • --seed:指定环境的随机种子,例如 42。
  • --teleop_device:指定遥操作设备类型,例如 so101leader(单臂)、bi-so101leader(双臂)、keyboard(键盘)。
  • --port:指定遥操作设备的端口,例如 /dev/ttyACM0。这要与调试 SO101 硬件点 leader 手臂端口相对应
  • --left_arm_port:指定左臂的端口,例如 /dev/ttyACM0。仅在 teleop_device 为 bi-so101leader 时使用。
  • --right_arm_port:指定右臂的端口,例如 /dev/ttyACM1。仅在 teleop_device 为 bi-so101leader 时使用。
  • --num_envs:设置并行仿真环境的数量,遥操作时通常设为 1。
  • --device:指定计算设备,如果要在 NVIDIA GPU 上进行计算,就必须指定为 cuda
  • --enable_cameras:启用相机传感器,以便在遥操作期间采集视觉数据。
  • --record启用数据记录;将遥操作数据保存为 HDF5 文件
  • --dataset_file记录数据集的保存路径,例如 ./datasets/record_data.hdf5
  • --resume:从现有数据集文件恢复数据记录。
  • --task_type:指定任务类型。如果数据集是使用键盘记录的,应设置为keyboard,否则无需设置,保持默认值 None。
  • --quality:是否启用高质量渲染模式。

如果一切正常,应该就会看到以下画面出现:

下面提供参考的执行指令:

  • 按 'b' 就会看到模拟器的手臂与实体 SO101 leader手臂开始同步,然后就可以进行数据采集任务里。
  • 如果觉得不顺畅的话,可以按 'r' 放弃前面所录的内容并且重新来过
  • 如果觉得录制的不错,可以按 'n' 进行保存,并且重新来过(开始录下一回合),一般建议至少录制 3 回合。
  • 所有数据都会存放在 ‘--dataset_file’ 所指定的数据文件内
  • 完成录制后,可以用 Ctrl-C 组合键退出

至于后面的动态操作,请参考我们在哔哩哔哩《NVIDIA lsaacLab远程操控SO-101机械手臂实战》网课“第7分40秒”开始的内容,会更加直接。

回放数据:

在执行训练之间,如果要检查所采集的数据是否良好,可以执行以下指令查看一下:

代码语言:txt
复制
python scripts/environments/teleoperation/replay.py \
    --task=LeIsaac-SO101-PickOrange-v0 \
    --num_envs=1 \
    --device=cuda \
    --enable_cameras \
    --replay_mode=action \
    --dataset_file=./datasets/dataset.hdf5 \
    --select_episodes 1 2

注意事项:

  • 这里 ‘--dataset_file’ 的文件指向已经录制好的数据文件
  • 最后 ‘--select_episodes’ 后面的数字是想要回看的回合数

转换数据格式:

由于这是在 IsaacLab 里采集的数据,后面如果要部署到 LeRobot 环境的话,就需要先进行格式的转换。这个开源项目提供一个 isaaclab2lerobot.py 脚本来执行格式转换,位置在 leisaac/scripts/convert 下面,

代码语言:txt
复制
python scripts/convert/isaaclab2lerobot.py

不过这边有三个重点需要注意:

  • 需要有 lerobot 环境:

由于 lerobot 需要 python 3.10 环境,我们使用的 IsaacSim 5.0.0 是在 python 3.11 环境,在这里没法安装 lerobot 环境,因此需要另外开启一个 Terminal 再创建一个新的 python 3.10 虚拟环境,然后按照Lerobot Installation的步骤去安装Lerobot SO-101操作环境。

  • 需要修改代码里文件名:

在 isaaclab2lerobot.py 第264行hdf5_files = [os.path.join(hdf5_root, 'dataset.hdf5')] 的文件名需要根据录制的文件进行修改。

然后在 lerobot 环境中切换目录到 leisaac 目录下,执行上面的指令。

  • 错误修正:

数据转换后的存放位置置在 “${HF_LEROBOT_HOME}" 目录下的 "EverNorif/so101_test_orange_pick" ,如果没有设置HF_LEROBOT_HOME 变量,那就要到 " ${HOME}/.cache/huggingface/lerobot/" 目录下去寻找。

执行过程中,如果出现 “FileExistsError: [Errno 17] File exists: 'xxxxxxx/EverNorif/so101_test_orange_pick' ”错误时,就是将 so101_test_orange_pick 目录删掉或更名,然后再重新执行指令。

转换过程请参考《NVIDIA lsaacLab远程操控SO-101机械手臂实战》网课“第18分30秒”开始的内容。

在 Lerobot 查看转换数据的数据

现在可以用 lerobot 所提供的脚本,来查看这些数据的状态。请执行以下指令:

代码语言:txt
复制
python -m lerobot.scripts.visualize_dataset \
    --repo-id EverNorif/so101_test_orange_pick \
    --episode-index 0

就能看到如下图的输出结果:

结语:

本项目的线上教学视频请参考《NVIDIA lsaacLab远程操控SO-101机械手臂实战》,重点在于让大家体验 IsaacSim、IsaacLab 模拟 Lerobot SO-101 手臂的过程,至于里面所使用的厨房场景、橘子、SO101手臂等物件是比较复杂的环节,这部分需要开发人员花时间去学习 OpenUSD 相关知识,才能更进一步提升对整体应用的技术,这是下一步不能省略的过程。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备事项:
  • 采集数据:
  • 回放数据:
  • 转换数据格式:
  • 在 Lerobot 查看转换数据的数据
  • 结语:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档