ROS2 用語

ROS2を勉強する中で知った用語のメモです．

# 用語

### - a -

#### action
- 長時間実行されるタスクを対象としたROS2の通信タイプの1つ．
- これらは目標，結果，フィードバックの3つの部分で構成されています．
- actionはtopicとserviceに基づいて構築されています.
- それらの機能はserviceに似ていますが，actionはプリエンプティブです（実行中にキャンセルできます）．
- また，単一の応答を返すserviceとは対照的に，安定したフィードバックを提供します．
- publisher/subscriberモデルと同様のclient/serverモデルを使用します．
- 「action_client」nodeは「action_server」nodeに目標を送信し、「action_server」nodeは目標を確認して、フィードバックと結果のストリームを返します。
- つまりは，クライアント側は非同期送信を行い，サーバーが目標に到達するまでクライアント側は同期受信するフレームワークである．

#### ament
- ROS2 packageのためのビルドツール．

### - c -

#### catkin
- ROS1 packageのためのビルドツール．

#### client
- actionの通信タイプを用いた際のclient/serverモデルで，「action_client」nodeを指す．
-「action_server」nodeを対にもつ．

#### client library
- さまざまな言語のROS APIに必要な共通機能を実装するコアROSクライアントライブラリ（RCL）がある．
- 言語固有のクライアントライブラリの記述が容易になる．
- 主に，rclcpp(= C ++クライアントライブラリ)とrclpy(= Pythonクライアントライブラリ)がある．

#### colcon
- ROS2 packageのためのビルドツールament + ROS1 packageのためのビルドツールcatkinを組み合わせたビルドツール．
- 複数のソフトウェアパッケージの構築，テスト，使用のワークフローを改善するコマンドラインツール．
- プロセスを自動化し，注文を処理し，パッケージを使用するための環境を設定する．
- collective constructionの略．

### - d -

#### DDS(Data Distribution Service)

> - DDS は複雑なコンピュータネットワークに関連したプログラミングを単純化するネットワーキングミドルウェア。
> - ノード間のデータ/イベント/コマンドの送受信を出版-購読型モデルで実装している。
> - 情報を生み出すノード（publisher）は「トピック; topics」を生成し、「サンプル; samples」を出版する。DDS はそのトピックに興味があると宣言した全購読者（subscriber）がサンプルを受け取れるように働く。

- https://ja.wikipedia.org/wiki/Data_Distribution_Service
- ROS1 publish/subscribeに似ているが，DDSはmasterが不要になる．
- OMG標準仕様．

#### discovery
- nodeが相互に通信する方法を決定する自動プロセス．

### - g -

#### gazebo
- 3D物理シミュレーションツール．

### - l -

#### launch
- nodeの集まりの起動を自動化するために作られたコマンドラインツールで，記述はpython形式．

#### library
- nodeを共有ライブラリ化したもの．

### - m - 

#### message
- topicをsubscribeまたはpublishするときに使用されるROSデータ型．

### - n -  

#### node
- ROS2のサービスとして，publisher/subscriber，server/client，parameterなどの機能を提供するもの．
- ROS2ではnodeをクラス化することで，1つのターゲットで複数のノードの実行順を制御可能．

