Skip to content

kaoruuy/physical-ai

Repository files navigation

分別ロボットアームシステム構築

~PyBullet × YOLOv8 × Panda Arm による物体認識・把持・分類~

1. 概要

本システムでは、PyBulletの物理シミュレーション環境上において、色付きの立方体オブジェクトを自動で認識・把持・分類する分別ロボットを構築した。YOLOv8による物体検出とPandaアームの動作制御を連携し、複数の物体を連続的に処理できる自律分別システムを実現した。

主な処理は以下の通り:

  • PyBulletで仮想カメラ画像を取得
  • YOLOv8により物体の色と画像内位置を検出
  • 世界座標へ変換し、最も近い未処理オブジェクトを選択
  • Pandaアームによる把持と色に応じた分類・投下
  • 処理ログをCSVに記録

2. システム構成

モジュール構成図

+---------------------+        +-----------------------------+        +-------------------------+
|     PyBullet        | -----> | YOLOv8 (Ultralytics)        | -----> | 推論結果 (u, v, color)  |
| ・物体生成           |        | ・ローカル推論               |        +-----------+-------------+
| ・仮想カメラ         |        | ・学習済モデル(best.pt)      |                    |
| ・Pandaアーム        |        +-----------------------------+                    ↓
+---------+-----------+                                                   +-------------------------+
          |                                                               | アーム制御・分別処理     |
          |                                                               | ・座標変換 & 逆運動学     |
          +-------------------------------------------------------------> | ・把持 → 色別移動・投下   |
                                                                          +-------------------------+


3. 処理フロー

1ループごとの処理

  1. カメラ画像取得

    PyBulletの getCameraImage により仮想カメラ画像を取得し、ファイル保存。

  2. YOLOv8による物体検出

    保存画像をYOLOv8(best.pt)で推論し、色ラベルと画像内座標 (u, v) を取得。

  3. 世界座標変換 & 物体選択

    YOLO検出結果を bbox_to_world() で世界座標に変換。

    未処理のオブジェクトと照合し、最もエンドエフェクタに近い物体を選択。

  4. アームの逆運動学で位置制御

    calculateInverseKinematics() によりアームを物体位置へ移動。

  5. 把持 & 判定

    try_grasp_with_retries() により最大10回の把持を試行。

    is_grasp_successful() にてアームと物体の距離により判定。

  6. 色別に分類・投下

    sort_object_by_color() により、色ラベルに応じて異なる分類位置へ移動 → グリッパーを開放。

  7. ログ記録

    sorted_log.csv(loop_id, u, v, color_name, result) を記録。再現・評価が可能。


4. 工夫した点・技術的特徴

  • 視覚座標から世界座標への変換(bbox_to_world)

    YOLOで検出した物体のバウンディングボックスから中心座標を求め、仮想カメラの位置・向きに基づいて3次元の把持目標座標を計算。

  • 最も近いオブジェクトの自動選択

    YOLO検出結果とPyBullet上の物理オブジェクトを位置比較し、最も近い未処理物体のみを対象とした。

  • 把持の再試行機能

    初回の把持が失敗した場合、高さや位置を微調整して再試行する堅牢な制御ロジックを実装。

  • 分別位置の色対応制御

    sort_object_by_color() により、赤・青・緑の色ラベルに応じて異なるy軸方向の投下位置にアームを移動させることで「分別」を実現。

  • 高い再現性と評価可能性

    処理のログファイル sorted_log.csv を出力することで、把持成功率や分類精度の分析が可能な設計にした。

  • Colab × ローカル推論の分離

    学習はGoogle Colab(Ultralytics YOLOv8)、推論とロボット制御はローカルPC(PyBullet)で分担し、開発効率と実行速度を両立。


5. 使用技術・環境

  • シミュレーション: PyBullet
    • Pandaアーム URDF
    • 仮想カメラ・物体生成・把持制御
  • 物体検出: YOLOv8(Ultralytics)
    • Google Colabで学習 (yolov8n.ptbest.pt)
    • ローカルで推論(学習済みモデル読み込み)
  • 言語・ライブラリ:
    • Python 3.x
    • NumPy, OpenCV, PyBullet, Ultralytics YOLOv8
  • 環境:
    • Ubuntu 22.04
    • ローカルGPU不要(CPUでも推論可)

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages