AndrejOrsula/pymoveit2

Python interface for MoveIt 2

何であるか

pymoveit2 は、MoveIt 2(ROS 2用の人気のある運動計画フレームワーク)を実行するロボットを、Pythonコードから直接制御できる軽量なPythonラッパーです。ROS 2のアクションおよびサービスを介してMoveIt 2と通信し、以下のような一般的なタスクに向けた洗練された高レベルAPIを提供します:

  • 正運動学 / 逆運動学
  • ジョイント空間またはカーテシアン運動の計画と実行
  • リアルタイムサーボ制御
  • グリッパー操作
  • 計画シーンの操作(衝突オブジェクトの追加/削除、衝突チェックの切り替え)

このライブラリは基本的に利便性のためのレイヤーです:ROS 2のインストールと、あなたのロボット用のMoveIt 2設定が必要ですが、それらが整えば、低レベルのROSメッセージを扱う代わりに、短いPythonスクリプトを書くことができます。


インストール方法

方法 コマンド 備考
バイナリROSパッケージ(標準的なROS 2ディストリビューション向けに事前にビルド済み) sudo apt install ros-$ROS_DISTRO-pymoveit2 Humble、Jazzy、Lyrical、Rollingで動作します。
PyPI(純Pythonのwheel) pip install pymoveit2 aptよりもpipを好む場合に便利です。
Docker(実行可能なイメージ) docker pull andrejorsula/pymoveit2 その後、READMEに示されたヘルパー スクリプトを実行します。
ソースから ROS 2ワークスペースにリポジトリをクローンし、colconでビルドします。

クイックスタート例(Franka Emika Panda)

  1. Pandaロボット用のMoveIt 2設定をインストールします:
    sudo apt install ros-$ROS_DISTRO-moveit-resources-panda-moveit-config ros-$ROS_DISTRO-controller-manager
    
  2. ロボット用のMoveIt 2デモを起動します:
    ros2 launch moveit_resources_panda_moveit_config demo.launch.py
    
  3. pymoveit2のデモスクリプトを実行します。たとえば、事前に定義されたジョイント構成に移動する場合:
    ros2 run pymoveit2 ex_joint_goal.py
    

動きがない場合は、診断スクリプトが提供されています:

ros2 run pymoveit2 ex_doctor.py

コアPython API

connect() / RobotSession

from pymoveit2 import connect

with connect() as robot:
    robot.move_to_pose([0.4, 0.0, 0.4], [1.0, 0.0, 0.0, 0.0])
    robot.gripper.close()
    robot.move_to_configuration()

RobotSessionは以下の要素をまとめています:

  • ROS 2ノード(robot.node)
  • エクセキュータ(robot.executor)
  • ロボットの記述(robot.description)
  • 計画用のMoveIt2インターフェース(robot.arm)
  • オプションのグリッパーおよびサーボインターフェース(robot.gripper、robot.servo)。

低レベルの構築

より細かい制御が必要な場合、自分で各要素をインスタンス化できます:

from pymoveit2 import RobotDescription, MoveIt2, GripperInterface, MoveIt2Servo

node = ...  # あなたのrclpy.Node

desc = RobotDescription.from_node(node)
moveit = MoveIt2(node=node, **desc.moveit2_kwargs())
gripper = GripperInterface(node=node, **desc.moveit2_gripper_kwargs()) if desc.gripper_group_name else None
servo = MoveIt2Servo(node=node, frame_id=str(desc.moveit2_kwargs()["base_link_name"]))

例でできること

カテゴリ 例のスクリプト 内容
運動学 ex_fk.py, ex_ik.py 正運動学および逆運動学の呼び出し
動作計画 ex_joint_goal.py, ex_pose_goal.py ジョイント目標またはカーテシアンポーズに移動(カーテシアン補間をオプションで使用)
制約 ex_orientation_path_constraint.py 動作中にエンドエフェクタの向きを固定する
リアルタイム制御 ex_servo.py MoveIt 2 Servoを使って低遅延の遠隔操作
グリッパー ex_gripper.py ROSアクション経由でロボットグリッパーを開閉/トグル
計画シーン ex_collision_primitive.py, ex_collision_mesh.py, ex_allow_collisions.py, ex_clear_planning_scene.py 基本形状やメッシュの追加/削除、衝突の有効/無効、シーンのクリア
セッションワークフロー ex_session.py RobotSessionコンテキストマネージャーを使用したコンパクトなエンドツーエンドデモ

どの人にとって役立つのか?

  • ロボット研究者:ROS 2のボイラープレートを書かずにPythonでアルゴリズムをプロトタイピングしたい人。
  • 教育者/学生:運動計画を教える場合。APIは扱いやすく、デモスクリプトは即実行可能。
  • 上位レベルのAI/MLパイプライン開発者(例:デモからの学習、強化学習):現実またはシミュレートされたロボットに簡単な運動命令を送信したい人。

制限事項 / 注意点

  • これは学習や認識機能を提供しません。MoveIt 2の制御インターフェースに限定されます。
  • あなたのロボット用に動作するROS 2 + MoveIt 2のセットアップ(URDF、SRDF、コントローラー設定など)が必要です。
  • リアルタイム性能は、下位のMoveIt 2 Servoノードとハードウェアに依存します。Pythonレイヤーは最小限のオーバーヘッドしか追加しませんが、ハードリアルタイムソリューションではありません。

まとめ

pymoveit2は、Pythonと強力なMoveIt 2運動計画スタックの間のギャップを埋め、ロボットを動かし、運動学を照会し、計画シーンを操作するための簡潔で読みやすいスクリプトを書くことを可能にします。PythonベースのAIや上位レベルの論理をROSベースのロボットシステムに統合したい人にとって、信頼できる構築ブロックです。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト