grasp_bunny は、bunny.stl に対するロボット把持候補を生成し、MySQL に保存して、3D ビューアで確認するための実験用リポジトリです。
大まかな処理の流れは次の通りです。
- bunny メッシュを MySQL に登録する
- bunny の安定姿勢を生成する
- 安定姿勢、XY 平行移動、yaw 回転を組み合わせて配置候補を生成する
- OnRobot 2FG7 グリッパで antipodal grasp 候補を生成する
- Kawasaki RS007L ロボットで各「配置候補 x 把持候補」に対して IK を解く
- IK に成功した候補を
oneのビューアで確認する
ロボット、把持、IK、可視化などの機能は外部ライブラリ wanweiwei07/one を使っています。このリポジトリは、その上に載せる SQL スキーマと実験スクリプトをまとめたものです。
- Python 3.12 以上
- MySQL server
- Git
- ビューアを使う場合は OpenGL が動く環境
Python パッケージ:
oneとその依存関係:numpy,scipy,pyglet,mujocomysql-connector-python
このリポジトリは one を Git submodule として使います。clone するときは submodule も一緒に取得してください。
git clone --recurse-submodules https://github.com/Clacks5/grasp_bunny.git
cd grasp_bunnysubmodule なしで clone した場合は、後から初期化できます。
git submodule update --init --recursiveone の参照先は次のリポジトリです。
https://github.com/wanweiwei07/one.git
仮想環境を作成します。
python -m venv .venv仮想環境の有効化だけ OS によって異なります。
# Windows / PowerShell
.\.venv\Scripts\Activate.ps1# Ubuntu / bash
source .venv/bin/activateone と MySQL connector をインストールします。
pip install -e ./one
pip install mysql-connector-python
pip install matplotlibPython スクリプトは、MySQL の接続情報を環境変数から読みます。データベース名やユーザー名を変更していなければ、最低限パスワードだけをスクリプト実行前に同じターミナルで設定してください。
# Windows / PowerShell
$env:GRASP_BUNNY_DB_PASSWORD = "your_password"# Ubuntu / bash
export GRASP_BUNNY_DB_PASSWORD="your_password"この設定は、そのターミナルを開いている間だけ有効です。
未設定の場合は、次の値が使われます。
host = localhost
user = root
password = 空文字
database = grasp_bunny
基本的には MySQL Workbench を使って SQL ファイルを実行します。
Workbench で MySQL サーバーに接続し、次の SQL ファイルを番号順に開いて実行してください。
sql/00_create_db.sql
sql/01_create_table.sql
sql/02_insert_bunny_2_object.sql
sql/03_insert_bunny_arrangement.sql
Workbench では、各ファイルを開いて雷アイコン、または Ctrl + Shift + Enter でスクリプト全体を実行できます。
コマンドラインで実行する場合は、次のように実行します。
mysql -u root -p < sql\00_create_db.sql
mysql -u root -p < sql\01_create_table.sql
mysql -u root -p < sql\02_insert_bunny_2_object.sql
mysql -u root -p < sql\03_insert_bunny_arrangement.sqlこれにより、grasp_bunny データベース、必要なテーブル、bunny オブジェクト、配置パラメータが作成されます。
bunny メッシュは次の場所にあります。
one/bunny.stl
SQL 側でも、同じパスが object.mesh_path に登録されます。
以下のスクリプトは、リポジトリのルートディレクトリから実行してください。生成中は進捗ログが表示されます。
安定姿勢を生成します。
python scripts/generate_stable_pose.py配置候補を生成します。
python scripts/generate_placement.py把持候補を生成します。
python scripts/generate_grasp.py各「配置候補 x 把持候補」に対して IK を確認します。
python scripts/generate_placement_grasp_ik.py最後のステップは、配置候補数と把持候補数の積だけ評価するため、少し時間がかかる場合があります。
安定姿勢を確認します。
python scripts/check_stable_pose.py配置候補を確認します。
python scripts/check_placement.py把持候補を確認します。
python scripts/check_grasp.pyIK に成功した操作候補を確認します。
python scripts/preview_manipulation.pyIK に成功した候補をランダムに連続表示します。
python scripts/preview_manipulation_random.pyビューア操作:
Left/Right: 候補を切り替えSpace: 選択中の操作候補を再生
.
├── README.md
├── sql
│ ├── 00_create_db.sql
│ ├── 01_create_table.sql
│ ├── 02_insert_bunny_2_object.sql
│ └── 03_insert_bunny_arrangement.sql
├── scripts
│ ├── db_config.py
│ ├── paths.py
│ ├── generate_stable_pose.py
│ ├── generate_placement.py
│ ├── generate_grasp.py
│ ├── generate_placement_grasp_ik.py
│ ├── check_stable_pose.py
│ ├── check_placement.py
│ ├── check_grasp.py
│ ├── preview_manipulation.py
│ └── preview_manipulation_random.py
└── one
└── 外部ライブラリ one と bunny メッシュ
oneは外部ライブラリです。submodule を取得したあと、python -m pip install -e ./oneでインストールしてください。- DB パスワードはスクリプトに直接書かず、環境変数で管理してください。
generate_grasp.pyはまず GPU 衝突判定を使い、失敗した場合は CPU 衝突判定で再実行します。generate_placement.pyとgenerate_placement_grasp_ik.pyは UNIQUE 制約を使っているため、同じ組み合わせについては再実行しやすい作りになっています。generate_stable_pose.pyとgenerate_grasp.pyは生成結果を追記します。完全に作り直したい場合は、空のデータベースから SQL を実行し直してください。
ハイスペックPCでの重い経路探索(PRM)結果をポータブルなデータファイルとして書き出し、他のメンバーがデータベース環境なしでプレビューおよび動画保存(MP4)できる仕組みを用意しています。
経路計算(generate_path_plan.py)が完了したPCで以下のスクリプトを実行し、計算結果を抽出します。
python scripts/export_portable_data.py
実行後、ディレクトリに portable_paths.pkl というファイルが生成されます。このファイルと、プレビュー用のスクリプトを他のメンバーに共有してください。
共有された portable_paths.pkl をリポジトリのルートディレクトリに配置し、以下のスクリプトを実行します。MySQLの環境構築やパスワード設定は一切不要です。
python scripts/auto_record_preview.py
実行すると、計算済みの経路の中からランダムに1つが選ばれて3Dビューアで再生されます。再生が完了すると、カレントディレクトリに MP4 ファイル(例: auto_record_pgik_123.mp4)が自動保存され、ウィンドウが閉じます。
.
├── README.md
├── sql
│ ├── 00_create_db.sql
│ ├── 01_create_table.sql
│ ├── 02_insert_bunny_2_object.sql
│ └── 03_insert_bunny_arrangement.sql
├── scripts
│ ├── db_config.py
│ ├── paths.py
│ ├── generate_stable_pose.py
│ ├── generate_placement.py
│ ├── generate_grasp.py
│ ├── generate_placement_grasp_ik.py
│ ├── generate_path_plan.py # [新規] 障害物回避経路(PRM)の計算とDB保存
│ ├── check_stable_pose.py
│ ├── check_placement.py
│ ├── check_grasp.py
│ ├── preview_manipulation.py
│ ├── preview_manipulation_random.py
│ ├── preview_from_db.py # [新規] DBから経路を読み込んで軽量プレビュー
│ ├── export_portable_data.py # [新規] 他メンバー共有用データ(.pkl)の書き出し
│ └── auto_record_preview.py # [新規] 環境構築不要の自動録画プレビュー
├── portable_paths.pkl # [生成物] export_portable_data.py で出力される共有用データ
└── one
└── 外部ライブラリ one と bunny メッシュ
