目次
- 目次
- はじめに
- JSK可視化ライブラリをまとめたリポジトリを作った
- 可視化用rvizプラグインの使い方
- 可視化用rqtプラグインの使い方
- トピック関連ツール
- 参考資料
- MyEnigma Supporters
はじめに
東京大学情報システム工学研究室は、
日本を代表するロボット系の研究室です.
また、いち早くROSを研究で使用し始め、
様々なROSソフトウェアをGithub上で公開しています。
(ROSに関しては、末尾の参考文献参照)
その中でも素晴らしいのが可視化ライブラリです。
rvizのプラグインやrqtのプラグインをいくつも公開しており、
下記の図のように、かっこいい可視化を実現してくれます。
(図は公式ドキュメントから引用)
今回、この可視化ライブラリを使ってみたので、
その方法についてメモ書きしておきたいと思います。
JSK可視化ライブラリをまとめたリポジトリを作った
上記のJSKの可視化ライブラリを使おうとした所、
他のROSパッケージに結構依存しているようだったので、
いくつかの可視化ツールに必要なものだけをForkして、
単体で利用できる一つのリポジトリを作りました。
いくつかの可視化ツールはコンパイルできなかったですが、
主要なツールはこのリポジトリをソフトをチェックアウトし、
git clone https://github.com/AtsushiSakai/jsk_visualization_packages.git
catkin_makeするだけで使えるようになるはずです。
ちなみにROSのバージョンはindigoです。
可視化用rvizプラグインの使い方
公式のドキュメントはこちらです
jsk_visualization — jsk_visualization 2.1.3 documentation
jsk_rviz_plugins — jsk_visualization 1.0 documentation
いくつか面白かったものツールを下記で紹介します。
OverlayText
OverlayTextは、rivzの正面に文字を描画するプラグインです。
jsk_rviz_pluginsのカスタムメッセージである、
jsk_rviz_plugins/OverlayTextに描画したい文字などを書き込んで、
送信すると表示してくれます。
jsk_rviz_plugins/OverlayText Documentation
バックグラウンドや文字の色を変えたり、
テキストの位置や、折り返しの位置、
フォントなども変えることができるようです。
上記のソフトをビルドしていれば、
下記のコマンドで可視化サンプルを見ることができます。
roslaunch jsk_rviz_plugins overlay_sample.launch
Plotter2D
Plotter2Dは、std_msg/float32のデータをグラフと一緒に描画してくれる
プラグインです。
電圧値や、速度など、一次元の値の時系列変化を確認したい時に便利です。
こちらのプラグインは、
様々な設定をrvizのDisplay Panelで設定することができます。
グラフの位置、
トピック名の有無、
グラフの線の太さ、
グラフの囲い線の有無など、
様々な設定をすることができます。
また、auto color changeにチェックを入れると、
自動でその値が低くなると、グラフを赤くしたりしてくれます。
上記のソフトをビルドしていれば、
下記のコマンドで可視化サンプルを見ることができます。
roslaunch jsk_rviz_plugins overlay_sample.launch
PieChart
PieChartは先程のPlotter2Dと同様に、
std_msg/float32のデータを円グラフとして表示してくれる
rvizプラグインです。
下記のように
最大値と最小値をDisplay Panelで設定することで、
その値に即した円グラフを描画してくれます。
Plotter2Dと同様に、auto color changeを設定することで、
値の変化にあわせてグラフを色を変えることができます。
上記のソフトをビルドしていれば、
下記のコマンドで可視化サンプルを見ることができます。
roslaunch jsk_rviz_plugins overlay_sample.launch
Bounding Box
Bounding Boxはrvizの三次元空間上に直方体を描画する
rivzプラグインです。
jsk_recoginition_msg/BoundingBoxに直方体の位置と、
大きさを指定すると、その直方体が描画されます。
jsk_recognition/BoundingBox.msg at master · jsk-ros-pkg/jsk_recognition
このBounding Boxを複数格納したBoundingBox Arrayもあります。
jsk_recognition/BoundingBoxArray.msg at master · jsk-ros-pkg/jsk_recognition
SimpleOccupancyGrid
SimpleOccupancyGridは、
複数枚のグリッドマップを表示するrvizプラグインです。
jsk_recognition_msgs/SimpleOccupancyGrid.msgの
アレイメッセージを送信することで、
複数のグリッドマップを描画することができます。
それぞれのグリッドマップの原点は、
平面の方程式の4つのパラメータを
coefficientsベクトルに入れることで、
様々な方向のグリッドマップを描画することができます。
また、auto colorにチェックを入れると、
それぞれのグリッドマップを色分けすることができます。
加えて、このグリッドマップはそれぞれx,y,zで与えることになり、
zは先ほどの平面の方程式を基準とした高さとして
グリッドが描画されるので注意しましょう。
上記の可視化はsampleフォルダ内で
下記のスクリプトを実行することで
サンプルデータを描画することができます。
python sparse_occupancy_grid_sample.py
OverlayMenu
OverlayMenuは上記の図のように、
rvizの中央にメニューを表示することができる
rvizプラグインです。
下記のメニューで、
メニューのリストと、
選択したメニューのインデックスを渡すことで
メニューを表示することができます。
jsk_visualization/OverlayMenu.msg at master · jsk-ros-pkg/jsk_visualization
Serviceなどで何かモードを選択したりした時に、
このプラグインを使うと、かっこいいかもしれませんね。
上記の可視化はsampleフォルダ内で
下記のスクリプトを実行することで
サンプルデータを描画することができます。
python overlay_menu_sample.py
PolygonArray
PolygonArrayは複数のポリゴンデータを表示する
rvizプラグインです。
下記のような、geometry_msgs/PolygonStampedで
構成されたデータをpublishすることで、
複数のポリゴンのデータを可視化することができます。
jsk_recognition/PolygonArray.msg at master · jsk-ros-pkg/jsk_recognition
geometry_msgs/PolygonStamped Documentation
ポリゴンデータ以外にも、数値のラベルや、
それぞれのポリゴンの尤度などを設定することができます。
DisplayPanelには下記のような様々な設定があります。
coloringがAutoの場合は、
それぞれのポリゴンに個別の色が設定されます。
only borderがONの場合はポリゴンの境界だけが、線で描画されます。
show normalがONの場合は、
ポリゴンの法線ベクトルが矢印で表示されます。
normal lengthで矢印の長さも指定できます。
Pictogram, Pictogram Array
PictogramとPictogram Arrayは、
一つ、または複数のピクトグラムを描画するrvizプラグインです。
下記のメッセージにをpublishすると、
対応したピクトグラムを表示してくれます。
jsk_visualization/Pictogram.msg at master · jsk-ros-pkg/jsk_visualization
使用できるピクトグラムは下記のリンク先にあるものです。
上記のピクトグラムの名前を先ほどのメッセージの
characterの部分に入れ、
mode=PICTOGRAM_MODE
るとピクトグラムを表示してくれます。
一方、
mode=STRING_MODE
とすると、characterに入れた文字が
描画されます。
また、actionに
JUMPやROTATE_Zなどを設定することで、
ピクトグラムを自由自在に動かすこともできます。
FootStep
FootStepはヒューマノイドロボット用の
二足の走行軌跡を可視化するrvizライブラリです。
下記のFootstep.msgとFootstepArray.msgに
二足の位置データを格納し、Publishすることで、
上記のような足の軌跡を描画することができます。
jsk_common_msgs/Footstep.msg at master · jsk-ros-pkg/jsk_common_msgs
jsk_common_msgs/FootstepArray.msg at master · jsk-ros-pkg/jsk_common_msgs
legに右足(RIGHT=2)か、左足(LEFT=1)を入れて、
あとはposeに足の位置を入れればOKです。
footstep_groupに数値ラベルをつけると、
下記のrvizのdisplayパネルでグループ毎に色を付けることもできます。
show_nameのチェックボックスでそれぞれの足を表すRとLの
ラベルも追加することができます。
OverlayDiagnostic
OverlayDiagnositcは、ROSのデフォルトツールの一つである、
diagnosticsのデータをかっこ良く描画するrvizプラグインです。
diagnosticsは主にロボットのハードウェアエラーをまとめて管理するための
ROSのデフォルトツールですが、
このdiagnosticsのメッセージを分かりやすく表示してくれます。
表示するトピックは、下記のDiagnositicArrayに格納し、
publishすることで表示可能になります。
下記のようにDiaplayPanelでDiagnositcArrayのトピック名(Topic)と、
Arrayの中で表示させたいステータス情報(namespace)を指定すると、
diagnosticのステータス(Error, Warn, OK)と、
ステータスメッセージを表示することができます。
また、上記のパネルでステータス表示位置を設定することができます。
ステータス情報が色で表示されたり、
ステータスメッセージが流れるように表示されたりするので
非常にかっこいいです。
Diagnostic_msgを表示するサンプルコードは下記です。
jsk_visualization_packages/jsk_rviz_plugins/samples/diagnostic_example.py
- jsk_visualization_packages/diagnostic_example.py at master · AtsushiSakai/jsk_visualization_packages
Video Capture
Video Captureは名前通り、
rviz画面の動画を簡単にキャプチャすることができるrvizプラグインです。
Display PanelでVideo Captureを選択し、
下記のように、動画ファイルの名前とfpsを設定します。
あとは上記のチェックボックスをオンすれば、
動画の撮影が始まり、チェックボックスをオフすれば撮影が終了します。
すると、rvizを起動したディレクトリにavi形式の動画ファイルが作成されるはずです。
残念ながら、そのaviファイルはそのままクリックしても
ubuntuのデフォルトビデオプレイヤーでは再生できなかったですが、
VLCをインストールし、VLCで開けば冒頭のように動画を再生することができました。
動画の大きさは10秒で200MBほどでした。
可視化用rqtプラグインの使い方
公式ドキュメントは下記です。
rqt_histogram_plot
rqt_histogram_plotはヒストグラムのグラフを動的の描画するrqtプラグインです。
ヒストグラムの一つのビンのデータを表すHistogramWithRangeBinと、
HistogramWithRangeBin.msgをリストにした、
HistogramWithRangeでメッセージを構成し、
HistogramWithRangeをpublishすることで、
そのデータをヒストグラムとして可視化してくれます。
可視化のサンプリングコードは下記です。
jsk_visualization_packages/jsk_rqt_plugins/sample/sample_histogram.launch
rqt_2d_plot
rqt_2d_plotは、2次元のプロットグラフを描画するrqtプラグインです。
デフォルトのrqtプラグインであるPlotは一次元のデータを時系列に描画しますが、
このプラグインは、x-yの二次元のプロットデータを描画できます。
レーザ点の描画や、2つの変数の相関などを
リアルタイムに見たい時に便利だと思います。
jsk_visualization_packages/jsk_recognition_msgs/msg/PlotData.msgに、
x-yのプロットデータを格納して、publishすれば
rqtのplugins->Visualizaiton->Plot2Dを選んでトピック名を表示することで
プロットデータを描画することができます。
可視化のサンプリングコードは下記です。
jsk_visualization_packages/jsk_rqt_plugins/sample_scripts/sample_2d_plot_2.py
トピック関連ツール
上記のパッケージには、
可視化以外便利ツールも含まれています。
本章では、それらのツールについて説明します。
bagファイルのデータをcsvに変換するツール: bag2csv.py
bag2csv.pyは、bagファイルの中にあるデータをcsvファイルに変換するツールです。
rosbag recordでロギングしたbagファイルのトピックデータを簡単にCSVに変換してくれます。
bagファイルのデータを使って、性能のグラフとかを書きたい時に便利ですね。
使い方は、
python bag2csv.py -t /huge/output hoge.bag
と-tの後に出力したいトピック名と、
その後にbagファイルを指定すれば、
Convertedbag.csvという変換されたファイルが冒頭のスクリーンショットのようにできるはずです。
bagファイルからグラフを生成するツール: bag_plotter.py
bag_plotter.pyはbagファイルから
直接グラフを作成するツールです。
yamlファイルにグラフの設定を書いて、
そのyamlファイルとbagファイルを読みこませることで、
データをプロットすることができます。
$ python bag_plotter.py bag_plotter.yaml sampledata.bag
設定のyamlファイルは下記のように設定できます。
グラフのタイトルとトピック名を指定するとグラフが表示されます。
また配列形式のデータも表示できるのが非常に便利です。
# sample config yaml file for bag_plotter global: layout: vertical plots: - title: "x" topic: [/odom] field: ["pose/pose/position/x"] - title: "y" topic: [/odom] field: ["pose/pose/position/y"]
このツールの詳しい使い方は下記のリンクを参考にすると良いと思います。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。