Skip to main content

reBot Arm B601-RS 视觉夹取 Demo

reBot Arm B601-RS

License: MITPython VersionPlatformCameraYOLO

深度感知 · 目标检测 · 手眼标定 · 自主抓取 · 全开源

reBot Arm B601-RS 视觉夹取 Demo

两种抓取方式有什么区别?​

本页包含两种不同逻辑的视觉夹取 Demo。先了解开发框架、标定方式与启动流程的区别,再选择下方标签查看对应教程。

方式 01

Python SDK + YOLO / OBB

基于 YOLO、RGB-D 深度相机和 Python SDK,完成从环境安装、相机接入、手眼标定到抓取调试的完整流程。

抓取逻辑
利用检测框或 OBB 最小外接矩形估计抓取姿态;可选 GraspNet 6D 姿态估计。
手眼标定
首次完整抓取前,使用 ArUco 标记完成 Eye-in-Hand 手眼标定。
启动方式
运行 Python 脚本,逐步验证检测、姿态估计与机械臂抓取。
方式 02

ROS 2 + YOLOE

基于 ROS 2 与 YOLOE,通过多终端启动机械臂、Gemini 2 / D405 / D435i 相机和抓取节点,完成抓取与放置。

抓取逻辑
由视觉抓取节点完成目标检测、抓取与放置,通过文本类名指定抓取和放置目标。
手眼标定
不需要标定板;安装和打印件公差造成的微小误差可通过偏移参数调整。
启动方式
在多个终端分别启动机械臂、相机、抓取节点,再触发抓取放置。

选择抓取方式​

点击标签切换教程,按照所选方式完成安装与运行。

一、视觉抓取方式1​

这条路线使用 Python SDK + RGB-D 相机 + YOLO / OBB 完成抓取,不需要 ROS 2 工作空间。默认路线适合普通桌面物体;如需更复杂的 6D 抓取,可按需启用后面的 GraspNet 进阶模块。

1. 项目特点​

  1. YOLO + OBB 直接估计抓取姿态 直接利用检测框或 OBB 最小外接矩形,使用短轴作为夹爪开合方向,避免复杂 3D 点云处理。
  2. GraspNet-Baseline 6D 夹取姿态估计(可选) 支持基于 GraspNet-Baseline(graspnet/graspnet-baseline)对 RGB-D 点云进行 6D 夹取姿态估计,并结合 YOLO 检测框筛选目标候选,用于更复杂物体的夹取调试。
  3. 机械臂与夹爪驱动封装 主抓取脚本基于 reBotArm_control_py 的机械臂与末端控制器,并通过轻量抓取辅助完成夹爪开合、力控夹取与 TCP 位姿读取。
  4. 开源 & 可扩展 所有代码开源,支持用户根据需求自定义控制算法和效果。

2. 规格参数​

本教程硬件由 矽递科技 Seeed Studio 提供

参数规格
机械臂型号reBot Arm B601-RS
自由度6-DOF + 夹爪
相机型号Orbbec Gemini 2 / D435i / D405
检测方式YOLO + OBB 最小外接矩形
通信方式CAN Bus via USB2CAN 适配器;USB 3.0 相机连接
工作电压48V DC
控制主机Ubuntu 22.04+ PC
推荐 Python 版本Python 3.10

3. 材料清单(BOM)​

部件数量是否包含
reBot Arm B601-RS 机械臂1✅
夹爪1✅
USB2CAN 串口桥1✅
电源适配器(48V)1✅
USB-C / 通信线缆1✅
RGB-D 深度相机1✅
摄像头连接件 / 安装支架1✅

接线说明​

  1. 将深度相机通过 USB 3.0 连接到主机。
  2. 将 USB2CAN 适配器连接到机械臂 CAN 总线。
  3. 确认 48V 电源、相机和机械臂全部连接可靠。
  4. 如遇权限问题,可执行:
