ROS2 コマンド

ROS2を勉強する中で知ったコマンドのメモです．

<!-- # コマンド -->
## action
#### ROSグラフのすべてのactionを表示
```
ros2 action list
```
- `-t`オプションは，actionのタイプも表示する．

#### actionのclient/server情報を表示
```
ros2 action info <action_name>
```
#### actionの実行
```
ros2 action send_goal <action_name> <action_type> <values>
```
- `<values>`はYAML形式．
- 例) `ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {'theta: 1.57'}`
- `--feedback`オプションをコマンドの最後に追加すると，目標完了まで現在の状態をフィードバックとして受け取り続ける．

## interface
#### topicのインターフェイスの表示
```
ros2 interface show <topic type>.msg
```
`topic type`は，`ros2 topic list -t`で分かる．

#### serviceのインターフェイスの表示
```
ros2 interface show <type_name>.srv
```
`service name`および，それらの`type_name`は，`ros2 service list -t`で分かる．

#### actionのインターフェイスの表示
```
ros2 interface show <action_type>.action
```
`action_name`および，それら`action_type`は，`ros action list -t`で分かる．

## launch

#### launchの方法
```
ros2 launch <launchファイル>
```
ここで，launchファイルはpython形式で書かれた`〜.launch.py`ファイル．

## node
#### node名の検索
```
ros2 node list
```
そのノードと対話するsubscriber，publisher，service、およびaction（ROS graph接続）のリストを返します．

#### nodeの詳細情報の検索
```
ros2 node info <node_name>
```

## pkg

#### packageの作成
```
ros2 pkg create
```

## param

#### nodeに属するparameterを表示
```
ros2 param list
```

#### parameterの現在値を取得
```
ros2 param get <node_name> <parameter_name>
```

#### 実行時にparameterの値を変更
```
ros2 param set <node_name> <parameter_name> <value>
```

#### nodeの現在のパラメータ値をダンプする
```
ros2 param dump <node_name>
```
nodeの現在のparameter値をすべてファイルに「ダンプ」して後で保存する．


## rqt

#### ROS2 graphの表示
```
rqt_graph
```
rqtを開き，[ プラグイン] > [ イントロスペクション] > [ ノードグラフ]を選択して，rqt_graphを開くこともできます．

## run

#### packageから実行可能ファイルの実行
```
ros2 run <package_name> <executable_name>
```

#### parameterをファイルからロードする．
```
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
```
フラグ`--ros-args`が追加され，`--params-file`オプションの後にロードするファイルが続く．


## service

#### システムで現在アクティブなすべてのserviceのリストを表示
```
ros2 service list
```
- service名がリスト表示される．
- `-t`オプションは，すべてのアクティブなサービスのタイプを確認する．

#### serviceのタイプを表示
```
ros2 service type <service_name>
```
- サービスの要求と応答の2つのデータがどのように構造化されているかを記述するタイプがある．
- `Empty`タイプは，サービスコールが要求を行う際にデータを送信していないし，応答を受信した場合にはデータを受信しないことを意味する．

#### 特定のタイプのすべてのserviceを検索
```
ros2 service find <type_name>
```
- 例) `ros2 service find std_srvs/srv/Empty`
    - → `/clear, /reset`

#### serviceの呼び出し
```
ros2 service call <service_name> <service_type> <arguments>
```
- 例1) `ros2 service call /clear std_srvs/srv/Empty`
- 例2) `ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"`

## source

#### ROS2環境の調達
```
source /opt/ros/<distro>/setup.bash
```
ROS2コマンドにアクセスするには，新しいシェルを開くたびにこのコマンドを実行する必要がある．


## topic

#### システムで現在アクティブなすべてのtopicのリストを表示
```
ros2 topic list
```
`ros2 topic list -t`は同じくtopicのリストが返されますが，今回はtopicタイプが括弧の後に追加される．

#### topicが公開しているデータを表示
```
ros2 topic echo <topic_name>
```

#### topicが送受信されている数を表示
```
ros2 topic info <topic_name>
```

#### コマンドラインから直接topicにデータをpubする．
```
ros2 topic pub <topic_name> <msg_type> '<args>'
```
- この引数`args`は，YAML構文で入力する必要があることに注意してください．
- `--rate 1`オプションは，コマンドを1 Hzの安定したストリームで発行するように指示します．
- `--once`オプションは，「1つのメッセージをパブリッシュしてから終了する」ことを意味する．

#### topicがpublishされる周期を表示
```
ros2 topic hz <topic name>
```

<!-- ココまでコマンド説明 -->

# 参考サイト
https://index.ros.org/doc/ros2/

# 更新履歴
2020.4.30 Init.