LoginSignup
14

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
    使い方

    $ rosservice type [service]
    

    $ rosservice type clear
    
    std_srvs/Empty
    

    これでclearサービスの型がわかる。

    $ rosservice type spawn
    

    とすると、

    turtlesim/Spawn
    

    となり、Spawnサービスの型がわかる。

    rossrv show
    例えば、Spawnの型の詳細が見たいとき、

    $ rossrv show /turtlesim/Spawn
    

    を実行すると、

    (入力)
    float32 x
    float32 y
    float32 theta
    string name
    ---
    (出力)
    string name
    

    となり、型の詳細が確認できる。

    また、rosservice typeと組み合わせて、

    $ rosservice type spawn| rossrv show
    

    rosservice call
    使い方

    $ rosservice call [service] [args]
    

    例(引数なし)

    $ rosservice call clear
    

    clearの型が空なので引数は付けない。
    これを実行すると、turtlesim_nodeの背景がクリアされる。

    例(引数あり)
    spawnサービスは、与えられた位置と向きに新しいturtleを誕生させる。名前フィールドは任意。

    $ rosservice call spawn 2 2 0.2 ""
    

    出力は、

    name: turtle2
    

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

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
14