ROSの基本的な概念

ROS (Robot Operatying System)とは?

Open Source Robotics Foundationが開発・メンテナンスを行っており、ロボット開発者を支援するためのソフトウェアプラットフォームです. 具体的にはロボットに必要なソフトウェアを開発するためのライブラリ,通信の仕組みを提供します.またソフトウェアのビルドツールでもあります.

ROSのディレクトリ・ファイル構造について

ROSをapt-getによってインストールすると、以下のようなディレクトリ構造です.
基本的にROSにおいてデフォルトでインストールされるソフトウェアやライブラリ,また追加したものはこのディレクトリの中に格納されます.

ros/indigo
|-bin/.......各実行ファイル
|-include/...メッセージ生成に必要なライブラリ
|-lib/.......ドライバ関係やライブラリ
|-share/.....インストール済みのROSのパッケージ

インストールしたディレクトリとは別に,開発者はワークスペースを作成し,ワークスペースにおいて各ユーザのロボット向けのソフトウェアを開発・管理します.
この際,ROSにおいて特定の目的のための複数または単体のソフトウェアの詰め合わせをパッケージと称します.ROSの開発者が自身のソフトウェアを世界へ公開する際は,このパッケージという形式(単位)で公開します. 以下に示すのはパッケージの基本的なデイレクトリ構成です.

your_package_name
|--CMakeLists.txt..ビルドターゲットやライブラリの設定ファイル
|--package.xml.....パッケージ作成者情報やライセンス情報,依存設定
|--include/........ヘッダファイルの置き場所
|--msg/............メッセージファイルの置き場所
|--src/............ソースコード(ソフトウェア本体のコード)
|--launch/.........ランチファイルの置き場所

ROSの通信モデル

ROSではPublish/Subscribeメッセージングと呼ばれる通信モデルでノード(ソフトウェア)同士が通信します. 各要素の役割は以下に示します.

  • Message:ROSでやりとりするデータ.中身のデータ構造はROSにあらかじめ用意されているものか独自の定義が可能
  • Topic:メッセージを分類する系統ごとに作成される論理チャネル
  • Publisher:メッセージを特定のトピックへ配信するノード
  • Subscriber:特定のトピックを購読対象として登録しメッセージを受信するノード
  • roscore:ROSの通信におけるネームサービスを行う。マスタ。

ROSではPublisherSubscriberTopicを介してMessageをやり取りすることでデータ通信をします. Publish/Subscribeの特徴として,P2Pな通信であることがあげられます.これは互いが通信相手の情報を知る必要はなく,ノード構成ネットワークへの脱退,参加が容易になるという利点があります. つまりこれはシステムへの機能の追加・変更がとても容易になるということです.また,1対1の通信専用の方法としてROS Serviceもあり,一般的なサーバー/クライアント方式の通信も可能です. 実際に通信する際は,PublisherとSubscriberはそれぞれPublish/SubscribeするTopicの情報をrosocoreに登録し,通信をします。それゆえに,ROSのシステム動作にはroscoreの起動は必須といえます。