ROSで特定のトピック・特定の内容のみを表示する

ROSで特定のトピックの特定の成分のみを表示したいときに、便利なコマンドがあったのでメモしておきます。

例えば、GNSS(Global Navigation Satellite System,日本ではGPSとして知れ渡っている)のデータのうち、緯度、経度の値のみを取り出したい時や、ロボット姿勢(geometry_msgs::PoseStamped)のx,y座標のみを取り出して、csvファイルに保存するときなどに特定の成分のみを抽出できたら便利だと思います。

 

bagファイルから特定のトピックを表示する

特定のトピックを表示するために、まずbagファイルを用意します。

rostopicコマンドのオプションを指定することでトピックの特定の内容を表示できるようになります。

コマンドのサンプルは以下のようになります。
このコマンドで、コンソール上に内容を表示することができます。

$ rostopic echo -b XXXXXX.bag -p /<topic_name>

-b オプションで使用するbagファイルを指定します。
XXXXXX.bagのところには、使用したいbagファイルを記述します。

-p オプションで表示したい特定のトピックを指定します。

 

例えば、ロボットの速度指令値を表す/cmd_velトピック(geometry_msgs::Twist)を表示したい場合、以下のようになります。

$ rostopic echo -b XXXXXX.bag -p /cmd_vel

トピックが階層構造になっている場合には、/(スラッシュ)で区切ることでその内容を表示することができます。

例えば、/cmd_velの中の並進速度のx成分のみを取り出したい場合は、以下のようになります。

$ rostopic echo -b XXXXXX.bag -p /cmd_vel/linear/x

 

csvファイルに書き出す

このようにして表示されたデータの中身はカンマ区切り形式となっているので、このデータをcsvファイルに書き出して、エクセル等で表示することで、データの中身を可視化できたりもします。

例えば、/cmd_velの中の並進速度をcsvファイルに書き出す場合。

$ rostopic echo -b XXXXXX.bag -p /cmd_vel/linear > output_file.csv

このようになります。

後はこのoutput_file.csvをエクセルに食わせるなど、煮るなり焼くなりしてください。

 

以上、bagファイルから特定のトピックを表示する方法についてでした。