sudo chmod a+rw /dev/bus/usb/*/*
sudo chmod 666 /dev/ttyUSB0

4. 环境要求​

项目要求
操作系统Ubuntu 22.04+
Python3.10

5. 安装基础环境​

按以下顺序完成基础安装。步骤 0–3 是默认路线必做内容;步骤 4 按实际相机选择。GraspNet 的安装与运行单独放在后面的进阶模块中。

0

步骤 0. 先完成机械臂基础准备​

开始本教程前,请先完成 reBot Arm B601-RS 快速入门 中的内容,包括机械臂组装、零点初始化、电机 ID 配置与基础连通性确认。

1

步骤 1. 克隆仓库​

优先使用 Seeed-Projects 官方仓库:

git clone https://github.com/Seeed-Projects/reBot-DevArm-Grasp.git rebot_grasp
cd rebot_grasp
2

步骤 2. 创建并配置 conda 环境​

conda env create -f environment.yml -n rebotarm
conda activate rebotarm
预期结果

终端提示符前出现 rebotarm,表示当前已激活该环境,后续依赖将安装到该环境中。

如果你想使用其他环境名,可以将命令中的 rebotarm 替换为自定义名称。

立即验证 PyTorch

environment.yml 通过 ultralytics / torchaudio 的依赖自动安装 PyTorch。如果安装时网络中断,PyTorch 可能静默缺失,要等到运行 main.py 时才报错。创建环境后请立刻验证:

python -c "import torch; print(torch.__version__, torch.__file__)"
  • 路径应显示为 .../miniforge3/envs/rebotarm/...(conda 环境内)。如果报 ModuleNotFoundError、或路径在 ~/.local/...(用户目录)中,说明安装不完整/错位,请执行:
pip install --force-reinstall torch torchvision
  • 有 NVIDIA 显卡时,再确认 CUDA 可用:
python -c "import torch; print(torch.cuda.is_available())"
3

步骤 3. 安装机械臂 SDK​

git clone https://github.com/Seeed-Projects/reBotArm_control_py.git sdk/reBotArm_control_py
cd sdk/reBotArm_control_py
pip install -e .
cd ../..

如果 pip install -e . 报 Multiple top-level packages discovered in a flat-layout,请在 reBotArm_control_py 的 pyproject.toml 中加入显式包发现配置,然后重新执行 pip install -e .:

[tool.setuptools.packages.find]
include = ["reBotArm_control_py*"]

B601 的 DM 与 RS 两种机械臂配置通过 SDK 仓库中的配置文件切换。B601-RS 请在 sdk/reBotArm_control_py/config/rebotarm.yaml 中确认:

hardware_yaml: rebotarm_rs.yaml

视觉抓取程序会读取该 SDK 配置,并自动选择对应的机械臂控制模式与夹爪参数。

4

步骤 4. 安装深度相机 SDK​

本项目支持 Orbbec Gemini 2 与 RealSense D435i / D405 等 RGB-D 深度相机。请根据实际使用的相机安装对应 SDK;如果当前环境已经能正常导入相机驱动,可跳过本步骤。

Orbbec Gemini 2

Orbbec Gemini 2 深度相机依赖 pyorbbecsdk(Orbbec SDK v2 的 Python 版本)。优先推荐直接安装预编译 Python 包:

在 Linux / Ubuntu 上,无论选择哪种安装方式,首次使用相机时都建议配置 udev 规则,让普通用户能够访问 USB 设备。规则安装在系统目录,每台机器只需配置一次;如果已经配置过,可跳过对应命令。

pip install pyorbbecsdk2

配置 udev 规则(Linux / Ubuntu)

pyorbbecsdk2 2.1.0 及以上版本提供环境配置脚本。保持当前 conda 环境激活,运行包内脚本;脚本会请求 sudo 权限,并自动安装、重新加载 udev 规则:

orbbec_sdk_dir="$(python -c 'import os, pyorbbecsdk; print(os.path.dirname(pyorbbecsdk.__file__))')"
python "$orbbec_sdk_dir/shared/setup_env.py"

如果提示找不到 shared/setup_env.py,请先运行 pip install --upgrade "pyorbbecsdk2>=2.1.0",再重新执行上述命令。详情见 Orbbec 官方安装文档。

注意,如果上述安装过程中均发生错误导致安装失败,请参考下方 Orbbec 官方文档进行安装操作。

验证安装

python -c "import pyorbbecsdk; print('pyorbbecsdk OK')"

RealSense D435i / D405

RealSense 相机依赖 pyrealsense2。通常可以直接通过 pip 安装:

pip install pyrealsense2
python -c "import pyrealsense2; print('pyrealsense2 OK')"

如果系统需要完整的 RealSense 工具链或 udev 规则,请参考 librealsense 官方文档。

必须使用 USB 3.x 接口

D405 / D435i 必须插在 USB 3.0/3.2 口(通常为蓝色)。如果插在 USB 2.0 口,典型症状是:设备能被系统识别、pipeline.start() 也能成功,但永远收不到帧(报 Frame didn't arrive within ...)。用下面命令确认相机 negotiated 的速率:

lsusb -t   # 相机一行应显示 5000M;若显示 480M 说明落在了 USB 2.0 口,请换口
预期结果

对应验证命令输出 pyorbbecsdk OK 或 pyrealsense2 OK,且没有 ModuleNotFoundError。

SDK 资料汇总

资料链接
Gemini 2 产品页https://www.orbbec.com.cn/index/Product/info.html?cate=38&id=51
开发资料总链接https://www.orbbec.com.cn/index/Download2025/info.html?cate=121&id=1
Orbbec SDK v2https://github.com/orbbec/OrbbecSDK_v2
SDK v2 API 文档https://orbbec.github.io/docs/OrbbecSDKv2_API_User_Guide/
pyorbbecsdkhttps://github.com/orbbec/pyorbbecsdk
pyorbbecsdk 文档https://orbbec.github.io/pyorbbecsdk/index.html
ROS2 Wrapperhttps://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main
RealSense SDKhttps://github.com/realsenseai/librealsense

6. 目录结构​

rebot_grasp/
├── config/
│ ├── default.yaml # 主配置文件
│ └── calibration/
│ └── <camera_type>/
│ ├── intrinsics.npz # 相机内参
│ └── hand_eye.npz # 手眼标定结果
├── drivers/
│ ├── camera/
│ │ ├── base.py # 相机抽象基类
│ │ ├── orbbec_gemini2.py # Gemini 2 驱动
│ │ └── realsense.py # RealSense 驱动(备用)
│ └── robot/
│ └── grasp_driver.py # 基于机械臂 SDK 的轻量抓取辅助
├── calibration/
│ ├── aruco_pose.py # ArUco 位姿估计
│ └── hand_eye.py # 手眼标定求解
├── utils/
│ ├── ordinary_grasp.py # OBB 抓取姿态估计与可视化
│ └── transforms.py # 坐标变换工具
├── scripts/
│ ├── main.py # 主抓取程序
│ ├── set.py # 抓取与放置程序
│ ├── ordinary_grasp_pipeline.py
│ ├── object_detection.py
│ └── collect_handeye_eih.py
├── sdk/
│ ├── pyorbbecsdk/ # Orbbec SDK Python 封装(源码安装时)
│ └── reBotArm_control_py/ # reBot Arm SDK
└── environment.yml # 推荐的 conda 环境文件

7. 手眼标定​

第一次运行完整抓取前,先完成 Eye-in-Hand 手眼标定。

运行标定程序前,请先启动并确认 CAN 接口:

sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
ip -details link show can0

开始前,请先在 config/default.yaml 中确认以下 ArUco 尺寸参数与你实际打印的标记一致:

calibration:
aruco:
marker_length_m: 0.1

确认配置后运行自动标定:

python scripts/collect_handeye_eih.py

自动模式下,机械臂会自动遍历 50 个预设姿态,检测到ArUco稳定后自动采样。即使中途按 c 或 q 中断,脚本也会尝试基于当前已有样本计算标定结果。

如果你希望手动推动机械臂采集,可以使用手动模式:

python scripts/collect_handeye_eih.py --manual

手动模式下,机械臂会进入重力补偿状态。你可以将末端推到合适视角后按 Enter 采集,按 c 或 q 结束并计算结果。

tip

如果您在校准之后发现机械臂的抓取精度无法满足需求,可以设置config/default.yaml参数 calibration.hand_eye_compensation_m中的 X(前后)、Y(左右)、Z(高低) 参数给予位置补偿。

标定结果保存到:

config/calibration/<camera_type>/hand_eye.npz

样本数建议最少 5 个样本且建议不少于 15 个样本。

8. 运行与调试​

建议按以下顺序验证:前两个场景不连接机械臂,先检查相机、目标检测与抓取估计;后两个场景会连接并控制机械臂。

1

1. 仅验证目标检测​

python scripts/object_detection.py

若需调整检测模型或类别,可在 config/default.yaml 中修改:

yolo:
model_name: "yoloe-26l-seg.pt"
device: "cpu"
use_world: true
custom_classes:
- "yellow banana"
- "water bottle"
- "cup"

用于确认:

  • 相机可以正常打开
  • YOLO 模型加载正常
  • YOLO 目标检测功能正常
2

2. 仅验证抓取估计​

python scripts/ordinary_grasp_pipeline.py

若需要调整抓取估计频率或预抓取回退距离,可修改:

grasp_pipeline:
infer_every_live: 3
grasp:
depth_quantile: 0.5
pregrasp_offset_m: 0.080
insertion_depth_m: 0.015
min_base_z_m: 0.00

这个脚本不会连接机械臂,只用于验证:

  • OBB 或最小外接矩形是否合理
  • 抓取点是否位于目标中央区域
  • 短轴方向是否符合夹爪开合方向预期

按键说明:

  • 鼠标左键:点测深度
  • G:打印当前最佳抓取姿态
  • Q / Esc:退出
3

3. 执行主抓取程序​

python scripts/main.py

如果想先验证目标位姿并跳过抓取动作:

python scripts/main.py --dry-run

建议先通过 --dry-run 验证位姿和工作空间,再执行真实抓取。当前脚本在此模式下仍会初始化机械臂、移动到预备位,并在退出时执行清理与回零;仅验证视觉时,请使用前两个不连接机械臂的脚本。

主程序执行流程:

  1. 初始化 RGB-D 相机,确认图像流可用
  2. 机械臂与夹爪使能
  3. 移动到预备位,如果需要调整机械臂启动后的预备位置,请在 config/default.yaml 中修改:
robot:
ready_pose:
x: 0.3
y: 0.0
z: 0.3
roll: 0.0
pitch: 0.7
duration: 3.0
  1. 实时检测桌面目标
  2. 基于短轴估计抓取姿态
  3. 按 G 采当前帧并执行抓取

运行时按键:

  • G:抓取当前最佳目标
  • R:恢复实时预览
  • Q / Esc:退出程序
4

4. scripts/set.py — 抓取与放置程序​

功能效果:将香蕉抓取并放置到盒子里面

python scripts/set.py

完成流程:

  1. 相机与机械臂初始化,移动到预备点位
  2. 实时相机预览 + YOLO 目标检测与实例分割
  3. 按 G 冻结帧,经手眼变换计算机械臂目标位姿
  4. 机械臂移动抓取香蕉并抬高
  5. 机械臂将香蕉放置在盒子内,并回归初始姿态
  6. 按 Q 退出系统,机械臂回归零点

9. GraspNet 进阶模块(可选)​

默认的 Python SDK / OBB 路线不需要 GraspNet。只有需要基于 RGB-D 点云估计 6D 夹取姿态时,才按下面步骤安装依赖并运行对应 Demo。

1

步骤 1. 安装 GraspNet 与 CUDA 算子​

如果只运行 scripts/main.py 或 scripts/ordinary_grasp_pipeline.py,不需要配置 GraspNet。只有在运行 scripts/graspnet_camera_demo.py 或 scripts/grasp.py 时,才需要准备 GraspNet、CUDA 版 PyTorch、PointNet2/knn CUDA 算子和预训练权重。

GraspNet 的 pointnet2 / knn 扩展需要 CUDA 编译器。开始前先确认当前环境可以找到 nvcc,并检查 nvcc 的 CUDA 版本是否和 PyTorch 编译时使用的 CUDA 版本一致:

nvcc --version
python -c "import torch; print(torch.__version__, torch.version.cuda)"

第一次配置本环境时,environment.yml 中的 torchaudio 通常已经把 PyTorch 一起装好了;如果没有装好(或装成了 CPU 版),请按下面步骤显式安装并验证 CUDA 版 PyTorch。GraspNet 的 pointnet2 / knn 扩展依赖 PyTorch 和与之版本一致的 CUDA 编译器,全部完成后再开始编译。

第 1 步:确认显卡

nvidia-smi

能列出 NVIDIA 显卡再继续;没有 NVIDIA 显卡只能使用 CPU 版 PyTorch,无法编译和运行 GraspNet 的 CUDA 算子。

第 2 步:检查 / 安装 PyTorch

先检查当前环境中是否已有 PyTorch:

python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
  • 已安装且 torch.cuda.is_available() 输出 True:跳过安装,直接到第 3 步。
  • 报 ModuleNotFoundError(未安装),或 torch.version.cuda 为 None(装成了 CPU 版):按下面的命令安装 CUDA 版。以 CUDA 13.0 为例:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130

--index-url 中的 CUDA 版本按显卡选择:

显卡推荐的 PyTorch CUDA 构建
RTX 50 系(Blackwell,如 RTX 5070 / 5090)cu128 或更新(如 cu130)
RTX 40 / 30 系(Ada / Ampere)cu121 或 cu118
无 NVIDIA 显卡cpu(仅 CPU,不能跑 GraspNet)

第 3 步:安装与 PyTorch 匹配的 CUDA 编译器

pointnet2 / knn 是本地 CUDA 扩展,编译时 nvcc --version 显示的 CUDA 版本必须与 torch.version.cuda 一致,否则会报 The detected CUDA version (...) mismatches the version that was used to compile PyTorch (...)。先查看两个版本:

nvcc --version
python -c "import torch; print(torch.version.cuda)"

以 torch.version.cuda 显示 13.0 为例,在 conda 环境中安装匹配的编译器:

conda install -c nvidia cuda-nvcc=13.0 cuda-cudart-dev=13.0

which nvcc # 应指向 $CONDA_PREFIX/bin/nvcc,而不是 /usr/bin/nvcc
nvcc --version # 应与 torch.version.cuda 一致

cuda-nvcc 提供编译器,cuda-cudart-dev 提供 targets/x86_64-linux/include 下的 CUDA 头文件,两者都需要。conda 环境激活后 $CONDA_PREFIX/bin 位于 PATH 最前,会自动遮蔽系统自带的旧版 nvcc(例如 Ubuntu 仓库安装的 CUDA 11.5),无需卸载系统 CUDA。

warning

不建议用降级 PyTorch 的方式去迁就系统旧 nvcc:旧 CUDA 不一定支持你的显卡算力(CUDA 11.5 最高只支持 sm_86;RTX 40 系需要 CUDA 11.8+,RTX 50 系需要 CUDA 12.8+),且旧版 PyTorch 与本项目其他依赖(如新版 ultralytics)可能不兼容。

第 4 步:验证

python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
nvcc --version

两者 CUDA 版本一致、且 torch.cuda.is_available() 输出 True,即完成 PyTorch 配置,可以继续编译 CUDA 算子。

cd sdk
git clone https://github.com/graspnet/graspnet-baseline.git
cd graspnet-baseline

# 按你的 CUDA 版本安装 PyTorch 后,再安装 GraspNet 运行依赖
pip install open3d tensorboard Pillow tqdm

# 编译本地算子前配置 CUDA 编译路径。
# 注意:头文件/库路径请用 conda cuda-toolkit 的 targets 目录,
# 不要混用 pip 版 nvidia/cu13 目录(版本与 conda nvcc 不一致会导致编译报错)。
export CUDA_HOME=$CONDA_PREFIX
export TORCH_CUDA_ARCH_LIST="12.0"
export CPATH=$CONDA_PREFIX/targets/x86_64-linux/include:$CPATH
export CPLUS_INCLUDE_PATH=$CONDA_PREFIX/targets/x86_64-linux/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=$CONDA_PREFIX/targets/x86_64-linux/lib:$CONDA_PREFIX/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$CONDA_PREFIX/targets/x86_64-linux/lib:$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

# 编译 CUDA 算子
cd pointnet2
pip install . --no-build-isolation
cd ../knn
pip install . --no-build-isolation
cd ..

# 安装 GraspNet API
git clone https://github.com/graspnet/graspnetAPI.git
cd graspnetAPI
sed -i "s/'sklearn'/'scikit-learn'/" setup.py
pip install .
cd ../../..
tip

注:如果直接参考graspnet-baseline官方仓库文档使用 python setup.py install 可能报 CUDA / PyTorch 相关错误,建议使用 pip install . --no-build-isolation,让扩展在当前 conda 环境中复用已安装的 PyTorch 与 CUDA 配置进行编译。

tip

如果编译时报 fatal error: cusparse.h: No such file or directory,先运行 find $CONDA_PREFIX -name cusparse.h,并把包含 cusparse.h 的目录加入 CPATH / CPLUS_INCLUDE_PATH(conda cuda-toolkit 下通常是 $CONDA_PREFIX/targets/x86_64-linux/include)。如果报 '__NV_IS_DEVICE' was not declared in this scope 等头文件相关的编译错误,通常是 pip 版 nvidia/cu13 头文件与 conda nvcc 版本不一致导致的,请改用上面的 conda targets 路径后重新编译。

tip

此外,GraspNet API 的依赖中可能仍使用 sklearn 包名。上面的 sed 命令会将 sklearn 替换为 scikit-learn,避免安装时出现包名提示。除非同步调整 GraspNet API 的依赖栈,否则建议保留其 numpy==1.23.4 约束,因为 transforms3d==0.3.1 仍使用 np.float 等 NumPy 别名。

配置预训练模型

在graspnet-baseline 官方仓库下载 GraspNet 官方预训练权重Google、Baidu,将 下载好的checkpoint-rs.tar 放到:

mkdir -p ~/rebot_grasp/sdk/graspnet-baseline/checkpoints

sdk/graspnet-baseline/checkpoints/checkpoint-rs.tar

然后在 config/default.yaml 中确认:

graspnet:
checkpoint: "checkpoint-rs.tar"

checkpoint 支持三种写法:仅文件名会自动从 sdk/graspnet-baseline/checkpoints/ 查找;相对路径会按项目根目录解析;绝对路径会直接使用。

2

步骤 2. 运行 GraspNet 相机估计 Demo​

python scripts/graspnet_camera_demo.py

该脚本不连接机械臂,仅使用 RGB-D 相机运行 GraspNet 6D 夹取姿态估计。脚本会保留实时相机预览,并使用 YOLO 检测框选择目标区域,再从 GraspNet 全场景候选中筛选目标 bbox 内的可行夹取。

按键说明:

  • G / Space:对当前帧运行 GraspNet 推理
  • R:恢复实时预览
  • Q / Esc:退出

推理后可通过 Open3D 查看点云与夹取候选。

3

步骤 3. 运行 GraspNet 机械臂抓取程序​

python scripts/grasp.py
python scripts/grasp.py --dry-run
python scripts/grasp.py --target-class "light blue coffee cup"

该脚本基于 GraspNet 估计结果接入机械臂执行流程:YOLO 选择目标,GraspNet 输出 6D 夹取姿态,经手眼标定转换到机械臂基坐标系,再检查 IK 可达性并执行预夹取、夹取、退回动作。

运行 python scripts/grasp.py 将运行完整 GraspNet 机械臂抓取流程,会实际控制机械臂运动。--dry-run 打印目标位姿和候选筛选结果,并跳过抓取动作;当前脚本仍会初始化机械臂、移动到预备位,并在退出时执行清理与回零。--target-class "light blue coffee cup" 可以指定 YOLO 目标类别,只对该类别对应目标进行 GraspNet 候选筛选与抓取。

10. 常见问题​

1. ModuleNotFoundError: No module named 'motorbridge'

表示当前 Python 环境还没有安装机械臂 SDK 依赖。请确认:

conda activate rebotarm
conda env update -n rebotarm -f environment.yml
cd sdk/reBotArm_control_py && pip install -e .

2. 按 G 后不执行抓取

常见原因:

  • hand_eye.npz 不存在
  • 手眼标定模式不是 eye_in_hand
  • 当前目标位姿 IK 不可达

建议先运行:

python scripts/main.py --dry-run

3. 抓取点深度不稳定

可以适当调整:

  • grasp_pipeline.grasp.depth_quantile
  • 相机与目标的安装高度
  • 目标表面的反光情况

4. GraspNet 报 pointnet2_utils 无法从 pointnet2 导入

这通常是 sdk/graspnet-baseline/pointnet2 本地 CUDA 扩展没有在当前 conda 环境中正确编译安装,或 Python 路径解析到了错误的 pointnet2 包。建议确认已激活项目环境,并在同一个环境中重新编译安装 pointnet2 与 knn:

conda activate rebotarm
cd sdk/graspnet-baseline/pointnet2
pip install . --no-build-isolation

cd ../knn
pip install . --no-build-isolation

验证(pointnet2_utils / knn_modules 是以顶层模块方式从源码目录导入的,这也是 models/ 里的导入方式;运行抓取脚本时会自动把源码目录加入 sys.path):

cd sdk/graspnet-baseline
python -c "import sys; sys.path[:0]=['pointnet2','knn']; import pointnet2_utils, knn_modules; print('import works')"

5. 针对新显卡运行 GraspNet 时出现 CUDA 架构不兼容

如果出现 no kernel image is available for execution on the device 或 PyTorch 提示当前 GPU 的 CUDA capability 不受支持,通常说明当前 PyTorch wheel 不包含该显卡架构对应的 CUDA kernel。建议安装支持当前 CUDA/显卡架构的 PyTorch 版本,然后重新编译 GraspNet 的本地 CUDA 扩展。

python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.get_device_name(0))"

cd sdk/graspnet-baseline/pointnet2
pip install . --no-build-isolation

cd ../knn
pip install . --no-build-isolation

如需手动指定编译架构,可在重新编译前设置 TORCH_CUDA_ARCH_LIST,具体取值请按当前显卡架构和 PyTorch/CUDA 版本确认。

6. GraspNet 推理时报 RuntimeError: CPU not supported

pointnet2 中的采样算子只支持 CUDA tensor。请确认 CUDA 可用、GraspNet 网络和输入点云都在 GPU 上,并且 pointnet2 / knn 是在当前环境和当前 PyTorch 版本下编译的。

python -c "import torch; print(torch.cuda.is_available())"

如果输出为 False,需要先修复 CUDA / PyTorch 安装;如果输出为 True 但仍报错,建议重新编译 pointnet2 和 knn。

联系方式​

参考文档​

Loading Comments...