ROSはモバイル・ロボットの開発にどのような変革をもたらすのか?

ROSはモバイル・ロボットの開発にどのような変革をもたらすのか?

著者:Maggie Maralit

独自のロボット・システムやロボット・アプリケーションを開発したい場合には、ぜひ利用を検討すべきものがあります。それはROS(Robot Operating System)です。ROSは、ロボット開発の最初の一歩としても活用できるソフトウェア・プラットフォームです。いわゆるミドルウェアに相当しますが、各種のドライバ、最先端のアルゴリズムをはじめ、多様なソフトウェア・ライブラリや強力な開発ツールなどが含まれています。

前回の記事では、ROSを利用することによってモバイル・ロボットの柔軟性が高まる理由について説明しました。新たなタスクに応じたプログラムを必要に応じて作成できる点がROSの特徴の1つです。今回は、ROSを利用することで、なぜモバイル・ロボットの開発が格段に容易になるのかを明らかにします。
 

ROSの仕組み

ROSのパッケージ(packageは、ノード(node)で構成されています。ここで言うノードとは、特定のタスクを実行するプログラムのことです。それらのノードは、トピック(topicとして利用可能なメッセージ(messageのパブリッシュまたはサブスクライブ、あるいはサービス(serviceを使用したリクエスト‐レスポンスのタスクによって相互に通信します。

 Infographic showing basic ROS data flow

図1. ROSにおける基本的なデータの流れ
 

モバイル・ロボットで使われる一般的なROSのノード

モバイル・ロボットで使われるROSのノードは、主にドライバ、ラッパー、アプリケーション、アルゴリズムのうちいずれかとして機能します。例えば、ドライバはハードウェアに直接アクセスすることができます。それに対し、ラッパーは必要なハードウェア実装に対するアクセス権を持つサードパーティ製ドライバのAPI(Application Programming Interface)を呼び出すために使われます。

例として、複数のセンサーとアクチュエータを備えるモバイル・ロボットを考えます。その場合、各センサー/アクチュエータ用のドライバ/ラッパーを用意することで、モバイル・ロボットはそれらの機能を使用できるようになります。センシングのプロセスとデータをアクションに変換するプロセスを相互に連携させることで、様々なアルゴリズムやアプリケーションを構築することが可能です。

 Basic ROS nodes in a mobile robot

図2. モバイル・ロボットで使われるROSの基本的なノード
 

シンプルなモバイル・ロボット向けのROSアプリケーション

ここでは、非常にシンプルなロボットを例にとり、ROSの役割について詳しく解説します。そのロボットは、障害物を避けながらポイントAからポイントBまで移動します。この機能を実現するために、そのロボットは次のような主要なハードウェアを備えています。1つ目は位置の推定に使用する慣性計測ユニット(IMU:Inertial Measurement Unit)、2つ目は周囲のマップを作成したり障害物を回避したりするために使用されるLiDAR、3つ目は車輪を動かして様々な場所へ移動するためのモータ制御システムです。この場合、ROSを利用する処理のフローチャートは図3のようになります。

 Flowchart for an ROS-based simple robot that can go from Point A to Point B while avoiding obstacles

図3. ROSベースのロボットが実行する処理のフローチャート。このシンプルなロボットは、障害物を避けながらポイントAからポイントBまで移動します。

以下、具体的にはどのような処理が行われるのか詳しく説明します。

  • ROSドライバはハードウェアの要素にアクセスし、アルゴリズムとアプリケーションに対してそれらを抽象化します。例えば、IMUとLiDARについては、それぞれのROSドライバがデータを取得し、必要な情報をROSのメッセージとしてブロードキャストします。また、モータ制御システムについては、そのROSドライバが速度のメッセージを「コマンド」として受け取り、モータを駆動して目的の場所まで移動します。加えて、そのROSドライバはホイール・エンコーダにもアクセスできます。それにより、ホイール・オドメトリのメッセージを出力することも可能です。

  • 位置推定のアルゴリズムはロボットの位置と姿勢を推定します。それに向けて、まずはIMU、LiDAR、ホイール・オドメトリからのメッセージを入力とし、ロボットの現在の位置を算出します。次に、その位置情報をオドメトリ・メッセージとしてブロードキャストします。そのメッセージを、衝突を検出するアルゴリズムが取得します。最後に、得られた結果がマッピングのアルゴリズムからのメッセージやLiDARのメッセージと照合されます。

  • ナビゲーションのアプリケーションは、GUI(Graphical User Interface)を介して動きのコマンドを送信します。つまり、モータ制御用のROSドライバに速度のメッセージを送信することで、車輪を制御することが可能になります。また、ロボットをポイントAからポイントBに向かわせるコマンドに対しては、既知の衝突地点の情報が提供されます。

     

ロボットの継続的な進化を可能にするROS

ROSは、ノード間で通信を行うための標準的なメッセージ/フレームワークを提供します。ROSのノードを追加することにより、ソフトウェア・アーキテクチャ全体の再利用や改善が可能になります。上で例にとったシンプルなロボットにより優れた機能を追加したりすることができるということです。

例えば、センサー・フュージョンのアルゴリズムやセンサーのノイズをフィルタリングするアルゴリズムを追加すれば、位置の推定精度を高められます。あるいは、劣悪な照明の状態に対応するためにレーダーを追加することも可能です。更には、深度検出を利用してより正確な3Dマッピング/衝突検出を実現するためのToF(Time of Flight)カメラなど、より多くのセンサーを追加できます。

 An evolved version of the simple robot flowchart

図4. 進化させたロボットが実行する処理のフローチャート

ハードウェア・システムがROSに対応するドライバを備えていれば、そのシステム向けに開発したアルゴリズムやアプリケーションを、ROSに対応するあらゆるロボットで使用できます。つまり、極めて高い拡張性が得られます。

ADI Trinamicの事例、モーション・コントロールをROS対応に

上述したように、ROSの様々なドライバはセンサーとアクチュエータのメッセージを送出します。それらのメッセージは、モバイル・ロボットに実装されたアルゴリズムやアプリケーションの入出力として機能します。高度な技術とそれをサポートするROSドライバを組み合わせることにより、開発者は1つのメリットを享受できます。それは、各ハードウェアを動作させるために必要な多種多様なソフトウェア開発キット(SDK:Software Development Kit)から解放されるというものです。また、モバイル・ロボットの分野のイノベータは、サードパーティ製品との相互運用性に関する問題を回避できます。更に、新たな技術の迅速な評価に集中し、高度なアルゴリズムやアプリケーションを開発できるようになります。

上記のメリットを提供している実例を紹介します。その例とは、アナログ・デバイセズの「ADI Trinamic」です(「モーター・ドライバおよびモーション・コントローラIC」のページを参照)。これは、モーション・コントロールに関するアナログ・デバイセズの専門知識、アナログ・プロセス技術、電源の設計能力を融合することで実現されました。ADI TrinamicとROSを組み合わせた例については、こちらの記事やこちらの記事をご覧ください。図5に、ADI Trinamicのモーション・コントロールに使用するROSドライバの高度なソフトウェア・アーキテクチャを示しました。

 Software architecture of the Trinamic motion control ROS driver

図5. ROSドライバのソフトウェア・アーキテクチャ。このドライバはADI Trinamicのモーション・コントロールに使用されます。
 

まとめ

ROSは民生、産業、車載といった様々な分野で活用可能です。また、Linux、Windows、macOS、一部の組み込みプラットフォームなど、様々なプラットフォーム上で利用できます。完全なオープン・ソースとして提供されており、商用利用も可能です。また、世界中のコミュニティが多くのリソースを投入してROSのサポートに尽力しています。そのため、ROSのユーザは豊富なサポートのもと、システムの設計やアプリケーションの開発を容易に進められます。

今回は、モバイル・ロボットでROSを活用する方法の概要を紹介しました。当シリーズの次回のブログ記事では、自律型モバイル・ロボットで使用するソフトウェアの全体的なアーキテクチャの基盤構築について、更に掘り下げていきます。アナログ・デバイセズが提供するROSドライバの使用方法についてはanalog.com/jp/mobile-roboticsをご覧ください。