メインコンテンツまでスキップ

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

reBot Arm B601-RS

License: MITPython VersionPlatformCameraYOLO

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

このページでは、異なる実装による 2 つのビジュアルグラスピングデモを紹介します:

  • ビジュアルグラスピング方式 1: 環境構築、カメラ統合、ハンドアイキャリブレーション、把持デバッグを含む YOLO + RGB-D + Python SDK パイプライン。
  • ビジュアルグラスピング方式 2: 複数のターミナルでアーム、Gemini 2 / D405 カメラ、および把持ノードを起動し、物体のピック&プレースを行う ROS2 + YOLOE ワークフロー。

reBot Arm B601-RS visual grasping demo

ビジュアルグラスピング方式 1​

1. プロジェクトの特徴​

  1. YOLO + OBB からの直接把持姿勢推定 このパイプラインでは、検出ボックスまたは OBB の最小外接矩形を直接使用し、短軸をグリッパの開閉方向として扱うことで、複雑な 3D 点群処理を回避します。
  2. GraspNet-Baseline による 6D 把持姿勢推定(オプション) このプロジェクトは、RGB-D 点群から 6D 把持姿勢を推定する GraspNet-Baseline(graspnet/graspnet-baseline)にも対応しており、YOLO のバウンディングボックスを用いて対象候補を選択し、より複雑な把持実験を行うことができます。
  3. ロボットアームおよびグリッパドライバの統合 主要な把持スクリプトは reBotArm_control_py のロボットアームおよびエンドポーズコントローラに基づいており、グリッパの開閉、力制御把持、TCP 姿勢読み取りのための軽量な把持ヘルパーを備えています。
  4. オープンソースかつ拡張可能 すべてのソースコードは公開されており、ユーザーは自身のニーズに応じて制御アルゴリズムや動作をカスタマイズできます。

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✅

配線​

  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. まずロボットアームの基本準備を完了する​

このチュートリアルを始める前に、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. conda 環境を作成・設定する​

conda env create -f environment.yml -n rebotarm
conda activate rebotarm

別の環境名を使いたい場合は、コマンド内の rebotarm を任意の名前に置き換えてください。

ステップ 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 をインストールしてください。すでに環境でカメラドライバを import できる場合は、このステップをスキップできます。

Orbbec Gemini 2

Orbbec Gemini 2 深度カメラは、Orbbec SDK v2 の Python ラッパーである pyorbbecsdk に依存します。まずはビルド済みの Python パッケージをインストールすることを推奨します:

オプション 1: pip からインストール(推奨)

pip install pyorbbecsdk2

オプション 2: GitHub から取得

sudo apt-get update
sudo apt-get install -y cmake build-essential libusb-1.0-0-dev

cd sdk
git clone https://github.com/orbbec/pyorbbecsdk.git
cd pyorbbecsdk
pip install -e .

中国本土のユーザーは次を利用できます:

git clone https://gitee.com/orbbecdeveloper/pyorbbecsdk.git

ソースからインストールする場合は、pip install -e . を実行する前に、CMake でネイティブ拡張がビルドされており、install/lib に pyorbbecsdk*.so と Orbbec の共有ライブラリが含まれていることを確認してください。

上記のすべてのインストール方法がうまくいかない場合は、以下の公式 Orbbec ドキュメントを参照してください。

インストールの確認

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

初めて使用する場合は、udev ルールをインストールすることを推奨します:

sudo bash scripts/install_udev_rules.sh
sudo udevadm control --reload-rules
sudo udevadm trigger

RealSense D435i / D405

RealSense カメラは pyrealsense2 に依存します。通常は pip で直接インストールできます:

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

システムに RealSense のフルツールチェーンや udev ルールが必要な場合は、公式の RealSense SDK ドキュメントに従って librealsense2 をインストールしてください。

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 ラッパーhttps://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main
RealSense SDKhttps://github.com/realsenseai/librealsense

ステップ 5. GraspNet を設定する(オプション)​

