# ROSでよく使用する用語

## 一覧

* [ノード(node)](#node)
* [パッケージ(package)](#package)
* [マスタ(master)](#master)
* [トピック(topic)](#topic)
  * [パブリッシュ(publish)、パブリッシャ(publisher)](#publish)
  * [サブスクライブ(subscribe)、サブスクライバ(subscriber)](#subscribe)
  * [メッセージ(message)](#message)
* [サービス(service)](#service)
* [アクション(action)](#action)

## ノード(node)    <a href="#node" id="node"></a>

目的ごとの最小プロセスの名称です。主にROSではプログラムの一つ一つにノードが設定されており、ノード同士が通信を行うことで目的のシステムを形成します。

## パッケージ(package)    <a href="#package" id="package"></a>

目的に沿ったノードやメッセージ、サービス、アクション等のプログラムがひとまとまりになったものの名称です。

開発は主にパッケージ単位で行われます。

## マスタ(master)    <a href="#master" id="master"></a>

ROSにおいて、ノード同士が通信するための名前の管理を行っているところです。

`roscore`コマンドで起動しているのはマスタになります。このマスタが立ち上がっていないとノード同士が通信することが出来ません。

## トピック(topic)    <a href="#topic" id="topic"></a>

ノード間でやり取りするデータのことです。

相手の状態に関係なく、常にデータを発信しており、不特定多数がデータを受け取ることができます。つまり**1対1通信**だけでなく**1対多数通信**が行えるということです。

![](https://164413620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQj-2xtXRtxfWAIKc7B%2F-LTqwc9hc0wTQRM83oHS%2F-LSZSYPZNZuvVrVGZD9e%2Ftopic.png?generation=1544962607984853\&alt=media)

トピックの配信には「パブリッシャ」、トピックの購読には「サブスクライバ」を使用します。

### パブリッシュ(publish)、パブリッシャ(publisher)    <a href="#publish" id="publish"></a>

パブリッシュとは、「配信」を意味し、トピックの配信を行います。 そのためパブリッシャは「配信者」を意味します。

パブリッシャは常にトピックを配信し続けています。下の図では製造ラインをイメージしています。

![](https://164413620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQj-2xtXRtxfWAIKc7B%2F-LSZRr42Y-fg3C6Yh7Yo%2F-LSZSYPazDLM6YMxk0gg%2Fpublisher.png?generation=1543578734311933\&alt=media)

### サブスクライブ(subscribe)、サブスクライバ(subscriber)    <a href="#subscribe" id="subscribe"></a>

パブリッシャに対し、サブスクライブは「購読」を意味し、トピックの購読を行います。そのためサブスクライバは「購読者」を意味します。

パブリッシャによって配信されたトピックはサブスクライバで購読します。また複数のサブスクライバが同時に同じトピックを購読出来ます。

![](https://164413620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQj-2xtXRtxfWAIKc7B%2F-LSZRr42Y-fg3C6Yh7Yo%2F-LSZSYPcLQHarAKbN64t%2Fsubscriber.png?generation=1543578734614557\&alt=media)

### メッセージ(message)    <a href="#message" id="message"></a>

メッセージは、トピックでデータをやり取りするときに用いる「入れ物」のことです。

データは、メッセージの入れ物の「型」に合わせてあげる必要があり、このメッセージをやり取りすることで、通信を行います。

![](https://164413620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQj-2xtXRtxfWAIKc7B%2F-LSZRr42Y-fg3C6Yh7Yo%2F-LSZSYPeL44kAmCkTDhM%2Fmessage.png?generation=1543578735663887\&alt=media)

## サービス(service)    <a href="#service" id="service"></a>

常に相手の状態に関係なく通信しているトピックに対し、サービスは要求があったときのみ応答します。サービスは要求するクライアントと応答するサーバと言い、クライアント側は応答の成否を知ることができます。

またトピックが**1対多数通信**が可能だったのに対し、サービスは1対1通信になります。 そのためトピックを**非同期通信**とすると、サービスは**同期通信**と言えます。

![](https://164413620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQj-2xtXRtxfWAIKc7B%2F-LSZRr42Y-fg3C6Yh7Yo%2F-LSZSYPgAeG1UlIoOvVA%2Fservice.png?generation=1543578735435870\&alt=media)

トピックではデータの「入れ物」にメッセージを使用しましたが、サービスではサービス用のファイル(`.srv`)を使用します。

## アクション(action)    <a href="#action" id="action"></a>

アクションはサービスと同じように、要求するクライアントと応答するサーバがあります。 しかしトピックやサービスと違う点として、アクションは処理が長く応答するまでの時間がかかる時に使用し、処理の途中結果を受け取ることが出来ます。そのため**1対1の非同期通信**になります。

![](https://164413620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQj-2xtXRtxfWAIKc7B%2F-LSZRr42Y-fg3C6Yh7Yo%2F-LSZSYPivhAtsgvIPAAK%2Faction.png?generation=1543578735218535\&alt=media)

トピックではデータの「入れ物」にメッセージを使用しましたが、アクションではアクション用のファイル(`.action`)を使用します。
