reBot Arm B601-RS ビジュアルグラスピングデモ

奥行き認識 · 物体検出 · ハンドアイキャリブレーション · 自律把持 · 完全オープンソース

2 つの把持方式はどう違う?
このページでは、実装の異なる 2 種類のビジュアルグラスピングデモを扱います。フレームワーク、キャリブレーション要件、起動フローを比較し、下からチュートリアルを選択してください。
Python SDK + YOLO / OBB
YOLO、RGB-D 深度カメラ、および Python SDK を使用して、環境構築とカメラ統合からハンドアイキャリブレーション、把持デバッグまでの一連のワークフローを実行します。
- 把持ロジック
- 検出ボックスまたは OBB の最小外接矩形から把持姿勢を推定し、短軸をグリッパの開閉方向として利用することで、複雑な 3D 点群処理を回避します。必要に応じて GraspNet による 6D 姿勢推定も利用できます。
- ハンドアイキャリブレーション
- 最初のフル把持実行前に、ArUco マーカーを用いた Eye-in-Hand キャリブレーションを完了させます。
- 起動方法
- Python スクリプトを実行して、検出、姿勢推定、ロボット把持を順番に検証します。
ROS 2 + YOLOE
ROS 2 と YOLOE を使用し、アーム、Gemini 2 / D405 / D435i カメラ、および把持ノードを別々のターミナルで起動してピッキングとプレースを行います。
- 把持ロジック
- ビジュアルグラスピングノードが物体の検出・把持・配置を行います。テキストのクラス名で把持対象と配置先を指定します。
- ハンドアイキャリブレーション
- キャリブレーションボードは不要で、マウント誤差や 3D プリント部品の公差によるわずかなずれを補正するためにオフセットパラメータを調整します。
- 起動方法
- アーム、カメラ、把持ノードを別々のターミナルで起動し、その後ピッキングとプレースをトリガーします。
把持方式を選ぶ
タブを切り替えて、選択した方式のチュートリアルを表示し、そのインストール手順と実行手順に従ってください。
- Method 1 · Python SDK / OBB
- 方法 2 · ROS 2 / YOLOE
ビジュアルグラスピング方式 1
このルートでは、ROS 2 ワークスペースを使わずに Python SDK + RGB-D カメラ + YOLO / OBB を使用します。デフォルトルートは一般的な卓上物体に適しており、より複雑な 6D 把持が必要な場合は、下記のオプションの GraspNet モジュールを有効にしてください。
1. プロジェクトの特長
- YOLO + OBB からの直接把持姿勢推定 このパイプラインでは、検出ボックスまたは OBB の最小外接矩形を直接利用し、短軸をグリッパの開閉方向として扱うことで、複雑な 3D 点群処理を回避します。
- GraspNet-Baseline による 6D 把持姿勢推定(オプション)
本プロジェクトは、RGB-D 点群からの 6D 把持姿勢推定のために GraspNet-Baseline(
graspnet/graspnet-baseline)にも対応しており、YOLO のバウンディングボックスを用いてターゲット候補を選択し、より複雑な把持実験を行うことができます。 - ロボットアームおよびグリッパドライバの統合
主要な把持スクリプトは、
reBotArm_control_pyのロボットアームおよびエンドポーズコントローラをベースとしており、グリッパの開閉、力制御把持、TCP 姿勢読み取りのための軽量な把持ヘルパーを備えています。 - オープンソースかつ拡張可能 すべてのソースコードは公開されており、ユーザーは自身のニーズに応じて制御アルゴリズムや動作をカスタマイズできます。
2. 仕様
このチュートリアルで使用するハードウェアは Seeed Studio によって提供されています。
| パラメータ | 仕様 |
|---|---|
| ロボットアームモデル | reBot Arm B601-RS |
| 自由度 | 6-DOF + グリッパ |
| カメラモデル | Orbbec Gemini 2 / RealSense D435i / D405 |
| 検出方式 | YOLO + OBB 最小外接矩形 |
| 通信方式 | USB2CAN アダプタ経由の CAN バス;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 | ✅ |
配線
- 深度カメラを USB 3.0 でホストに接続します。
- USB2CAN アダプタをアームの CAN バスに接続します。
- 48V 電源、カメラ、ロボットアームがすべて確実に接続されていることを確認します。
- パーミッションの問題が発生した場合は、次を実行します:
sudo chmod a+rw /dev/bus/usb/*/*
sudo chmod 666 /dev/ttyUSB0
4. 環境要件
| 項目 | 要件 |
|---|---|
| オペレーティングシステム | Ubuntu 22.04+ |
| Python | 3.10 |
5. 基本環境をインストールする
以下の手順を順番に実行してください。ステップ 0〜3 はデフォルトルートに必須で、ステップ 4 ではお使いのハードウェアに合わせてカメラ SDK を選択します。GraspNet のインストールと実行手順は、下の上級モジュールで別途説明します。
ステップ 0. 先にロボットアームの基本準備を完了する
このチュートリアルを始める前に、reBot Arm B601-RS クイックスタート の内容(ロボットアームの組み立て、ゼロ点初期化、モーター ID 設定、基本的な接続確認)を完了してください。
ステップ 1. リポジトリをクローンする
公式の Seeed-Projects リポジトリを推奨します:
git clone https://github.com/Seeed-Projects/reBot-DevArm-Grasp.git rebot_grasp
cd rebot_grasp
ステップ 2. 環境を作成し、ハードウェアに合った PyTorch を選択する
次の 3 フェーズを順番に完了します:ベース環境の作成、ハードウェアに合った PyTorch のインストール、プロジェクト依存関係のインストール。
ベース環境を作成する
conda env create -f environment.yml -n rebotarm
conda activate rebotarm
ターミナルプロンプトに rebotarm と表示され、環境がアクティブになっていることが分かります。PyTorch はまだインストールされていないので、続けて次の 2 フェーズを実行してください。
別の環境名を使いたい場合は、上記 2 つのコマンド内の rebotarm を置き換えてください。既存の環境を使う場合は、その環境を有効化してから conda env update -n rebotarm -f environment.yml を実行し、ベース依存関係を更新します。このコマンドは既存の pip パッケージを削除しません。
ハードウェアに合った PyTorch をインストールする
どちらのタブも互換性のある同じパッケージバージョンを使用し、異なるのはダウンロードインデックスだけです。現在のバージョンファイルでは、このチュートリアルで使用する Python 3.10、Ubuntu x86_64 環境向けに、PyTorch 2.9.1、torchvision 0.24.1、torchaudio 2.9.1 を指定しています。
- CPU (no NVIDIA GPU)
- NVIDIA GPU (CUDA)
Intel / AMD の統合グラフィックスを搭載したコンピュータ、またはまず CPU 上で基本ワークフローを検証したい場合にこのオプションを使用します。
python -m pip install -r requirements-pytorch.txt --index-url https://download.pytorch.org/whl/cpu
python -c "import torch; print(torch.__version__, torch.__file__); print('CUDA available:', torch.cuda.is_available())"
PyTorch のパスがアクティブな Conda 環境内を指していることを確認します。CUDA available: False と表示されるのが正しい挙動です。
config/default.yaml を次の設定のままにしておきます:
yolo:
device: "cpu"
基本的な YOLO / OBB ワークフローは CPU 上で実行できます。推論速度はモデルと使用しているコンピュータに依存します。このプロジェクトの GraspNet CUDA オペレータには NVIDIA GPU が必要なため、以下の GraspNet 上級モジュールはスキップしてください。
CUDA 対応 PyTorch をインストールする前に、ドライバが GPU を認識していることを確認します。以下の例では CUDA 12.8 ビルドを使用しており、GPU アーキテクチャとドライバの両方がこのバージョンをサポートしている必要があります:
nvidia-smi
python -m pip install -r requirements-pytorch.txt --index-url https://download.pytorch.org/whl/cu128
python -c "import torch; print(torch.__version__, torch.__file__); print('CUDA build:', torch.version.cuda); print('CUDA available:', torch.cuda.is_available())"
nvidia-smi に GPU が表示され、PyTorch のパスがアクティブな Conda 環境内を指し、CUDA available: True が出力されます。これを確認したら、config/default.yaml で GPU 0 を選択します:
yolo:
device: "0"
CUDA が利用できない場合は、ドライバ、GPU アーキテクチャ、選択したホイールを確認するか、CPU タブに従って基本ワークフローを検証してください。
If CUDA is unavailable, check your driver, GPU architecture, and selected wheel, or follow the CPU tab to verify the basic workflow.
プロジェクト依存関係のインストールと検証
いずれかのハードウェアオプションを完了したら、プロジェクトルートで次を実行します:
python -m pip install -r requirements.txt -c requirements-pytorch.txt
python -m pip check
python -c "import torch, torchvision, torchaudio, cv2; from ultralytics import YOLO; from calibration.aruco_pose import ArUcoDetector; ArUcoDetector(); print('Vision dependencies OK:', cv2.__version__)"
pip check が No broken requirements found. と表示し、検証コマンドがインポートエラーなしで Vision dependencies OK と出力されます。ロボットアームおよびカメラ SDK をインストールする前に、これらのチェックを完了してください。
-c requirements-pytorch.txt は互換性のある PyTorch パッケージバージョンを制約します。この引数は必ず保持し、--upgrade を追加しないでください。pip が失敗した場合は、最後に表示されたエラー内容を確認し、該当するフェーズを再試行してください。Conda 環境をアクティブにしていても、すべての依存関係が正常にインストールされているとは限りません。
requirements.txt に指定された標準の OpenCV パッケージのみをインストールしてください。本プロジェクトの ArUco API はバージョン 4.7 で利用可能であり、それと並行して追加の OpenCV ホイールをインストールしないでください。CLIP は Ultralytics の Git リポジトリからインストールされるため、システム上で Git が利用可能である必要があります。YOLOE を初めて読み込む際には、モデルの重みがダウンロードされる場合があります。
ステップ 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. 深度カメラ SDK をインストールする
このプロジェクトは Orbbec Gemini 2 や RealSense D435i / D405 などの RGB-D 深度カメラをサポートします。使用しているカメラに対応する SDK をインストールしてください。すでに環境からカメラドライバをインポートできる場合は、このステップをスキップできます。
- Orbbec Gemini 2
- RealSense D435i / D405
Orbbec Gemini 2 深度カメラは Orbbec SDK v2 の Python ラッパーである pyorbbecsdk に依存します。まずは事前ビルド済みの Python パッケージをインストールすることを推奨します。
Linux / Ubuntu では、どのインストール方法を選ぶ場合でも、初めてカメラを使用する前に udev ルールを設定してください。これらのルールにより一般ユーザーが USB デバイスへアクセスできるようになり、システム全体にインストールされるため、各マシンで一度だけ設定すれば十分です。すでにルールが設定されている場合は、対応するコマンドをスキップしてください。
- オプション 1: pip からインストール(推奨)
- オプション 2: GitHub から取得
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 インストールガイド を参照してください。
rebotarm 環境をアクティブに保ったままにします。ビルド依存関係をインストールし、その後 Python 拡張をコンパイルします:
sudo apt-get update
sudo apt-get install -y cmake build-essential libusb-1.0-0-dev python3-dev
cd sdk
git clone https://github.com/orbbec/pyorbbecsdk.git
cd pyorbbecsdk
git checkout v2-main
python -m pip install pybind11
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
-Dpybind11_DIR="$(python -m pybind11 --cmakedir)"
cmake --build . --parallel "$(nproc)"
cmake --install .
cd ..
中国本土のユーザーは、上記の GitHub クローンコマンドを次のものに置き換えることができます:
git clone https://gitee.com/orbbecdeveloper/pyorbbecsdk.git
ビルド後、install/lib に pyorbbecsdk*.so と Orbbec 共有ライブラリ(新しいバージョンでは install/lib/pyorbbecsdk/ 配下)が含まれていることを確認してから、Python パッケージをインストールします。CMake と conda の設定については、公式 Orbbec ソースビルドガイド を参照してください。
pip install -e .
udev ルールを設定する(Linux / Ubuntu)
クローンした pyorbbecsdk リポジトリのルートから次を実行します。新しいバージョンでは環境セットアップスクリプトを使用し、古いバージョンでは install_udev_rules.sh を使用します:
if [ -f scripts/env_setup/setup_env.py ]; then
python scripts/env_setup/setup_env.py
else
sudo bash scripts/install_udev_rules.sh
sudo udevadm control --reload-rules
sudo udevadm trigger
fi
検証および実行ステップを続ける前に、プロジェクトルートに戻ってください:
cd ../..
両方のインストール方法が失敗する場合は、以下の公式 Orbbec ドキュメントを参照してください。
インストールの検証
python -c "import pyorbbecsdk; print('pyorbbecsdk OK')"
RealSense カメラは pyrealsense2 に依存します。通常は pip で直接インストールできます:
pip install pyrealsense2
python -c "import pyrealsense2; print('pyrealsense2 OK')"
システムに RealSense のフルツールチェーンや udev ルールが必要な場合は、公式 librealsense ドキュメント に従ってください。
D405 / D435i は USB 3.0/3.2 ポート(通常は青色)に接続する必要があります。USB 2.0 ポートに接続した場合の典型的な症状は、システムはデバイスを認識し pipeline.start() も成功するが、フレームが一切届かない(Frame didn't arrive within ...)というものです。次のコマンドでネゴシエートされた速度を確認してください:
lsusb -t # the camera line should show 5000M; 480M means it fell back to a USB 2.0 port — switch ports
対応する検証コマンドが 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 v2 | https://github.com/orbbec/OrbbecSDK_v2 |
| SDK v2 API ドキュメント | https://orbbec.github.io/docs/OrbbecSDKv2_API_User_Guide/ |
| pyorbbecsdk | https://github.com/orbbec/pyorbbecsdk |
| pyorbbecsdk ドキュメント | https://orbbec.github.io/pyorbbecsdk/index.html |
| ROS2 ラッパー | https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main |
| RealSense SDK | https://github.com/realsenseai/librealsense |
6. ディレクトリ構造
rebot_grasp/
├── config/
│ ├── default.yaml # Main configuration file
│ └── calibration/
│ └── <camera_type>/
│ ├── intrinsics.npz # Camera intrinsics
│ └── hand_eye.npz # Hand-eye calibration results
├── drivers/
│ ├── camera/
│ │ ├── base.py # Camera abstract base class
│ │ ├── orbbec_gemini2.py # Gemini 2 driver
│ │ └── realsense.py # RealSense driver (alternative)
│ └── robot/
│ └── grasp_driver.py # Lightweight grasp helper based on arm SDK
├── calibration/
│ ├── aruco_pose.py # ArUco pose estimation
│ └── hand_eye.py # Hand-eye calibration solver
├── utils/
│ ├── ordinary_grasp.py # OBB grasp pose estimation and visualization
│ └── transforms.py # Coordinate transformation utilities
├── scripts/
│ ├── main.py # Main grasping program
│ ├── set.py # Grasp and place program
│ ├── ordinary_grasp_pipeline.py
│ ├── object_detection.py
│ └── collect_handeye_eih.py
├── sdk/
│ ├── pyorbbecsdk/ # Orbbec SDK Python wrapper (source installation)
│ └── reBotArm_control_py/ # reBot Arm SDK
├── requirements-pytorch.txt # Compatible versions installed from the CPU / CUDA index
├── requirements.txt # Project dependencies installed after PyTorch
└── environment.yml # Base Conda environment
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 を押して終了および結果の計算を行います。
キャリブレーション後にロボットアームの把持精度が要件を満たさない場合は、config/default.yaml の calibration.hand_eye_compensation_m 配下にある X(前後)、Y(左右)、Z(上下)パラメータを設定して、位置補正を行うことができます。
キャリブレーション結果は次の場所に保存されます:
config/calibration/<camera_type>/hand_eye.npz
推奨サンプル数は少なくとも 5 個で、15 個以上を推奨します。
8. 実行とデバッグ
次の順序でシナリオを確認します。最初の 2 つはロボットアームに接続せず、カメラ、検出、および把持推定を確認するのに役立ちます。次の 2 つはロボットアームに接続して制御します。
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. 把持推定のみを検証する
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. メインの把持プログラムを実行する
python scripts/main.py
把持動作をスキップしつつターゲット姿勢を検証するには:
python scripts/main.py --dry-run
実際の把持を行う前に、--dry-run で姿勢とワークスペースを検証してください。このモードでは、現在のスクリプトはアームを初期化し、レディ姿勢へ移動し、終了時にクリーンアップと原点復帰を行います。ビジョンのみの検証には、アームに接続しない最初の 2 つのスクリプトを使用してください。
メインプログラムのフロー:
- RGB-D カメラを初期化し、画像ストリームが利用可能であることを確認する。
- ロボットアームとグリッパを有効化する。
- レディ姿勢へ移動する。起動時のレディ姿勢を変更したい場合は、
config/default.yamlを編集します:
robot:
ready_pose:
x: 0.3
y: 0.0
z: 0.3
roll: 0.0
pitch: 0.7
duration: 3.0
- テーブルトップ上のターゲットをリアルタイムに検出する。
- 短軸から把持姿勢を推定する。
Gを押して現在のフレームをキャプチャし、把持を実行する。
実行時のキー操作:
G: 現在の最良ターゲットを把持R: ライブプレビューを再開Q/Esc: 終了
4. scripts/set.py — 把持および配置プログラム
機能:バナナを把持して箱の中に配置します。
python scripts/set.py
完了までのフロー:
- カメラとアームの初期化、レディ位置への移動
- リアルタイムカメラプレビュー + YOLO 物体検出およびインスタンスセグメンテーション
Gを押してフレームを固定し、ハンドアイ変換を通じてアームのターゲット姿勢を計算- アームがバナナを把持して持ち上げる
- アームがバナナを箱に配置し、初期姿勢に戻る
Qを押してシステムを終了すると、アームはゼロ位置に戻る
9. GraspNet 上級モジュール(オプション)
デフォルトの Python SDK / OBB ルートでは GraspNet は不要です。RGB-D 点群から 6D 把持姿勢推定が必要な場合にのみ、以下の手順に従ってください。
ステップ 1. GraspNet と CUDA オペレータをインストールする
scripts/main.py や scripts/ordinary_grasp_pipeline.py では GraspNet は不要です。GraspNet が必要な scripts/graspnet_camera_demo.py や scripts/grasp.py を実行したい場合にのみ設定してください。これらは GraspNet、CUDA 対応 PyTorch、PointNet2/knn CUDA オペレータ、および事前学習済みチェックポイントを必要とします。
GraspNet の pointnet2 / knn 拡張には CUDA コンパイラが必要です。開始する前に、現在の環境で nvcc が利用可能であることを確認し、その CUDA バージョンを PyTorch のビルドに使用されたバージョンと比較してください:
nvcc --version
python -c "import torch; print(torch.__version__, torch.version.cuda)"
PyTorch は基本インストールのステップ 2 で別途インストールされています。GraspNet には NVIDIA GPU と動作する CUDA サポートが必要です。CPU オプションに従った場合は、このセクションをスキップしてください。コンパイラを設定する前に、以下の確認を完了してください。
ステップ 1: GPU を確認する
nvidia-smi
ドライバが NVIDIA GPU を認識している必要があります。CUDA Toolkit をインストールするだけでは、Intel / AMD の統合グラフィックスで本プロジェクトの CUDA オペレータを実行することはできません。
ステップ 2: PyTorch の CUDA サポートを確認する
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
torch.cuda.is_available() が True を出力したら、次のステップに進みます。PyTorch が存在しない場合、torch.version.cuda が None の場合、または CUDA が利用できない場合は、基本インストールのステップ 2 に戻り、NVIDIA のインストールと検証を完了してください。CPU ビルドと CUDA ビルドを切り替える際は、再インストール前に古いビルドを削除してください。
ステップ 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 が 12.8 と表示されている場合、対応するコンパイラを conda 環境内にインストールします:
conda install -c nvidia cuda-nvcc=12.8 cuda-cudart-dev=12.8
which nvcc # should point to $CONDA_PREFIX/bin/nvcc, not /usr/bin/nvcc
nvcc --version # should match torch.version.cuda
cuda-nvcc はコンパイラを提供し、cuda-cudart-dev は targets/x86_64-linux/include 配下に CUDA ヘッダを提供します。どちらも必須です。conda 環境がアクティブになると、$CONDA_PREFIX/bin がシステムパスより優先されるため、conda の nvcc が自動的に古いシステム側(たとえば Ubuntu リポジトリの CUDA 11.5)を隠蔽します — システム CUDA をアンインストールする必要はありません。
古いシステムの nvcc に合わせるために PyTorch をダウングレードしないでください。古い CUDA リリースは GPU アーキテクチャをサポートしていない可能性があります(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
# Install PyTorch for your CUDA version first, then install GraspNet runtime dependencies
pip install open3d tensorboard Pillow tqdm
# Configure CUDA build paths before building the local operators.
# Note: use the conda cuda-toolkit targets directory for headers/libraries;
# do not mix in the pip nvidia/cu13 directory (a version mismatch with conda nvcc causes build errors).
export CUDA_HOME=$CONDA_PREFIX
export TORCH_CUDA_ARCH_LIST="$(python -c 'import torch; major, minor = torch.cuda.get_device_capability(); print(f"{major}.{minor}")')"
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
# Build CUDA operators
cd pointnet2
pip install . --no-build-isolation
cd ../knn
pip install . --no-build-isolation
cd ..
# Install GraspNet API
git clone https://github.com/graspnet/graspnetAPI.git
cd graspnetAPI
sed -i "s/'sklearn'/'scikit-learn'/" setup.py
pip install .
cd ../../..
注意:公式の graspnet-baseline リポジトリのドキュメントに従って python setup.py install を使用すると、CUDA / PyTorch 関連のエラーが発生する場合があります。アクティブな conda 環境にすでにインストールされている PyTorch と CUDA の構成に対して拡張モジュールをビルドするために、pip install . --no-build-isolation を使用することを推奨します。
ビルド時に 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 パスに切り替えてから再ビルドしてください。
さらに、古い GraspNet API 依存パッケージは、非推奨となった sklearn パッケージ名をまだ使用している場合があります。sed コマンドは、インストール中に The 'sklearn' PyPI package is deprecated が発生するのを避けるために、現在推奨されている scikit-learn パッケージ名に置き換えます。古い GraspNet API 依存パッケージも同時にアップグレードしない限り、transforms3d==0.3.1 が np.float のような古い NumPy エイリアスをまだ使用しているため、その numpy==1.23.4 制約は維持してください。
学習済みモデルの設定
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 フィールドは 3 つの形式をサポートします:ファイル名の場合は sdk/graspnet-baseline/checkpoints/ 配下として解決されます;相対パスの場合はプロジェクトルートからのパスとして解決されます;絶対パスの場合はそのまま使用されます。
ステップ 2. GraspNet カメラ推定デモを実行する
python scripts/graspnet_camera_demo.py
このスクリプトは、ロボットアームを接続せずに RGB-D カメラのみで GraspNet の 6D 把持姿勢推定を実行します。ライブカメラプレビューを維持し、YOLO のバウンディングボックスを使用して対象領域を選択し、対象の bbox によって GraspNet のフルシーン候補のうち実行可能なものをフィルタリングします。
主な操作:
G/Space: 現在のフレームに対して GraspNet 推論を実行R: ライブプレビューを再開Q/Esc: 終了
推論後、Open3D によって点群と把持候補を可視化できます。
ステップ 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. FAQ
1. ModuleNotFoundError: No module named 'motorbridge'
これは、現在の Python 環境にロボットアーム SDK の依存関係がインストールされていないことを意味します。conda env update は base 環境のみを更新します;プロジェクトの依存関係は別途インストールしてください。プロジェクトルートから次を実行します:
conda activate rebotarm
conda env update -n rebotarm -f environment.yml
# Complete the PyTorch installation in basic installation Step 2 first.
python -m pip install -r requirements.txt -c requirements-pytorch.txt
cd sdk/reBotArm_control_py && python -m 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 から pointnet2_utils をインポートできないと報告する
これは通常、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 実行時に新しい GPU で CUDA アーキテクチャ互換性の問題が発生する
no kernel image is available for execution on the device が表示されたり、PyTorch が現在の GPU CUDA ケイパビリティがサポートされていないと報告する場合、インストールされている PyTorch ホイールにはその GPU アーキテクチャ向けの CUDA カーネルが含まれていない可能性があります。現在の CUDA/GPU アーキテクチャをサポートする 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 を設定してください。GPU アーキテクチャと PyTorch/CUDA バージョンに応じて値を選択します。
6. GraspNet 推論で RuntimeError: CPU not supported が報告される
pointnet2 のサンプリングオペレータは CUDA テンソルのみをサポートします。CUDA が利用可能であること、GraspNet ネットワークと入力点群が GPU 上にあること、そして pointnet2 / knn がアクティブな環境の PyTorch バージョンに対してビルドされていることを確認してください。
python -c "import torch; print(torch.cuda.is_available())"
出力が False の場合は、まず CUDA / PyTorch のインストールを修正してください。True だがエラーが残る場合は、pointnet2 と knn を再ビルドしてください。
ビジュアル把持 方法 2
1. プロジェクト概要
このソリューションでは、reBot Arm B601-RS 上で ROS2 と YOLO を使用して物体検出、把持、配置を行います。システムは、アーム、深度カメラ、把持ノードを別々のターミナルで起動します。
深度カメラは現在、Orbbec Gemini 2 と RealSense D405 / D435i をサポートしています。このワークフローでは、ハンドアイキャリブレーション用のキャリブレーションボードは不要です。取り付けや 3D プリント部品の公差により、各アームにはわずかな把持オフセットが生じる場合があります。
2. 環境構築
ステップ 1. ロボットアーム ROS2 ワークスペースをインストールする
まず、reBot Arm B601-RS ROS2 Integration に従って rebotarm_ros2 ワークスペースのインストールとビルドを完了します。
ステップ 2. カメラをインストールする
以下のカメラセットアップのいずれかを選択し、対応するセクションを展開してください。 Orbbec ROS2 SDK をワークスペースにクローンし、 ワークスペースをビルドします: udev ルールをインストールします: プロキシが有効になっている場合は、再度設定する前に無効にしてください:クリックして Gemini 2 セットアップを展開
v2-main ブランチに切り替えます:cd ~/rebotarm_ros2/src
git clone https://github.com/xiehuangbao888/OrbbecSDK_ROS2.git
cd OrbbecSDK_ROS2
git checkout v2-maincd ~/rebotarm_ros2
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Releasecd ~/rebotarm_ros2/src/OrbbecSDK_ROS2/orbbec_camera/scripts
sudo bash install_udev_rules.sh
sudo udevadm control --reload-rules && sudo udevadm triggerクリックして D405 / D435i セットアップ手順を展開
v2.58.1 に切り替えます:cd ~
git clone https://github.com/realsenseai/librealsense.git
cd librealsense
git checkout v2.58.1
sudo apt install -y v4l-utils
cd ~/librealsense
./scripts/setup_udev_rules.sh
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXYcd ~/librealsense
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
sudo ldconfig
cd ~/rebotarm_ros2/src
git clone https://github.com/xiehuangbao888/realsense-ros.git
cd ~/rebotarm_ros2
colcon build --cmake-args -DUSE_LIFECYCLE_NODE=OFF
ステップ 3. Visual grasping パッケージをインポートする
cd ~/rebotarm_ros2/src/
git clone https://github.com/xiehuangbao888/rebot_visual_grasp.git
cd ~/rebotarm_ros2
colcon build --symlink-install
ステップ 4. YOLO / YOLOE 環境をインストールする
grasp_yolo は Python から Ultralytics YOLOE を呼び出します。専用の conda 環境を使用し、システムの /usr/bin/python3 は使用しないでください。
環境を作成する
conda create -n yolo python=3.10
conda activate yolo
pip install -U ultralytics
pip install "numpy==1.26.4" transforms3d
# YOLOE open-vocabulary classes require the Ultralytics CLIP package, not the PyPI clip package
pip install git+https://github.com/ultralytics/CLIP.git
NVIDIA GPU を搭載している場合は、まず CUDA が利用可能か確認します。出力が False の場合は、対応する CUDA / PyTorch ビルドをインストールしてください。CPU だけで続行することもできますが、検出フレームレートは低下します:
python -c "import torch; print(torch.cuda.is_available())"
YOLOE を検証します:
python -c "from ultralytics import YOLOE; print('YOLOE OK')"
~/rebot_visual_model にウェイトをダウンロードする
mkdir -p ~/rebot_visual_model && cd ~/rebot_visual_model
# MobileCLIP (required by YOLOE set_classes, about 242MB)
wget -c https://github.com/ultralytics/assets/releases/download/v8.4.0/mobileclip2_b.ts
# YOLOE segmentation weights can also download on first run; placing them here is recommended
wget -c https://github.com/ultralytics/assets/releases/download/v8.4.0/yoloe-26s-seg.pt
ステップ 5. ワークスペースをビルドする
cd ~/rebotarm_ros2
source /opt/ros/humble/setup.bash
colcon build --symlink-install
source ~/rebotarm_ros2/install/setup.bash
これで visual grasping 環境の準備が整いました。新しいターミナルを開くたびに、visual grasping コマンドを実行する前に次を source してください:
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
3. プロジェクトを実行する
開始する前に、アームの電源が入っていること、CAN インターフェースが can0 であること、Gemini 2、D405、または D435i が USB 接続されていることを確認してください。その後、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
スタックを別々のターミナルで起動すると、把持ロジックを追いやすくなります。Gemini 2、D405、D435i では起動コマンドが異なるため、自分のカメラに合ったものを選択してください。ワンクリック起動にしたい場合は、独自の起動スクリプトを作成できます。
ターミナル A — アーム + RViz を起動する
クリックして展開:Gemini 2
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 launch rebot_visual_grasp bringup_with_camera.launch.py model:=rs channel:=can0 use_rviz:=true
クリックして展開:D405
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 launch rebot_visual_grasp bringup_with_d405.launch.py model:=rs channel:=can0 use_rviz:=true
クリックして展開:D435i
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 launch rebot_visual_grasp bringup_with_d435i.launch.py model:=rs channel:=can0 use_rviz:=true
ターミナル B — カメラを起動する
クリックして展開:Gemini 2
source /opt/ros/humble/setup.bash
ros2 launch orbbec_camera gemini2.launch.py
クリックして展開:D405
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 launch realsense2_camera rs_launch.py \
align_depth.enable:=true \
depth_module.depth_profile:=640x360x30 \
depth_module.color_profile:=640x360x30
クリックして展開:D435i
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 launch realsense2_camera rs_launch.py \
align_depth.enable:=true \
depth_module.depth_profile:=640x360x30 \
depth_module.color_profile:=640x360x30
ターミナル C — 観測姿勢への移動 + YOLO 検出
まず 作成した YOLO 環境の Python パスに変更します。 作成した YOLO 環境の Python パスに変更します。 作成した YOLO 環境の Python パスに変更します。conda activate yolo で conda 環境を有効化します。環境名が yolo でない場合は、実際の conda 環境名に置き換えてください。クリックして展開:Gemini 2
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
~/miniconda3/envs/yolov8/bin/python -m rebot_visual_grasp.grasp_yolo --ros-args \
-p yolo_model:=~/rebot_visual_model/yoloe-26s-seg.pt \
-p target_class:="cube" \
-p place_class:="box" \
-p yolo_device:=gpu \
-p grasp_z_offset_m:=0.01 \
-p place_z_offset_m:=0.1 \
-p grasp_x_offset_m:=-0.02 \
-p grasp_y_offset_m:=0.002 \
-p move_to_observation_on_start:=true \
-p auto_publish_on_detect:=trueクリックして展開:D405
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
~/miniconda3/envs/yolov8/bin/python -m rebot_visual_grasp.grasp_yolo --ros-args \
-p yolo_model:=/home/ubuntu/rebot_visual_model/yoloe-26s-seg.pt \
-p color_topic:=/camera/camera/color/image_raw \
-p depth_topic:=/camera/camera/aligned_depth_to_color/image_raw \
-p color_info_topic:=/camera/camera/color/camera_info \
-p optical_frame:=camera_color_optical_frame \
-p target_class:=cube \
-p place_class:=box \
-p yolo_device:=gpu \
-p grasp_z_offset_m:=0.01 \
-p grasp_y_offset_m:=-0.005 \
-p place_z_offset_m:=0.1 \
-p grasp_x_offset_m:=-0.01 \
-p move_to_observation_on_start:=true \
-p auto_publish_on_detect:=trueクリックして展開:D435i
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
~/miniconda3/envs/yolov8/bin/python -m rebot_visual_grasp.grasp_yolo --ros-args \
-p yolo_model:=~/rebot_visual_model/yoloe-26s-seg.pt \
-p color_topic:=/camera/camera/color/image_raw \
-p depth_topic:=/camera/camera/aligned_depth_to_color/image_raw \
-p color_info_topic:=/camera/camera/color/camera_info \
-p optical_frame:=camera_color_optical_frame \
-p target_class:="cube" \
-p place_class:="box" \
-p yolo_device:=gpu \
-p grasp_z_offset_m:=0.01 \
-p place_z_offset_m:=0.1 \
-p grasp_y_offset_m:=0.01 \
-p grasp_x_offset_m:=-0.04 \
-p move_to_observation_on_start:=true \
-p auto_publish_on_detect:=true
| パラメータ | 説明 |
|---|---|
yolo_device:=gpu | GPU を使用します。離散 GPU がない場合は cpu を設定してください。GPU 0 を使用するには yolo_device:=0 も使用できます |
target_class | 把持対象物体の YOLOE テキストクラス名。実際の物体に合わせて変更します。デフォルトの YOLO クラスをサポートします |
place_class | 置き場所ターゲットの YOLOE テキストクラス名。実際の物体に合わせて変更します。デフォルトの YOLO クラスをサポートします |
grasp_x_offset_m | base_link における前後オフセット。負の値は姿勢を後方に引き寄せます |
grasp_y_offset_m | 左右の把持オフセット。0.01 は左に 1 cm シフトします。負の値は右にシフトします |
grasp_z_offset_m | 把持高さの微調整。デフォルトは標準グリッパーより長いフレキシブルグリッパー用です |
place_z_offset_m | 物体を配置する際に使用される追加の持ち上げ量で、配置ポイントの上方どの高さで物体を離すかを制御します |
ターミナル D — ワンクリックで把持して配置する
デフォルトのトリガー遅延は 3 秒です。
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 launch rebot_visual_grasp grasp_go.launch.py
遅延時間を変更するには、パラメータを追加します。例えば、5 秒後にトリガーする場合:
ros2 launch rebot_visual_grasp grasp_go.launch.py trigger_delay_s:=5.0
ターミナル E — ホームに戻る(オプション)
新しい rebotarm ビルドでは、ターミナルで Ctrl + C を押すとアームが自動的にホームに戻ります。手動でホームに戻すには:
source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash
ros2 service call /rebotarm/safe_home std_srvs/srv/Trigger {}
お問い合わせ
- 技術サポート: Submit an Issue
- プロジェクトページ: GitHub
- フォーラム: Seeed Studio Forum