scripts/main.py や scripts/ordinary_grasp_pipeline.py を実行するだけなら GraspNet は不要です。GraspNet、CUDA 対応の PyTorch、PointNet2/knn の CUDA オペレータ、および学習済みチェックポイントを必要とする scripts/graspnet_camera_demo.py または scripts/grasp.py を実行したい場合のみ設定してください。

GraspNet の pointnet2 / knn 拡張には CUDA コンパイラが必要です。開始する前に、アクティブな環境から nvcc が見えることを確認し、nvcc が報告する CUDA バージョンが PyTorch のビルドに使用された CUDA バージョンと一致しているかを確認してください:

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

もし nvcc が見つからない場合、または nvcc が報告する CUDA バージョンが torch.version.cuda と一致しない場合は、現在の PyTorch の CUDA バージョンに一致する CUDA コンパイラをインストールしてください。たとえば、PyTorch が 13.0 と報告している場合:

conda install -c nvidia cuda-nvcc=13.0

代わりに、現在の nvcc バージョンに一致する PyTorch ビルドをインストールすることもできます。2 つのバージョンは一致している必要があり、一致していない場合は pointnet2 / knn のビルド時に The detected CUDA version (...) mismatches the version that was used to compile PyTorch (...) というエラーで失敗します。

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.
export CUDA_HOME=$CONDA_PREFIX
export TORCH_CUDA_ARCH_LIST="12.0"
export CPATH=$CONDA_PREFIX/lib/python3.10/site-packages/nvidia/cu13/include:$CPATH
export CPLUS_INCLUDE_PATH=$CONDA_PREFIX/lib/python3.10/site-packages/nvidia/cu13/include:$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/python3.10/site-packages/nvidia/cu13/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 から CUDA ヘッダをインストールした場合、インクルードパスは通常、上記の pip の nvidia/cu13/include パスではなく、$CONDA_PREFIX/targets/x86_64-linux/include になります。

ヒント

さらに、古い 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 を次の場所に配置します:

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

その後、config/default.yaml を確認します:

graspnet:
checkpoint: "checkpoint-rs.tar"

checkpoint フィールドは 3 つの形式をサポートします:ファイル名の場合は sdk/graspnet-baseline/checkpoints/ 配下として解決されます。相対パスの場合はプロジェクトルートからの相対パスとして解決されます。絶対パスの場合はそのまま使用されます。

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
│ └── reBotArm_control_py/ # reBot Arm SDK
└── environment.yml # Recommended conda environment file

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
python scripts/collect_handeye_eih.py

実行前に、config/default.yaml 内の次の ArUco サイズパラメータが、実際に印刷したマーカーと一致していることを確認してください:

calibration:
aruco:
marker_length_m: 0.1

自動モードでは、アームは 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. 実行とデバッグ​

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 で姿勢と到達可能な作業空間を検証することを推奨します。

メインプログラムのフロー:

  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. scripts/set.py — 把持および配置プログラム​

機能:バナナを把持して箱の中に配置します。

完了する処理フロー:

  1. カメラとアームの初期化、レディ位置への移動
  2. リアルタイムカメラプレビュー + YOLO による物体検出とインスタンスセグメンテーション
  3. G を押してフレームを固定し、ハンドアイ変換を通じてアームのターゲット姿勢を計算
  4. アームがバナナを把持して持ち上げる
  5. アームがバナナを箱に配置し、初期姿勢に戻る
  6. Q を押してシステムを終了し、アームがゼロ位置に戻る

5. GraspNet カメラ推定デモ(任意)​

python scripts/graspnet_camera_demo.py

このスクリプトは、ロボットアームに接続せずに RGB-D カメラのみで GraspNet の 6D 把持姿勢推定を実行します。ライブカメラプレビューを維持し、YOLO のバウンディングボックスでターゲット領域を選択し、ターゲットの bbox によって GraspNet のフルシーン候補のうち実行可能なものをフィルタリングします。

主な操作キー:

  • G / Space: 現在のフレームで GraspNet 推論を実行
  • R: ライブプレビューを再開
  • Q / Esc: 終了

推論後、Open3D によって点群と把持候補を可視化できます。

