#ROSまとめ2
##1.ROSの基本単位##
-
ノード
rosにおけるソフトフェアの1つの単位。ノードを組み合わせてシステムをつくることで、プログラムの再利用性が高まり、ノード単位でのデバックが可能になる。
##2.ROSにおける送受信方式##
ROSにおける送受信方式には、大きく分けて、
- トピックによる通信
- サービスによる通信
の2つがある。
-
トピック
- 一方向のメッセージの送信/受信。
- 非同期通信なので、必要に応じてデータの送受信が可能。
- 一度の接続で継続的にメッセージの送受信が可能。
- トピックを提供する**パブリッシャ(publisher)と、トピックを利用するサブスクライバ(subscriber)**の2種類がある。
-
トピックに関するツール
rqt_graph$ rosrun rqt_graph rqt_graph
で、ノードとトピックを可視化。
これにより、トピックの名前もわかる。rostopic -h
rostopic -h
でroptopic
に存在するサブコマンドを調べることができる。rostopic echo
rostpic echo
は、トピックから配信されているデータを表示する。使い方
$ rostopic echo [topic]
topic list
rostopic list
は、現在購読・配信されている全トピックのリストを返す。rostopic list -h
で引数を検索。
verboseオプションで、起動しているトピックとその型についての詳細なリストを表示。$ rostopic list -v
rostopic type
配信されている全トピックのメッセージ型を返す。使い方
$ rostopic type [topic]
たとえば、turtlesimのノードに関して、
$ rostpic type /turtle1/cmd_vel
とすると、
geometry_msgs/Twist
と表示され、
$ rosmsg show geometry_ms/Twist
を実行すると、turtlesimが要求するメッセージの型がわかる。
rostopic type
とrosmsg show
を結合して使うことも可能。例
$ rostopic type /turtle1/cmd_vel | rosmsg show
rostopic pub
rostopic pub
は現在立ち上がっているトピックへデータを転送する。使い方
$ rostopic pub [topic] [msg_type] [args]
例
$ rostoic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
rostopic pub
: あたえられたトピックへメッセージを配信する。
-1
: このオプションでrostopicは1つのメッセージを配信したあとに終了。
/turtle1/cmd_vel
: 配信するトピックの名前。
geometry_msgs/Twist
: メッセージの型。
--
: これは後の引数を表示させなくするためのオプション。定期的に動かすためには、以下。
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
-r
コマンドで1Hzごとに定期的にコマンドを使用できる。rostopic hz
配信されたデータの更新頻度を調べます。使い方
$ rostopic hz [topic]
例
$ rostopic hz /turtle1/pose
-
サービス
- 双方向のメッセージの要求/応答。
- 同期式通信のため、要求があった時のみデータを送受信。
- 一回限りのメッセージ送信(サービスの要求と応答が完了すると、ノード間の接続は切断)。
- 要求があった時に応答するサービスサーバと、要求して応答を受信するサービスクライアントの2種類が存在する。
-
サービスに関するツール
rosservice -h
ヘルプ
rosservice list
ノードが提供しているサービスを表示$ rosservice list
/clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level
rosservice type
使い方
```bash
$ rosservice type [service]
```
例
```bash
$ rosservice type clear
```
```bash
std_srvs/Empty
```
これでclearサービスの型がわかる。
```bash
$ rosservice type spawn
```
とすると、
```bash
turtlesim/Spawn
```
となり、Spawnサービスの型がわかる。
**rossrv show**
例えば、Spawnの型の詳細が見たいとき、
```bash
$ rossrv show /turtlesim/Spawn
```
を実行すると、
```bash
(入力)
float32 x
float32 y
float32 theta
string name
(出力)
string name
```
となり、型の詳細が確認できる。
また、`rosservice type`と組み合わせて、
```bash
$ rosservice type spawn| rossrv show
```
**rosservice call**
使い方
```bash
$ rosservice call [service] [args]
```
例(引数なし)
```bash
$ rosservice call clear
```
clearの型が空なので引数は付けない。
これを実行すると、`turtlesim_node`の背景がクリアされる。
例(引数あり)
spawnサービスは、与えられた位置と向きに新しいturtleを誕生させる。名前フィールドは任意。
```bash
$ rosservice call spawn 2 2 0.2 ""
```
出力は、
```bash
name: turtle2
```
これで、新たしい亀が誕生する。