プログラミングROS ―Pythonによるロボットアプリケーション開発
by Morgan Quigley, Brian Gerkey, William D. Smart, 河田 卓志, 松田 晃一, 福地 正樹, 由谷 哲夫
4章サービス
サービスはROSのノード間でデータを渡すもう1つの方法です。サービスは単なる同期型リモートプロシージャーコールであり、あるノードから別のノードで実行される関数を呼び出すことを実現するものです。この関数の入力と出力の定義は、新しいメッセージ型を定義するのと似たような方法で行います。サーバー(サービスを提供する)側ではサービスリクエストを扱うコールバックを定義し、そのサービスを公開します。クライアント(そのサービスを呼び出す)側ではローカルプロキシーを介してこのサービスにアクセスします。
サービスコールは、たまにしか行う必要がないもので、比較的短い一定の時間内で処理が終わるものに適しています。他のコンピューターに分散させたいような共通の計算はその良い例です。センサーをオンにしたり、カメラで高解像度の写真を撮ったりするといったようなロボットが行う個別の動作もサービスコールで実装したほうがよいものの候補です。
すでにいくつかのサービスがROSのパッケージで定義されていますが、ここでは、自分でサービスを定義し、実装する方法を見ていきましょう。こうすることで、サービスコールの下位メカニズムがある程度わかるようになります。この章では具体的な例として、文字列中の単語数を数えるサービスの作り方を示します。
4.1 サービスを定義する
新しいサービスを作成するための最初のステップは、サービスコールの入力と出力を定義することです。これは、サービス定義ファイルで行います。このファイルは以前に見たメッセージ定義ファイルと似たような構造を持っています。しかしながら、サービスコールには入力と出力の両方があるので、メッセージ定義より少し複雑です。
ここでのサービスの例は、文字列中の単語数を数えるものです。これは、そのサービスへの入力が ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access