C++
ROS
ロボット

ROS講座05 ROStools

環境

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

項目
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic

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

概要

プログラムにはデバッグはつきもので、むしろデバッグの時間のほうが長くなることも多々あります。もちろん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>

これらのコマンドはROSのプログラムが実行されているときに別のターミナルで実行します。つまり以下のような状態になります。

ターミナル1
roslaunch basic_lecture pubsub1.launch
ターミナル2
ROS_COMMAND

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!"
---

例えばcmd_velのlinearのxだけ見たいときはrostopic echo /cmd_vel/linear/xとしたり、pathの0番目のposeを見たいときは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キーで補完されるはずです。

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の一覧が表示されます。

rqt_graph

rosrun rqt_graph rqt_graph

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

コメント

ROSのデバッグとはROSノードとROSトピックが適正が状態になっているかを確認する作業です。ここで何かおかしいところが見つかってからROSノードの中身を調べる作業になります。

目次ページへのリンク

ROS講座の目次へのリンク