11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ROS tutorial まとめ2 トピックとサービス

Last updated at Posted at 2015-07-08

#ROSまとめ2

##1.ROSの基本単位##

  • ノード
    rosにおけるソフトフェアの1つの単位。ノードを組み合わせてシステムをつくることで、プログラムの再利用性が高まり、ノード単位でのデバックが可能になる。

##2.ROSにおける送受信方式##
ROSにおける送受信方式には、大きく分けて、

  • トピックによる通信
  • サービスによる通信

の2つがある。

  • トピック

    • 一方向のメッセージの送信/受信。
    • 非同期通信なので、必要に応じてデータの送受信が可能。
    • 一度の接続で継続的にメッセージの送受信が可能
    • トピックを提供する**パブリッシャ(publisher)と、トピックを利用するサブスクライバ(subscriber)**の2種類がある。
  • トピックに関するツール
    rqt_graph

    $ rosrun rqt_graph rqt_graph
    

    で、ノードとトピックを可視化。
    これにより、トピックの名前もわかる。

    rostopic -h
    rostopic -hroptopicに存在するサブコマンドを調べることができる。

    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 typerosmsg 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
```

これで、新たしい亀が誕生する。
11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?