概要
この記事では、ROS1の基本となる概念について記載します。とても重要な部分で、この概念が頭にないとなかなかROS1の解説を見ても何を言っているのかわからなくなるので、非常に重要です。
(勉強中なので、少しずつ更新していきます。)
1つ1つ解説していきます。
ノード
まずROSの概念として最も重要なのがノードです。
ノードというのは、ROS内で実行される最小のプログラムです。
ROSを使って、サーボを動かしたり、センサから情報を取得したりすると思います。これらの機能をノードという単位でまとめていきます。
単体のノードだけではシステムが成り立たないため、これらのノードを協調させて動作させる必要があります。例えば、センサの情報をもとに、サーボを動かすなどする場合は、センサの情報を扱うノードと、サーボを動かすノードを協調させる必要があります。このようなノード間の協調を行うために、メッセージを送りあう必要があります。
このメッセージには以下の方式があります。一つ一つ見ていきます。
- トピック
- サービス
- アクション
トピック
トピックはROSで最もよく使われる通信方式です。
メッセージを送信したいノードは、トピックに対してメッセージを送信します。
メッセージを受信したいノードは、トピックからメッセージを取得します。
メッセージを送信するノードをパブリッシャと呼び、パブリッシャは送信相手の状態に関係なく送信することができます。
メッセージを受信するノードをサブスクライバと呼び、サブスクライバは送信元が何であるのかを意識しないでメッセージを受信することができます。
トピックを使うことで、1対1の非同期通信だけではなく、1対多の非同期通信を行うことができます。
このようなパブリッシャとサブスクライバがトピックを通じてメッセージをやり取りすることを, Publish/Subscribe方式やpub/subメッセージングモデルといったりします。これは、ROSに限定したものではなく、AWSのSNSや、IoTのMQTTのやり取りで使われたりと様々なところで使われている方法になります。
サービス
サービスとは、クライアント側が要求を送り、サーバ側でリクエストに応じた処理を実施したのち応答を返す形になります。トピックを使用してのやりとりは、非同期通信でしたがこちらは同期しての通信方法になります。
常にやり取りするわけではなく、クライアント側がサービス要求を行い、サーバ側で処理を行ったのち、応答を返した後に切断となります。そのためネットワーク負荷は小さくなります。
アクション
アクションはサービスと似ており、クライアント側が要求を送り、サーバ側でリクエストに応じた処理を実施したのち応答を返す部分は同様です。
違う部分は、中間のフィードバックがあるかないかの違いです。リクエスト中に中間的な結果を取得する必要がある場合はアクションを使用します。
パラメータ
ROSはパラメータと呼ばれる、Key-Value形式の設定情報を保持する仕組みがあります。
このパラメータを使用することでノード間で設定情報の共有を行うことができます。アクセス速度はそこまで高速ではないため、更新が比較的頻繁ではない情報に使用します。
最後に
ROSの基本的な概念部分の解説を行いました。次は実際にROSを使用しながらその概念がどのようなものなのかを記載していこうと思います。
コメント