基于 NVIDIA Isaac Sim、Isaac Lab、X-Trainer 双臂机器人与 GraspGen 的多物体抓取、搬运、对准、插入与释放仿真系统。
▶ 演示视频:
https://www.bilibili.com/video/BV1Li766QEen/
本项目围绕 X-Trainer 双臂机器人复杂物体操作 搭建完整的仿真执行流程。
系统运行于 NVIDIA Isaac Sim / Isaac Lab,利用 GraspGen 根据物体几何生成候选抓取姿态,并将模型输出转换为机器人可执行的末端位姿。
在完成抓取后,系统继续执行物体抬升、搬运、几何对准、插入与释放,从而将单一的“抓住物体”扩展为一套完整的机器人操作流程。
整体链路:
加载机器人与操作场景
↓
读取目标物体几何与位姿
↓
构建点云 / 读取历史抓取结果
↓
GraspGen 生成候选抓取姿态
↓
抓取筛选与坐标系转换
↓
机械臂接近目标
↓
闭合夹爪并抓取
↓
抬升与搬运
↓
孔柱几何对准
↓
插入
↓
释放
↓
检查最终状态
项目重点关注 抓取姿态生成之后如何真正执行完整操作任务,将感知、抓取生成、机械臂控制和精细操作连接到同一任务链路中。
| 模块 | 功能 |
|---|---|
| 双臂机器人 | X-Trainer 双机械臂与夹爪仿真控制 |
| 物体几何处理 | 从 USD Mesh / Bounding Box 构建操作所需几何信息 |
| GraspGen | 生成候选抓取位姿及对应评分 |
| 抓取筛选 | 根据目标物体当前位姿筛选和重绑定抓取目标 |
| 坐标转换 | 将模型夹爪坐标系转换为机器人末端执行坐标系 |
| 抓取执行 | 接近、闭爪、抬升和稳定保持 |
| 物体搬运 | 将抓取后的物体移动至目标区域 |
| 几何对准 | 根据孔入口、目标柱与轴线关系计算对准状态 |
| 插入控制 | 支持直接插入与分阶段插入流程 |
| 释放检查 | 松开夹爪并检测释放后的保持状态 |
| 多物体编排 | 在同一仿真场景内连续处理多个目标 |
| 结果记录 | 保存抓取、插入、释放及整轮任务结果 |
项目并不是直接使用固定机械臂位姿抓取,而是首先获取目标物体几何信息,再生成候选抓取姿态。
目标物体
↓
USD Mesh / Bounding Box
↓
构建点云
↓
GraspGen
↓
候选 Grasp Transform
↓
Grasp Score
↓
候选姿态筛选
↓
机器人末端坐标转换
↓
执行抓取
同时支持读取已经保存的抓取结果,用于:
- 历史抓取姿态回放
- 不重复进行模型推理的快速验证
- 根据当前物体位姿重新绑定抓取目标
当前任务采用 X-Trainer 双臂机器人进行操作。
在同一场景中依次处理多个物体,每次由一条机械臂完成当前目标的主要操作,另一条机械臂保持指定状态。
单物体操作流程:
选择目标物体
↓
选择执行机械臂
↓
计算抓取姿态
↓
Pre-Grasp 接近
↓
到达抓取位置
↓
闭合夹爪
↓
抬升目标
↓
移动至装配区域
↓
孔柱对准
↓
插入
↓
释放物体
↓
检查最终状态
当前主流程在一次显式场景 Reset 后依次处理三个目标,并支持不同机械臂之间的任务切换。
抓取只是完整任务的一部分。
物体搬运到目标位置后,系统还需要进一步完成几何关系调整:
目标物体
↓
获取孔入口位置
↓
获取目标柱位置
↓
计算孔 / 柱轴线关系
↓
位置与姿态调整
↓
满足对准条件
↓
执行插入
项目包含:
- 孔入口位置计算
- 目标柱位置获取
- 轴线方向关系判断
- 插入前位姿调整
- 分阶段插入
- 插入深度记录
- 松爪释放
- 释放后稳定状态检查
因此系统不仅判断“是否抓到物体”,还会继续记录装配过程中的最终状态。
单场景执行器负责组织完整任务流程:
Scene Reset
↓
Object 1
├── Grasp
├── Transport
├── Align
├── Insert
└── Release
↓
Object 2
├── Grasp
├── Transport
├── Align
├── Insert
└── Release
↓
Object 3
├── Grasp
├── Transport
├── Align
├── Insert
└── Release
↓
Result Summary
系统同时负责:
- 目标物体顺序
- 左右机械臂切换
- 单物体失败状态
- 中间过程记录
- 整轮任务汇总
主要调用链:
run_best_baseline_fast_headed.sh
↓
run_best_baseline_headed.sh
↓
run_task1_graspgen_three_nuts_transport_headed.sh
↓
run_isaac_graspgen_one_scene_sequence.sh
↓
isaac_graspgen_one_scene_sequence.py
↓
isaac_graspgen_lift_hold.py
isaac_graspgen_one_scene_sequence.py
主要负责:
- 初始化仿真环境
- 场景 Reset
- 多目标任务编排
- 左右机械臂选择
- 单物体任务调用
- 执行结果汇总
isaac_graspgen_lift_hold.py
主要负责:
- 点云与几何处理
- GraspGen 输出处理
- 抓取坐标转换
- 机械臂运动控制
- 抓取与抬升
- 几何对准
- 插入
- 释放
- 状态记录
NVIDIA Isaac Sim 4.5 · Isaac Lab · USD · PhysX
X-Trainer · Dual-arm Manipulation · Gripper Control
GraspGen · Point Cloud · Grasp Pose Generation
Pose Transformation · Pick & Place · Alignment · Insertion
PyTorch · CUDA · PointNet2 · torch-scatter
Python · Bash · JSON
.
├── grasp_pose_models/
│ │
│ ├── scripts/
│ │ ├── GraspGen 抓取处理
│ │ ├── Isaac Sim 控制
│ │ └── 多物体任务执行
│ │
│ ├── configs/
│ │ └── 场景与任务配置
│ │
│ ├── external/
│ │ └── GraspGen/
│ │ └── 第三方 GraspGen 源码及资产
│ │
│ ├── models/
│ │ └── GraspGenModels/
│ │ └── 模型配置与 checkpoint 目录
│ │
│ └── outputs/
│ └── 抓取回放与历史执行结果
│
├── submission_package/
│ └── code/
│ ├── scripts/
│ └── x-trainer/
│ ├── source/leisaac/
│ └── assets/
│
├── docs/
│ ├── TECHNICAL.md
│ ├── RUNTIME.md
│ ├── KNOWN_ISSUES.md
│ ├── VERIFICATION.md
│ └── PUBLISHING.md
│
├── tools/
│ └── verify_source.py
│
├── run_best_baseline_fast_headed.sh
├── run_best_baseline_headed.sh
├── verify_static.sh
├── BASELINE_COMMAND.env
├── requirements-dev.txt
└── THIRD_PARTY_NOTICES.md
主要运行环境:
Ubuntu 22.04
NVIDIA GPU
Isaac Sim 4.5.0
Isaac Lab
Python 3.10
CUDA
PyTorch
GraspGen
Isaac Sim、Python 虚拟环境和 CUDA 环境不包含在本仓库中。
需要自行准备模型权重:
grasp_pose_models/models/GraspGenModels/checkpoints/
├── graspgen_robotiq_2f_140.yml
├── graspgen_robotiq_2f_140_gen.pth
└── graspgen_robotiq_2f_140_dis.pth
其中配置文件已保留在仓库中,模型权重需要单独准备。
详细环境要求:
python tools/verify_source.py --bash bash可进一步进行格式检查:
python -m pip install -r requirements-dev.txt
python -m black --check .read -r -p "Isaac Sim 4.5.0 安装目录: " ISAAC_SIM_ROOT
export ISAAC_SIM_ROOT检查运行依赖:
./verify_static.sh有窗口模式:
./run_best_baseline_fast_headed.sh无窗口模式:
HEADLESS_FLAG=--headless \
./run_best_baseline_fast_headed.sh基础运行入口:
./run_best_baseline_headed.sh当前快速启动入口存在部分附加参数未继续向下游传递的问题。实际运行前建议阅读 KNOWN_ISSUES.md。
每次运行的结果保存到:
grasp_pose_models/outputs/
└── isaac_graspgen_one_scene_sequence/
每轮任务都会生成独立结果目录。
整轮主要字段:
status
cases
各物体结果中主要包含:
| 字段 | 含义 |
|---|---|
grasp_likely_succeeded |
抓取是否可能成功 |
closed_loop_insertion_success |
插入是否成功 |
closed_loop_insertion_released |
是否执行释放 |
closed_loop_release_success |
释放后是否保持目标状态 |
closed_loop_final_insertion_depth |
最终插入深度 |
整体状态可能为:
ok
partial
error
判断任务是否完整成功时,应读取结果 JSON 中的任务状态与各物体详细字段,而不能只根据程序退出码判断。
发布整理阶段已经完成:
- Python 源码检查
- Bash 脚本检查
- 配置文件解析
- 代码格式检查
- 动态执行函数结构核对
- 保留资产哈希检查
- 第三方许可整理
详细结果见:
| 文档 | 内容 |
|---|---|
| TECHNICAL.md | 系统架构、数据流、坐标系和操作流程 |
| RUNTIME.md | 环境、模型权重和启动方法 |
| KNOWN_ISSUES.md | 已知代码问题和验证边界 |
| VERIFICATION.md | 当前发布版本验证记录 |
| PUBLISHING.md | 仓库整理与发布说明 |
| THIRD_PARTY_NOTICES.md | 第三方组件与许可证 |
本仓库保留:
- X-Trainer / LeIsaac 任务源码
- 双臂机器人与仿真场景资产
- GraspGen 第三方源码
- 抓取与操作控制代码
- GraspGen 模型配置
- 必要历史抓取回放数据
- 工程文档与验证工具
本仓库包含多个具有独立许可证的第三方组件,包括:
- GraspGen
- X-Trainer / LeIsaac
- XLeVR
- DynamixelSDK
详细列表:
仓库没有为全部代码重新指定统一许可证。
其中 GraspGen 随附的 NVIDIA License 包含非商业研究 / 评估用途限制,使用和再分发前应阅读其原始许可证。:chatgpt-content-reference{index="1"}