6. 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 候補だけをフィルタリングして把持します。

9. FAQ​

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 から 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

次を確認します:

python -c "from pointnet2 import pointnet2_utils; print('Submodule 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 をサポートしています。このワークフローでは、ハンドアイキャリブレーションにキャリブレーションボードは不要です。取り付けや 3D プリント部品の公差により、アームごとにわずかな把持オフセットが生じる場合があります。

2. 環境構築​

手順 1. ロボットアーム ROS2 ワークスペースのインストール​

まず、reBot Arm B601-RS ROS2 Integration に従って rebotarm_ros2 ワークスペースのインストールとビルドを完了します。

手順 2. カメラのインストール​

以下のカメラセットアップのいずれかを選択し、対応するセクションを展開してください。

クリックして Gemini 2 セットアップを展開

Orbbec ROS2 SDK をワークスペースにクローンし、v2-main ブランチに切り替えます:

cd ~/rebotarm_ros2/src
git clone https://github.com/xiehuangbao888/OrbbecSDK_ROS2.git
cd OrbbecSDK_ROS2
git checkout v2-main

ワークスペースをビルドします:

cd ~/rebotarm_ros2
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release

udev ルールをインストールします:

cd ~/rebotarm_ros2/src/OrbbecSDK_ROS2/orbbec_camera/scripts
sudo bash install_udev_rules.sh
sudo udevadm control --reload-rules && sudo udevadm trigger
クリックして D405 セットアップを展開
  1. RealSense SDK をクローンし、v2.58.1 に切り替えます:
cd ~
git clone https://github.com/realsenseai/librealsense.git
cd librealsense
git checkout v2.58.1
  1. udev ルールをインストールします:
sudo apt install -y v4l-utils
cd ~/librealsense
./scripts/setup_udev_rules.sh
  1. SDK をビルドしてインストールします:
ヒント

プロキシが有効になっている場合は、再度設定を行う前に無効にしてください:

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY
cd ~/librealsense
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
sudo ldconfig
  1. RealSense ROS2 パッケージをビルドします:
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. ビジュアル把持パッケージのインポート​

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

これでビジュアル把持環境の準備が整いました。新しいターミナルを開くたびに、ビジュアル把持コマンドを実行する前に次を source してください:

source /opt/ros/humble/setup.bash
source ~/rebotarm_ros2/install/setup.bash

3. プロジェクトの実行​

開始前に、アームの電源が入っていること、CAN インターフェースが can0 であること、Gemini 2 または D405 が 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 では起動コマンドが異なるため、自分のカメラに対応するものを選択してください。ワンクリックで起動したい場合は、独自の起動スクリプトを作成できます。

ターミナル 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

ターミナル 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

ターミナル C — 観測姿勢への移動 + YOLO 検出​

まず conda activate yolo で conda 環境を有効化します。環境名が yolo でない場合は、実際の conda 環境名に置き換えてください。

クリックして Gemini 2 を展開

Python パスを、作成した YOLO 環境のものに変更します。

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:=0 \
-p grasp_z_offset_m:=0.02 \
-p place_z_offset_m:=0.1 \
-p grasp_x_offset_m:=-0.04 \
-p move_to_observation_on_start:=true \
-p auto_publish_on_detect:=true
D405 を展開するにはクリック

Python パスを、作成した YOLO 環境に変更します。

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_x_offset_m:=-0.04
-p move_to_observation_on_start:=true
-p auto_publish_on_detect:=true
パラメータ説明
yolo_device:=gpuGPU を使用します。ディスクリート GPU がない場合は cpu を設定します。GPU 0 を使用するには yolo_device:=0 も使用できます
target_class把持対象物体の YOLOE テキストクラス名。実際の物体に合わせて変更します。デフォルトの YOLO クラスをサポートします
place_class配置対象の YOLOE テキストクラス名。実際の物体に合わせて変更します。デフォルトの YOLO クラスをサポートします
grasp_x_offset_mbase_link における前後オフセット。負の値は姿勢を後方に引きます
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 {}

お問い合わせ​

参考資料​

Loading Comments...