ROSとはアメリカのWillow Garage社が開発・保守しているロボット用の基盤ソフトウエアです.機能としてはミドルウエアのレイヤーに分類される機能が備わっています.
ROSの公式サイト「ROS.org」
ROSの特徴は分散システムとすることによる柔軟かつ堅牢なシステムの確立です.
ROSは分散システム指向
分散システムとすることで,ロボットの部品やアルゴリズムごとの再利用性が増します.
また,運用時は部分ごとのソフトウエアのエラーがシステム全体の停止につながりにくいという特徴があります.
さらに,イーサネットや無線LANなどのプライベートなネットワークやインターネットとの親和性が高く,ハードウエア的にも分散したシステムを構築するのに向いています.
ここからはROSの少し詳しい説明になりますが,ysugaお得意の誤解をもろともしないやり方で説明します.
ここは違うとかツッコミ大歓迎.
ROSの機能単位はノード
ROSでは,ソフトウエアの一つの単位を<ノード: Node>と呼びます.
たとえばロボットや空間認識のための環境センサなどを1つ1つノードとしてソフトウエアを組み,それらの分散システムを構成するのがROSのやり方です.
トピック
トピックを提供するパブリッシャーと,利用するサブスクライバー
ROSのノードには,<パブリッシャー: Publisher>と<サブスクライバー : Subscriber>という種類があります(これがすべてではありません).
パブリッシャーはデータを提供する側で,サブスクライバーはデータを受け取る側です.
パブリッシャーは提供するデータを<トピック : Topic>という形でROSの世界に配置します.
サブスクライバーは自分に関係のあるトピックを監視していて,トピックのデータを受け取って利用することが出来ます.
つまり,ある部屋の環境センサなどが<環境>という名前のトピックを提供している(publishしている)とき,その環境内にある,多くのロボットがそのトピックを監視して(subscribeして),環境センサの情報を利用することが出来るわけです.
サービス
トピックのデータ伝達はシンプルですが,データの伝達によらないノード間の連携には<サービス: Service>という仕組みを使います.ノードをパブリッシャーでもサブスクライバーでもない,<サービス: Service>としてROSの世界に放つ事が出来ます.
サービスはちょうど関数の呼び出しに似ていて,単なるデータの送受信のみでなく,サービスの利用側から,ノードにある「処理」を行わせることが可能です.
たとえば,ドアを開閉するノードがあるとします.このノードが,<ドア>というトピックを監視して,それが1になったら開く,などのアーキテクチャでもドアを開閉させるサービスを提供出来ますが,リクエストをしたノードがドアをあけることに成功したか否かを受け取ることができません.サービスはこの仕組みを提供します.
ROSにおいてはサービスを利用する側はノードという形をとる必要はありませんが,基本的に他のトピックなどと連携することが多いのでノードになると思います.
パラメータ
ROSにはトピックのほかに,数値などのデータを送受信する仕組みとして<パラメータ: Parameter>があります.パラメータはパラメータサーバにデータを保持しておくことが出来,他のノードからパラメータに変更があった場合には,通知を受け取る仕組みが提供されています.
ノードを管理するマスターの機能
ROSのノードやトピック,サービスの管理は<マスター: Master>によって行われています.マスターの仕組みはroscoreというプロセスによって提供されています.roscoreは,ノードのURIの検索,トピックの検索,トピックに対するサブスクライバーの参加通知などを提供しています.roscoreは必ず一つ,実行されている必要があります.
パッケージという単位
ROSの強みは,データの送受信や柔軟なシステム構成力だけではなく,パッケージを管理する仕組みと,それを運用するためのシンプルなツール群もあります.
パッケージとは,機能などによって分類されたノードやライブラリの単位で,一つのパッケージに複数のノードを置くこともできます.
ROSをフルインストールすると多数のパッケージがインストールされますが,すべてのパッケージの場所の管理や編集に使えるコマンド,パッケージ下のノードの実行などを行うツールが用意されています.
ROSのノードやトピックなどはマスターによって管理されていますが,現状を確認するためのツールや,デバッグに使えるコマンド群が多数提供されています.
ROSはウェブサイトros.orgでROS用に提供されているオープンソースなパッケージ群を一覧で確認することが出来ます.これだけ多くのパッケージを提供できているロボット用の基盤ソフトウエアはほかにないのではないでしょうか?
ROSのソフトウエアリスト
これがROSの最大の強みです.