yotiky Tech Blog

とあるエンジニアの備忘録

ROS ロボットプログラミングバイブル 第4章

ROSロボットプログラミングバイブル を読み始めたのでそのまとめです。

もくじ

第4章 ROS の主要概念

構成

f:id:yotiky:20200417003548p:plain

マスタ

マスタは、ノード間が接続し通信するためのネームサーバとなる。マスタでは実行中の各ノードの名前と情報を保持しており、他のノードからの問い合わせに回答する。
ノードとの通信は XMLRPC を利用し、必要な時のみ通信する。
環境変数ROS_MASTER_URIに設定した場合、マスタに設定したURIやポートが割り当てられる。

マスタは、パラメータサーバとしてすべてのノードで使用されるパラメータの管理も行っている。パラメータは実行時のシステム設定(変数)である。

ノード

ノードは、ROS内で実行される最小のプロセスである。ノードは機能毎に作成され、マスタに問い合わせてノード間でメッセージを交換する。
マスタとの通信はXMLRPCを利用する。ノード間での通信は接続要求/応答にXMLRPCを利用し、その後のメッセージ通信ではTCPROSを利用する。
環境変数ROS_HOSTNAMEなどの環境変数URIとして使用しポートは任意の値で設定される。

メッセージ

ノード間で通信する時にやりとりされるデータ。

通信方式

ノード間でメッセージをやり取りする通信方式は以下のものがある。

  • トピック:非同期、単方向の通信。
  • サービス:同期、双方向の通信。
  • アクション:非同期、双方向の通信。

メッセージ通信

トピック

トピック通信は、データを送信するパブリッシャとデータを受信するサブスクライバで構成される。
パブリッシャがマスタにノード情報などを登録、サブスクライバが任意のパブリッシャ情報を取得して、ノード間で接続。その後連続的にデータを送受信する。他の通信は1:1だが、トピックは1:N、N:1、N:Nが可能。
トピック通信のメッセージの型は、*.msgファイルに定義する。

通信の流れ。

  1. マスタの実行
  2. [Node1] サブスクライバを実装したノードの実行
    • マスタに自身の情報を登録 (XMLRPC)
  3. [Node2] パブリッシャを実装したノードの実行
    • マスタに自身の情報を登録(XMLRPC)
  4. [Node1] マスタからパブリッシャ情報を取得 (XMLRPC)
  5. [Node1] パブリッシャに接続要求 (XMLRPC)
  6. [Node2] パブリッシャが接続応答 (XMLRPC)
  7. [Node1] TCPROS接続 (TCPROS)
  8. [Node2] メッセージ送信 (TCPROS)

サービス

サービス通信は、サービスクライアントとサービスサーバで構成される。サーバ側がマスタにノード情報などを登録、ノード間でクライアントからの要求に対して応答が終わると通信は終了する。(通常の)同期メソッド呼び出しのようなもの。
サービス通信のメッセージの型は、*.srvファイルに定義する。

通信の流れ。

  1. TCPROS接続まではトピックと同じ。
  2. クライアントがサービス要求 (TCPROS)
  3. サーバがサービス応答 (TCPROS) (通信終了)

アクション

アクション通信は、要求から応答までの処理時間が長い場合に、非同期かつ進捗などを送信しながら通信する。こちらもアクションクライアントとアクションサーバで構成され、サーバ側がマスタにノード情報などを登録する。クライアントからの要求に対して結果を返すまでの間、処理中のフィードバックを返す。Progressを返しながら処理する非同期メソッド呼び出しのようなもの。
アクション通信のメッセージの型は、*.actionファイルに定義する。

通信の流れ。

  1. TCPROS接続まではトピックと同じ。
  2. クライアントがアクション目標を送信 (TCPROS)
  3. サーバがフィードバックを送信 (TCPROS)
  4. クライアントがキャンセルした場合はそこで通信終了(TCPROS)
  5. サーバが処理が完了したら結果を送信し通信終了 (TCPROS)

ディレクトリ構成

ROSのアプリケーションプログラムはパッケージ単位で開発される。1つ以上のノードが含まれるか、他パッケージに含まれるノードを実行するための設定ファイルが含まれる。さらに依存ライブラリ、データセット、設定ファイルなど、実行に必要なすべてのファイルが含まれている。パッケージは、共通の目的のために複数のパッケージの集合体としたメタパッケージで管理されることもある。

ROSの本体は、/opt/ros/[Version Name(kinetic or etc)] フォルダにインストールされる。

フォルダ構成。

  • /bin  :実行可能なバイナリファイル
  • /etc  :ROSとcatkin関連の設定ファイル
  • /include:ヘッダーファイル
  • /lib  :ライブラリ
  • /share :ROSパッケージ
  • env.*  :環境設定ファイル
  • setup.* :環境設定ファイル



ユーザ作業フォルダは、例えば~/catkin_ws/など。

フォルダ構成。

  • /build :ビルド関連ファイル
  • /devel :msg、srvのヘッダーファイル、ユーザパッケージライブラリ、実行ファイル
  • /src  :ユーザパッケージ



ユーザパッケージにはパッケージのソースコードを置き、ビルドする。

一般的なフォルダ構成。

  • /include :ヘッダーファイル
  • /launch :launchファイル
  • /node  :rospy用スクリプト
  • /msg  :メッセージファイル
  • /src  :ソースコード
  • /srv  :サービスファイル
  • CMakeLists.txt:ビルド設定ファイル
  • package.xml :パッケージ設定ファイル

ビルド

ROSでは、CMakeをベースにしたcatkinビルドシステムが利用される。ビルドに必要な環境は CMakeList.txt に設定されている。
CMakeList.txt には、実行ファイルの生成、依存パッケージのビルドの優先順位、リンク生成などが設定される。
package.xml には、パッケージ名、著作者、ライセンス、依存パッケージなどが記述されている。