C++
ROS
ロボット

ROS講座05 ROStools

概要

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

gitリポジトリにこの講座に出てくるプログラムが載っています。

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 simple1.launch
ターミナル2
ROS_COMMAND

rostopic

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

rostopic list

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

rostopic echo

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

/chatterの中身を表示
rostopic echo /chatter

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ノードの一覧を表示します。

rqt_graph

rosrun rqt_graph rqt_graph

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

rosnode

rosnode list

rosnode list

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

rosnode info

rosnode info /talker0 

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

目次ページへのリンク

ROS講座の目次へのリンク