### - o - 
#### OMG(Object Management Group)
- [オブジェクト指向の標準化団体](https://www.omg.org/)．

#### overlay
- ローカルワークスペースは，既存のROS 2のインストールの上に乗っているのでoverlayと呼ばれる．
- underlayとは別に，overlayのpackageを変更および再構築できる．
- overlayはunderlayよりも優先される．
- 一般に，すべてのpackageを同じworkspaceに配置するのではなく，少数のpackageで反復する予定がある場合は，overlayを使用することがオススメ．

### - p -

#### package
- 関係があるターゲットとライブラリを集めたもの．
- ROS2コードのコンテナと見なせる．
- コードをインストールしたり，他の人と共有する場合の単位となる．
- packageを使用すると，ROS2のタスクをリリースし，他の人が簡単にビルドして使用できるようになる．
- ROS2でのpackage作成は，ビルドシステムとしてamentを使用し，ビルドツールとしてcolconを使用すること．

#### parameter
- nodeの構成値です．parameterはnode設定と考えることができます．
- nodeは，整数・浮動小数点数・ブール値・文字列・リストとしてparameterを格納できます．
- ROS2では，各nodeは独自のparameterを維持します．
- すべてのparameterは動的に再構成可能で，ROS2 serviceから構築される．

#### project
- 関係があるターゲットとライブラリを集めたもの．

#### publisher
- topicの通信タイプを用いた際のpublisher/subscriberモデルで，publisher_nodeを指す．
- subscriber_nodeを対にもつ．

### - r -

#### rclcpp
- C++用クライアントライブラリ．

#### rclpy
- Python用クライアントライブラリ．

#### remapping
- 再マッピングにより，ノード名，トピック名，サービス名などのデフォルトのノードプロパティをカスタム値に再割り当てできる．

#### ros1bridge
- ROS1とROS2のnode間のtopicを橋渡しすることで，共存させる機能を持つノードである．

#### ros2 graph
- 一度に一緒にデータを処理するROS2の要素のネットワーク．すべての実行可能ファイルとそれらの接続が含まれた視覚的マップ．

#### rosbag
- **要加筆・修正**

#### rosdep
- **要加筆・修正**

#### rosidl
- **要加筆・修正**
- rosidl APIは，さまざまな言語のメッセージによって生成されるコードの定義とともに，静的関数と型に関連するいくつかのメッセージで構成される．
- APIで指定された，生成されたメッセージコードは言語固有ですが，生成されたコードを他の言語で再利用する場合としない場合がある．
- APIで指定された，生成されたメッセージコードには，メッセージデータ構造，構築，破棄などの機能が含まれる．
- APIは，メッセージタイプのタイプサポート構造を取得する方法も実装します。これは，メッセージタイプのtopicをpublishまたはsubscribeするときに使用される．


#### rqt
- ROS2の要素を操作するためのGUIツール．rqtで実行されるすべてのことはコマンドラインで実行できる．
- Qtベースのデバッグツールの立ち位置．

#### rqt_console
- ROS2でログメッセージをイントロスペクトするために使用されるGUIツール．
- 通常，ログメッセージは端末に表示されます．rqt_consoleを使用すると，これらのメッセージを長期にわたって収集し，それらを詳細に整理して表示し，フィルタリングし，保存し，保存されたファイルを再ロードして別の時間にイントロスペクトすることができます．

#### rviz
- 可視化ツール．

### - s -

#### server
- actionの通信タイプを用いた際のclient/serverモデルで，「action_server」nodeを指す．  
- 「action_client」nodeを対にもつ．

#### service
- ROSグラフ上のnodeのもう1つの通信方法です．
- serviceは，topicのpublisher/subscriberモデルではなく，コールアンドレスポンスモデルに基づいています．
- topicを使用すると，nodeはデータストリームをsubscribeして継続的な更新を取得できますが，serviceは，clientによって明示的に呼び出された場合にのみデータを提供します．
- serviceがnodeに情報を渡すのはそのnodeが具体的に要求した場合のみであり，（連続ストリームではなく）要求ごとに1回だけ行います．
- 通常は継続的な呼び出しにサービスを使用したくありません．継続的な情報伝達にはtopicやactionがより適しています．
- nodeがserviceを使用して通信する場合，**データの要求を送信するnodeはclient node**と呼ばれ，**要求に応答するのはservice node**と呼ばれる．リクエストとレスポンスの構造は`〜.srv`ファイルによって決定される．

#### service call
- serviceを呼び出す方法．

#### subscriber
- topicの通信タイプを用いた際のpublisher/subscriberモデルで，subscriber_nodeを指す．
- publisher_nodeを対にもつ．


### - t -
#### target
- クラス化したnodeを組み込み，実行可能にしたもの

#### topic
- nodeがメッセージを交換するためのバスとして機能するROSグラフの重要な要素であり，トピックはデータがノード間，つまりシステムの異なる部分間を移動する重要な方法の1つ．

#### turtlesim
- ROS2を学習するための軽量のシミュレーター．ROS2が最も基本的なレベルで何をするのか，実際のロボットまたはロボットシミュレーションで後で何をするのかについてのアイデアを提供する．

### - u - 

#### underlay
- コアROS2のworkspaceはunderlayと呼ばれる．
    - ただし，underlayは必ずしもメインのROS 2インストールである必要はないことに注意．
- サンプルパッケージに必要なビルドの依存関係をworkspaceに提供する、既存のROS2インストールのための環境を用意する．
    - バイナリインストールまたはソースインストールによって提供されるsetupスクリプトをsourceすることで実現する．
    - この環境をunderlayと呼ぶ．
- overlayはunderlayよりも優先される．

### - w -
#### workspace
- ライブラリを集めたトップディレクトリ．

<!-- ココまで用語説明 -->

# 参考サイト
- https://index.ros.org/doc/ros2/
- http://docs.ros2.org/latest/developer_overview.html
- https://www.slideshare.net/takasehideki/ros-178724750

# 更新履歴
2020.5.4  overlayとunderlayの記載を訂正．
2020.5.1  colconの記載を訂正．
2020.4.30 Init.