環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 20.04 |
ROS | Noetic |
インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。
概要
プログラムにはデバッグはつきもので、むしろデバッグの時間のほうが長くなることも多々あります。もちろんROSを使ったプログラムでも同じことです。そのためにROSのためにはデバッグや解析のためのツールが多々あります。
今回紹介するコマンドは、ROSを実行しながら別のターミナルで実行します。今回は例としてROS講座04で使った以下の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 echo
やrostopic pub
を見る前にtopic名を調べるときに多用します。
/chatter
/rosout
/rosout_agg
rostopic echo
topicの中身を見ることができます。例えば/chatterというtopicを見るときは以下のように打ちます。topicの名前は必ず/
から始まることに注意しましょう。topicをそのまま表示するので、例えば連続で1秒間に10回送ってくるtopicなら1秒間に10回表示されます。表示を止めたいときはctrl+C
を押します。
rostopic echo /chatter
data: "hello world!"
---
data: "hello world!"
---
data: "hello world!"
---
data: "hello world!"
---
もしtopicを1つだけ見たい場合は以下のように-n 1
とつけます。
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
に比べると頻度はだいぶ低いのですが、たまにデバッグで必要になるので覚えておきましょう。
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トピックを表します。
上記のような単純なROSなら必要はないですが、複雑になってくると便利です。しかし、あまりにも複雑なROSではこれを見ても仕方がないのでそんなには役に立ちませんが。
コメント
ROSのデバッグとはROSノードとROSトピックが適正な状態になっているかを確認する作業です。実際のデバッグ作業ではまずこれでおかしいところを見つけれその後にROSノードの中身を調べるのが一般的です。