本記事では、商用ロボット制御プラットフォームであるMoveIt Proについて紹介します。
MoveIt Proとは
ROS2 ユーザーにとっては馴染み深い MoveIt2 の商用版であり、特に宇宙ロボティクス分野での応用が期待されています。
MoveIt Proは、MoveIt2の開発を主導している米国PickNik Robotics社が開発した商用のロボット制御プラットフォームです。高度なロボットアプリケーションを迅速に開発・展開するための包括的な機能を提供します。
PickNik Robotics社は、ROS 2とMoveIt 2の主要な貢献者であり、産業用ロボットの自動化に特化したソリューションを提供しています。
宇宙ロボティクスへの応用
MoveIt Proは、地上の産業用ロボットだけでなく、宇宙ロボティクス分野でも注目されているプラットフォームです。Space ROS(Space Robot Operating System)は、NASAが主導する宇宙環境向けのロボット制御フレームワークであり、ROS 2をベースに宇宙ミッションの厳しい要件に対応する設計方針となっています。MoveIt Proは、宇宙空間での複雑なマニピュレーションタスク、軌道上サービス、月面・火星探査における遠隔操作など、宇宙特有の課題に対応できる堅牢なモーションプランニング機能を提供します。また、放射線環境や通信遅延といった制約下でも安全で信頼性の高いロボット制御を実現するための基盤として期待されています。
対応環境
対応OSは以下の通りです。
- Ubuntu 22.04 or 24.04
- macOS
参考リンク
バージョン情報
最新バージョンは8.9(2025年11月11日リリース)です。
主な特徴
MoveIt Proは、産業用ロボットアプリケーションの開発を加速するための多彩な機能を備えています。
- AIモデルの統合: 組み込みのMLモデルを使用したり、独自のモデルをトレーニングして追加したりできます。NVIDIAとの統合により、様々なGPUブランドを活用できます。
- リアルタイムプランナー、コントローラー、ソルバー: 衝突認識および力認識型の自動軌道生成が可能です。これにより、安全で効率的なロボット動作を実現します。
- エンドツーエンドのMLツールチェーン: 汎用AIをトレーニングするためのデータ収集ツールが含まれています。
- モバイルベースナビゲーション: AMR(自律移動ロボット)や車輪付きヒューマノイド向けに統合されており、一般的なタスクでの到達可能性を向上させます。
- 複数アームのサポート: MoveIt Proの自動プランニング機能と衝突回避機能により、近接した複数アームのデプロイが可能です。
- オープン開発プラットフォーム: 多様なユースケースやロボットのニーズに柔軟に対応し、将来のアプリケーションの要件変化にも対応できます。
- ハードウェアに依存しないアプローチ: ROS互換性があれば、あらゆるブランドのロボットハードウェアやセンサーに対応します。カスタムハードウェアの構築にも、MoveIt Proは完全な制御スタックを提供できます。
MoveIt Proを使用することで、顧客は平均して12〜24ヶ月早く市場に製品を投入でき、数百万ドルの研究開発コストを削減できるとされています。
ベンダフリー
MoveIt Proは、特定のハードウェアベンダーに依存しない柔軟なアーキテクチャを採用しています。ROS 2との互換性があれば、主要なロボットシステムとも統合できます。この「ベンダフリー」なアプローチにより、既存の設備投資を活かしながら、最適なハードウェアを自由に選択できます。
主な顧客
MoveIt Proは、宇宙航空産業から製造業まで、幅広い分野で採用されています。NASAをはじめとする宇宙機関では、軌道上サービスや惑星探査ミッションにおけるロボットマニピュレーションの研究開発に活用されています。
導入事例
MoveIt Proの導入事例は、多様な産業分野にわたっています。
画面イメージ
MoveIt ProのWebベースのユーザーインターフェースは、直感的で使いやすい設計になっています。画面は大きく分けて、Behaviorツリーを視覚的に構築・編集できる「Build」ビュー、ロボットの動作をリアルタイムで監視・制御できる「Run」ビュー、そして3D環境でロボットの状態を確認できるビジュアライゼーションパネルから構成されています。ドラッグ&ドロップ操作でBehaviorを追加でき、各Behaviorのパラメータは右側のパネルで簡単に編集できます。また、実行中のBehaviorツリーは色分けされてハイライト表示され、現在の実行状態を一目で把握できます。このような視覚的なインターフェースにより、プログラミングの専門知識が少ないオペレーターでも、複雑なロボットタスクを効率的に開発・運用できます。
アーキテクチャ
MoveIt Proのアーキテクチャは、柔軟性と拡張性を重視した設計になっています。ここでは、主要な構成要素について説明します。
Behaviorツリー (Behavior Trees)
MoveIt ProのObjectiveは、BehaviorTree.CPPライブラリのBehaviorツリー実装として表現されます。Behaviorツリーは、複雑なロボットタスクを階層的に構造化し、モジュール化された再利用可能な動作要素として実装するための強力なフレームワークです。
- Objective: MoveIt Proにおける「アプリケーション」であり、Behaviorノードの接続されたコレクションです。他のObjective内で「サブツリー」としても使用できます。
- Behavior: MoveIt Proにおける最小の構成要素であり、離散的なセンシング、プランニング、モーション実行、または意思決定ステップを表します。Behaviorは常に、実行時にSUCCESS、FAILURE、またはRUNNINGのステータスを返します。アクション、条件、制御、デコレータ、サブツリーノードなどのカテゴリに分類されます。
-
ブラックボード (Blackboard): BehaviorツリーがObjective実行中にノード間でKey-Valueペアを共有するために使用する中央データストアです。
- データ共有:Behavior間で主要なデータやパラメーターを受け渡しするために使用されます。
- 実行時メモリ:Behaviorが直接的な結合やグローバル変数を使わずにデータを読み書きできる、実行時メモリとして機能します。
- モジュール性とデバッグ:この設計により、Behavior Treeはモジュール性が高まり、デバッグが容易になります。複雑なデータフローをデバッグする際に特に役立ちます。
Dockerコンテナ化
MoveIt ProはDockerを使用して配布されており、MoveIt Proの依存関係がコンピューター上の他のROS 2プロジェクトと干渉しないようになっています。これにより、環境の分離と再現性が保証されます。
- ユーザーワークスペースのマウント: 独自のカスタムパッケージ(ロボット構成やBehaviorパッケージなど)をMoveIt Proに追加するために、ユーザーワークスペースをDockerコンテナにマウントする必要があります。
- 分散アーキテクチャ: 複数のDockerイメージを使用することで、分散型のマルチマシンアーキテクチャも可能です。リアルタイム制御プロセスを専用マシンやCPUコアに分離したり、GPU負荷を特化したハードウェアノードにオフロードしたりできます。
ROS 2との統合
MoveIt ProはROS 2通信フレームワークを活用し、コンポーネント間の柔軟なネットワーク通信を提供します。トピック、サービス、アクションを通じて、MoveIt ProのObjectiveを外部プロセスからプログラムで起動・通信できます。これにより、既存のROS 2エコシステムとのシームレスな統合が可能になります。
コア機能
MoveIt Proの主要な機能は、ロボットの動作、知覚、意思決定を包括的にカバーしています。以下では、それぞれの機能について詳しく説明します。
モーションプランニングと制御
MoveIt Proは、ロボットが安全かつ効率的に動作するための様々なモーション制御機能を提供します。
-
ジョイント空間プランニング: ロボットアームを特定のジョイント構成に移動させ、障害物を回避するプランニングです。
PlanToJointGoalBehaviorやMove To Joint Stateサブツリーを使用します。 -
Cartesian空間プランニング: ロボットのエンドエフェクタが空間内で一連の精密なポーズ(直線や曲線に沿って)をたどる軌道を生成します。これは、溶接、研磨、検査など、ツールが表面に接触または整列した状態を維持する必要があるタスクに役立ちます。
PlanCartesianPathBehaviorがこの機能を提供します。 -
タスクプランニング (MTC - MoveIt Task Constructor): ピックアンドプレイス操作のような複雑なタスクを、相互依存する複数のステップに分解して計画する高度な機能です。
InitializeMTCTask、SetupMTCCurrentState、PlanMTCTask、ExecuteMTCTaskなどのBehaviorを組み合わせて使用します。- InitializeMTCTask: 新しいタスクオブジェクトを作成します
- SetupMTCCurrentState: 作成されたタスクを受け取り、現在のロボットの状態をタスクの開始状態として設定します
- PlanMTCTask: 設定されたMTCタスクの
plan()関数を呼び出し、ソリューションをブラックボードに保存します - ExecuteMTCTask: ブラックボードからMTCソリューションを読み取り、ロボットの軌道を実行します
-
モバイルベースナビゲーション: ROSのNav2スタックと連携し、モバイルロボットが環境内の特定の位置へ移動する際に障害物を回避しながら計画・実行します。
-
アドミッタンス制御: ロボットが接触を伴う作業(ボタン押し、ドア開閉、挿入など)を行う際に、感知された力に応じて軌道を調整する機能です。
SetAdmittanceParametersとExecuteTrajectoryWithAdmittanceBehaviorを使用します。
-
TCP (Tool Center Point):
-
MoveIt ProにおけるTCP(Tool Center Point) とは、ツールまたはエンドエフェクタ上にある特定の点のことで、動作やタスク実行の参照点として機能します。
-
TCPの正確な定義とキャリブレーションは、特に溶接、組み立て、マテリアルハンドリングといったタスクにおいて、精密な動きを実現するために不可欠です。MoveIt Proでは、ロボット操作を正確かつ効率的に行うためにTCPの設定と利用をサポートしています。
-
MoveIt Proでは、TCPを定義するためのいくつかの方法が提供されています。
-
CAD / URDFからの変換の取得
- エンドエフェクタがロボットモデル(URDF)内で正確にモデリングされている場合、TCP変換は自動的に提供されます。
- この場合、
IKフレームとしてTCPリンク名(例:grasp_link)をBehaviorで使用します。
-
ファイルからの変換の読み込み
-
LoadPoseFromYAMLBehaviorを使用すると、geometry_msgs::msg::Poseを含むYAMLファイルからTCP変換を読み込むことができます。読み込んだ変換は、Behaviorのtip offsetとして使用できます。
-
-
TCPの精密なキャリブレーション
- より正確なTCPキャリブレーションには、ビジョンベースや専用のTCPキャリブレーションセンサーといった高度な技術が必要です。
- ユーザーは、手動でアームを動かしたり、現在の先端姿勢を読み取ったり、視覚マーカーから姿勢を推定したりするなど、独自のキャリブレーション手順をObjectiveやカスタムBehaviorで作成できます。MoveIt Proは、このようなカスタムプロセスを構築するための多くのビルディングブロックを提供しています。
-
OEMのティーチペンダントからの読み取り
- ロボットアームのメーカーが提供するAPIによっては、ティーチペンダントからTCPキャリブレーションを取得できる場合があります。
- 例えば、URロボットはティーチペンダントでのTCPキャリブレーションを可能にし、URDFにこれらのキャリブレーションパラメータを読み込むためのスクリプトを提供しています。
知覚と機械学習
MoveIt Proは、ロボットが環境を知覚し、インテリジェントに動作するための高度なツールを提供します。
- AprilTag 検出: ロボティクスやコンピュータービジョンで一般的に使用されるフィデューシャルマーカーシステムで、物体の精密な位置特定やポーズ推定に利用されます。
- 点群セグメンテーション: 点群内でオブジェクトを特定するプロセスです。MLモデル(例: SAM2)を使用して2D画像からマスクを生成し、それを3D点群に変換してオブジェクトの点群セグメントを抽出できます。
-
点群登録 (Iterative Closest Point - ICP): CADメッシュファイルを入力として、点群内のオブジェクトを特定するプロセスです。これにより、ワークスペース内の部品の位置を特定したり、研磨などの操作入力として使用できます。
RegisterPointCloudsBehaviorがこの機能を提供します。 - MLに基づく自動把持: 学習済み把持モデル(例: L2G)を統合しており、生点群データから把持候補を生成・評価できます。
テレオペレーション
MoveIt Proは、ロボットのセットアップ、診断、リカバリのために4種類のマニュアル制御機能を提供します。
- ウェイポイント制御: 保存されたジョイント状態であり、Objectiveやスタンドアロンで再利用できます。
- インタラクティブマーカー (IMarker) 制御: ロボットのエンドエフェクタを6自由度で動かすことができ、計画された軌道を承認する前にプレビューできます。
- Cartesianポーズジョグ制御: エンドエフェクタを異なる平面や軸に沿って移動または回転させたり、グリッパーを開閉したりできます。
- ジョイント制御: 個々のジョイントを低レベルで制御できます。衝突チェックをオフにして、衝突しているロボットを安全な状態に戻すことも可能です。
開発ワークフロー
MoveIt Proは、UIとCLIの両方で開発をサポートしており、開発者の好みや用途に応じて柔軟に開発環境を選択できます。
-
UIベースの開発: Objectiveの作成や編集には「Build」ビューを使用します。Behaviorをドラッグ&ドロップで追加したり、パラメータを編集したりできます。実行中のObjectiveのデバッグには「Run」ビューと「Behavior Tree Pane」が役立ち、現在実行中のBehaviorがハイライト表示されます。
-
CLIベースの開発:
moveit_proコマンドラインツールを通じて、MoveIt Proのランタイム環境を管理できます。ヘッドレスモード(UIなし)での起動、Rvizでのロボットの表示、ROSサービスやPythonスクリプトによるObjectiveの起動が可能です。 -
カスタムBehaviorの開発: C++でカスタムBehavior(プラグイン)を作成し、MoveIt ProのObjectiveにロードして実行できます。Behaviorは非同期で実行可能で、ROSインターフェースとやり取りできます。これにより、プロジェクト固有の機能を柔軟に追加できます。
-
カスタムロボット構成の作成: ロボットのURDF、SRDF、コントローラー、センサー、およびMoveIt ProのObjectiveとウェイポイントを含むROS 2パッケージとしてロボット構成パッケージを定義します。既存のロボット構成を継承して、フリート管理を容易にすることも可能です。
デプロイメントと管理
MoveIt Proは、本番環境でのロボットシステムの展開と運用をサポートするように設計されています。
-
ソフトウェア展開: Docker化されているため、システムを簡単に展開および更新できます。リアルタイム制御プロセスを専用マシンに分離したり、計算負荷の高いタスク(GPUを使用する機械学習推論など)を専門ハードウェアノードにオフロードしたりできます。
-
ロボットコミッショニング: ロボット構成(robot_config)の概念を使用し、ハードウェア固有の設定、ロボット記述ファイル、キャリブレーションファイル、MoveIt Pro Objectiveなど、ロボットのすべての重要な構成情報を含めます。
-
フリート管理: VPNやトンネリング技術を介してMoveIt ProのWebインターフェースへのリモートアクセスを可能にし、遠隔地からの操作をサポートします。Formantなどのフリート管理システムとの統合も可能です。
-
オペレーターHMI: ROSネイティブ通信、rosbridge SDK(Python、JavaScriptなど)による非ROS統合、またはヘッドレスモードでのカスタムHMIソリューションの展開など、ユーザー向けインターフェース構築のための複数のオプションを提供します。
さらなる情報
Moveit Pro は頻繁にアップグレード・機能拡充が行われています。今後も注目していきたいと思います。











