LoginSignup
28
21

More than 1 year has passed since last update.

ROS講座05 ROStools

Last updated at Posted at 2018-05-06

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 20.04
ROS Noetic

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

プログラムにはデバッグはつきもので、むしろデバッグの時間のほうが長くなることも多々あります。もちろんROSを使ったプログラムでも同じことです。そのためにROSのためにはデバッグや解析のためのツールが多々あります。

今回紹介するコマンドは、ROSを実行しながら別のターミナルで実行します。今回は例としてROS講座04で使った以下のlaunchファイルを使います。

basic_lecture/launch/pub_sub1.launch
<launch>
  <node name="simple_talker"   pkg="basic_lecture" type="simple_talker" />
  <node name="simple_listener" pkg="basic_lecture" type="simple_listener" output="screen/>
</launch>

rostopic

一番多用するコマンドがrostopicです。rostopicでは名前の通り、ROSの中で流れているtopicを見ることができます。基本的にROSのデバッグはまずこれで行いますし、大体のデバッグはrostopicを見ると解決します。

rostopic list

rostopic listと打つと現在のROSの中で流れているtopicの一覧を見ることができます。以下のrostopic echorostopic pubを見る前にtopic名を調べるときに多用します。

rostopic_listの結果
/chatter
/rosout
/rosout_agg

rostopic echo

topicの中身を見ることができます。例えば/chatterというtopicを見るときは以下のように打ちます。topicの名前は必ず/から始まることに注意しましょう。topicをそのまま表示するので、例えば連続で1秒間に10回送ってくるtopicなら1秒間に10回表示されます。表示を止めたいときはctrl+Cを押します。

/chatterの中身を表示
rostopic echo /chatter
コマンドの結果(以下ずっと流れる)
data: "hello world!"
---
data: "hello world!"
---
data: "hello world!"
---
data: "hello world!"
---

もしtopicを1つだけ見たい場合は以下のように-n 1とつけます。

/chatterの中身を表示
rostopic echo /chatter -n 1
  • 例えばcmd_velのlinearのxだけ見たいときはrostopic echo /chatter/dataとかrostopic echo /cmd_vel/linear/xとします。
  • またpathのposeのような配列の0番目を見たいときはrostopic echo /path/pose[0]のように指定することもできます。

rostopic pub

echoの逆で任意のtopicを送信するのがrostopic pubです。echoに比べると頻度はだいぶ低いのですが、たまにデバッグで必要になるので覚えておきましょう。

/chatterに送信
rostopic pub -1 /chatter std_msgs/String "data: 'hello world!'" 

オプションの-1は1回だけの送信を表します。繰り返し送信したい場合、例えば10Hzで送信したい場合は-r 10とします(止めたいときはctrl+C)。オプションの次の/chatterはROSのtopic名、次のstd_msgs/StringはROSのメッセージの型名です。これらはTabキーを押せば自動で補完されます。次の"data: 'hello world!'"はデータで、ここもTabキーで一部("data: ' '")が補完されます。

rostopic info

rostopic info /chatter 

対象のtopicをpublishしているROSノード、subscribeしているROSノードの一覧を表示します。

rosnode

rosnode list

rosnode list

起動してるROSノードの一覧が表示されます。

rosnode info

rosnode info /talker0 

対象のROSノードがpublish、subscribeしているtopicの一覧が表示されます。

rosmsg

ROSツールのコマンドとしてrosmsgがあります。これはROSトピックの型であるROSメッセージの詳細を見ることのできるコマンドです。

rosmsg list

システム中で登録されているROSメッセージのリストが表示されます。表示量が多いので適宜rosmsg list | grep Stringなどとgrepしましょう。

rosmsg show

特定のmsgの詳細が見れます。rosmsg show std_msgs::Stringのように使います。

rqt_graph

rosrun rqt_graph rqt_graph

ROSノードとROSトピックの送受の関係をGUIで図示します。ROSが動いている時に別のターミナルでrqt_graphを実行すると以下のようなGUIが立ち上がります。丸の中はROSノードで矢印はROSトピックを表します。
rqt_graph.png
上記のような単純なROSなら必要はないですが、複雑になってくると便利です。しかし、あまりにも複雑なROSではこれを見ても仕方がないのでそんなには役に立ちませんが。

コメント

ROSのデバッグとはROSノードとROSトピックが適正な状態になっているかを確認する作業です。実際のデバッグ作業ではまずこれでおかしいところを見つけれその後にROSノードの中身を調べるのが一般的です。

目次ページへのリンク

ROS講座の目次へのリンク

28
21
1

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
28
21