Skip to content

About

GraspGen-based dual-arm manipulation with X-Trainer and Isaac Sim, covering grasping, transport, alignment, insertion and release.

Resources

Stars

31 stars

Watchers

3 watching

Forks

Repository files navigation

🤖 X-Trainer GraspGen Manipulation

基于 NVIDIA Isaac Sim、Isaac Lab、X-Trainer 双臂机器人与 GraspGen 的多物体抓取、搬运、对准、插入与释放仿真系统。

🎬 项目演示

Bilibili

▶ 演示视频:
https://www.bilibili.com/video/BV1Li766QEen/


📖 项目简介

本项目围绕 X-Trainer 双臂机器人复杂物体操作 搭建完整的仿真执行流程。

系统运行于 NVIDIA Isaac Sim / Isaac Lab,利用 GraspGen 根据物体几何生成候选抓取姿态,并将模型输出转换为机器人可执行的末端位姿。

在完成抓取后,系统继续执行物体抬升、搬运、几何对准、插入与释放,从而将单一的“抓住物体”扩展为一套完整的机器人操作流程。

整体链路:

加载机器人与操作场景
        ↓
读取目标物体几何与位姿
        ↓
构建点云 / 读取历史抓取结果
        ↓
GraspGen 生成候选抓取姿态
        ↓
抓取筛选与坐标系转换
        ↓
机械臂接近目标
        ↓
闭合夹爪并抓取
        ↓
抬升与搬运
        ↓
孔柱几何对准
        ↓
插入
        ↓
释放
        ↓
检查最终状态

项目重点关注 抓取姿态生成之后如何真正执行完整操作任务,将感知、抓取生成、机械臂控制和精细操作连接到同一任务链路中。


✨ 核心功能

模块 功能
双臂机器人 X-Trainer 双机械臂与夹爪仿真控制
物体几何处理 从 USD Mesh / Bounding Box 构建操作所需几何信息
GraspGen 生成候选抓取位姿及对应评分
抓取筛选 根据目标物体当前位姿筛选和重绑定抓取目标
坐标转换 将模型夹爪坐标系转换为机器人末端执行坐标系
抓取执行 接近、闭爪、抬升和稳定保持
物体搬运 将抓取后的物体移动至目标区域
几何对准 根据孔入口、目标柱与轴线关系计算对准状态
插入控制 支持直接插入与分阶段插入流程
释放检查 松开夹爪并检测释放后的保持状态
多物体编排 在同一仿真场景内连续处理多个目标
结果记录 保存抓取、插入、释放及整轮任务结果

🧠 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

AI / GPU

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

🚀 快速开始

1. 环境准备

主要运行环境:

Ubuntu 22.04
NVIDIA GPU
Isaac Sim 4.5.0
Isaac Lab
Python 3.10
CUDA
PyTorch
GraspGen

Isaac Sim、Python 虚拟环境和 CUDA 环境不包含在本仓库中。


2. 准备 GraspGen 模型

需要自行准备模型权重:

grasp_pose_models/models/GraspGenModels/checkpoints/
├── graspgen_robotiq_2f_140.yml
├── graspgen_robotiq_2f_140_gen.pth
└── graspgen_robotiq_2f_140_dis.pth

其中配置文件已保留在仓库中,模型权重需要单独准备。

详细环境要求:

docs/RUNTIME.md


3. 源码检查

python tools/verify_source.py --bash bash

可进一步进行格式检查:

python -m pip install -r requirements-dev.txt
python -m black --check .

4. 配置 Isaac Sim

read -r -p "Isaac Sim 4.5.0 安装目录: " ISAAC_SIM_ROOT
export ISAAC_SIM_ROOT

检查运行依赖:

./verify_static.sh

5. 启动仿真

有窗口模式:

./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

详细列表:

THIRD_PARTY_NOTICES.md

仓库没有为全部代码重新指定统一许可证。

其中 GraspGen 随附的 NVIDIA License 包含非商业研究 / 评估用途限制,使用和再分发前应阅读其原始许可证。:chatgpt-content-reference{index="1"}

About

GraspGen-based dual-arm manipulation with X-Trainer and Isaac Sim, covering grasping, transport, alignment, insertion and release.

Resources

Stars

31 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages