読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

東大JSKが公開しているクールなROS可視化ライブラリを使ってみる

目次

はじめに

東京大学情報システム工学研究室は、

日本を代表するロボット系の研究室です.

 

また、いち早くROSを研究で使用し始め、

様々なROSソフトウェアをGithub上で公開しています。

github.com

(ROSに関しては、末尾の参考文献参照)

 

その中でも素晴らしいのが可視化ライブラリです。

rvizのプラグインやrqtのプラグインをいくつも公開しており、

下記の図のように、かっこいい可視化を実現してくれます。

(図は公式ドキュメントから引用)

OverlayText — jsk_visualization 1.0 documentation

Pictogram — jsk_visualization 1.0 documentation

PieChart — jsk_visualization 1.0 documentation

 

今回、この可視化ライブラリを使ってみたので、

その方法についてメモ書きしておきたいと思います。

 

JSK可視化ライブラリをまとめたリポジトリを作った

github.com

 

上記のJSKの可視化ライブラリを使おうとした所、

他のROSパッケージに結構依存しているようだったので、

いくつかの可視化ツールに必要なものだけをForkして、

単体で利用できる一つのリポジトリを作りました。

github.com

 

いくつかの可視化ツールはコンパイルできなかったですが、

主要なツールはこのリポジトリをソフトをチェックアウトし、

git clone https://github.com/AtsushiSakai/jsk_visualization_packages.git

catkin_makeするだけで使えるようになるはずです。

 

ちなみにROSのバージョンはindigoです。

indigo - ROS Wiki

 

可視化用rvizプラグインの使い方

公式のドキュメントはこちらです

jsk_visualization — jsk_visualization 1.0.27 documentation

jsk_rviz_plugins — jsk_visualization 1.0 documentation  

いくつか面白かったものツールを下記で紹介します。

OverlayText

OverlayText — jsk_visualization 1.0 documentation

 

OverlayTextは、rivzの正面に文字を描画するプラグインです。

jsk_rviz_pluginsのカスタムメッセージである、

jsk_rviz_plugins/OverlayTextに描画したい文字などを書き込んで、

送信すると表示してくれます。

jsk_rviz_plugins/OverlayText Documentation

バックグラウンドや文字の色を変えたり、

テキストの位置や、折り返しの位置、

フォントなども変えることができるようです。

 

上記のソフトをビルドしていれば、

下記のコマンドで可視化サンプルを見ることができます。

roslaunch jsk_rviz_plugins overlay_sample.launch

 

Plotter2D

Plotter2D — jsk_visualization 1.0 documentation

Plotter2Dは、std_msg/float32のデータをグラフと一緒に描画してくれる

プラグインです。

電圧値や、速度など、一次元の値の時系列変化を確認したい時に便利です。

こちらのプラグインは、

様々な設定をrvizのDisplay Panelで設定することができます。

f:id:meison_amsl:20151029223043p:plain

グラフの位置、

トピック名の有無、

グラフの線の太さ、

グラフの囲い線の有無など、

様々な設定をすることができます。

また、auto color changeにチェックを入れると、

自動でその値が低くなると、グラフを赤くしたりしてくれます。

 

上記のソフトをビルドしていれば、

下記のコマンドで可視化サンプルを見ることができます。

roslaunch jsk_rviz_plugins overlay_sample.launch

 

PieChart

PieChart — jsk_visualization 1.0 documentation

 

PieChartは先程のPlotter2Dと同様に、

std_msg/float32のデータを円グラフとして表示してくれる

rvizプラグインです。

 

下記のように

最大値と最小値をDisplay Panelで設定することで、

その値に即した円グラフを描画してくれます。

f:id:meison_amsl:20151030214927p:plain

Plotter2Dと同様に、auto color changeを設定することで、

値の変化にあわせてグラフを色を変えることができます。

 

上記のソフトをビルドしていれば、

下記のコマンドで可視化サンプルを見ることができます。

roslaunch jsk_rviz_plugins overlay_sample.launch

  

Bounding Box

f:id:meison_amsl:20151030215557p:plain

 

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

f:id:meison_amsl:20151031205718p:plain

 

SimpleOccupancyGridは、

複数枚のグリッドマップを表示するrvizプラグインです。

 

jsk_recognition_msgs/SimpleOccupancyGrid.msgの

アレイメッセージを送信することで、

複数のグリッドマップを描画することができます。

それぞれのグリッドマップの原点は、

平面の方程式の4つのパラメータを

coefficientsベクトルに入れることで、

様々な方向のグリッドマップを描画することができます。

 

また、auto colorにチェックを入れると、

それぞれのグリッドマップを色分けすることができます。

 

加えて、このグリッドマップはそれぞれx,y,zで与えることになり、

zは先ほどの平面の方程式を基準とした高さとして

グリッドが描画されるので注意しましょう。

f:id:meison_amsl:20151031210737p:plain

 

上記の可視化はsampleフォルダ内で

下記のスクリプトを実行することで

サンプルデータを描画することができます。

python sparse_occupancy_grid_sample.py

 

OverlayMenu

f:id:meison_amsl:20151031213013p:plain

 

OverlayMenuは上記の図のように、

rvizの中央にメニューを表示することができる

rvizプラグインです。

 

下記のメニューで、

メニューのリストと、

選択したメニューのインデックスを渡すことで

メニューを表示することができます。

jsk_visualization/OverlayMenu.msg at master · jsk-ros-pkg/jsk_visualization

Serviceなどで何かモードを選択したりした時に、

このプラグインを使うと、かっこいいかもしれませんね。

 

上記の可視化はsampleフォルダ内で

下記のスクリプトを実行することで

サンプルデータを描画することができます。

python overlay_menu_sample.py

 

PolygonArray

f:id:meison_amsl:20151101085348p:plain

PolygonArray — jsk_visualization 1.0 documentation

 

PolygonArrayは複数のポリゴンデータを表示する

rvizプラグインです。

 

下記のような、geometry_msgs/PolygonStampedで

構成されたデータをpublishすることで、

複数のポリゴンのデータを可視化することができます。

jsk_recognition/PolygonArray.msg at master · jsk-ros-pkg/jsk_recognition

geometry_msgs/PolygonStamped Documentation

ポリゴンデータ以外にも、数値のラベルや、

それぞれのポリゴンの尤度などを設定することができます。

 

DisplayPanelには下記のような様々な設定があります。

f:id:meison_amsl:20151101085405p:plain

coloringがAutoの場合は、

それぞれのポリゴンに個別の色が設定されます。

only borderがONの場合はポリゴンの境界だけが、線で描画されます。

show normalがONの場合は、

ポリゴンの法線ベクトルが矢印で表示されます。

normal lengthで矢印の長さも指定できます。

 

Pictogram, Pictogram Array

f:id:meison_amsl:20151101212403p:plain

f:id:meison_amsl:20151101212415p:plain

PictogramとPictogram Arrayは、

一つ、または複数のピクトグラムを描画するrvizプラグインです。

 

下記のメッセージにをpublishすると、

対応したピクトグラムを表示してくれます。

jsk_visualization/Pictogram.msg at master · jsk-ros-pkg/jsk_visualization

 

使用できるピクトグラムは下記のリンク先にあるものです。

上記のピクトグラムの名前を先ほどのメッセージの

characterの部分に入れ、

mode=PICTOGRAM_MODE

るとピクトグラムを表示してくれます。

 

一方、

mode=STRING_MODE

とすると、characterに入れた文字が

描画されます。

f:id:meison_amsl:20151101214924p:plain

 

また、actionに

JUMPやROTATE_Zなどを設定することで、

ピクトグラムを自由自在に動かすこともできます。

 

FootStep

f:id:meison_amsl:20151109213206p:plain

 

FootStepはヒューマノイドロボット用の

二足の走行軌跡を可視化するrvizライブラリです。

 

下記のFootstep.msgとFootstepArray.msgに

二足の位置データを格納し、Publishすることで、

上記のような足の軌跡を描画することができます。

legに右足(RIGHT=2)か、左足(LEFT=1)を入れて、

あとはposeに足の位置を入れればOKです。

footstep_groupに数値ラベルをつけると、

下記のrvizのdisplayパネルでグループ毎に色を付けることもできます。

show_nameのチェックボックスでそれぞれの足を表すRとLの

ラベルも追加することができます。

f:id:meison_amsl:20151109214207p:plain

 

OverlayDiagnostic

f:id:meison_amsl:20151113143212p:plain

 

OverlayDiagnositcは、ROSのデフォルトツールの一つである、

diagnosticsのデータをかっこ良く描画するrvizプラグインです。

 

diagnosticsは主にロボットのハードウェアエラーをまとめて管理するための

ROSのデフォルトツールですが、

このdiagnosticsのメッセージを分かりやすく表示してくれます。

表示するトピックは、下記のDiagnositicArrayに格納し、

publishすることで表示可能になります。

 

下記のようにDiaplayPanelでDiagnositcArrayのトピック名(Topic)と、

Arrayの中で表示させたいステータス情報(namespace)を指定すると、

diagnosticのステータス(Error, Warn, OK)と、

ステータスメッセージを表示することができます。

f:id:meison_amsl:20151113143235p:plain

また、上記のパネルでステータス表示位置を設定することができます。

 

ステータス情報が色で表示されたり、

ステータスメッセージが流れるように表示されたりするので

非常にかっこいいです。

 

Diagnostic_msgを表示するサンプルコードは下記です。

jsk_visualization_packages/jsk_rviz_plugins/samples/diagnostic_example.py

 

Video Capture

f:id:meison_amsl:20151112082735p:plain

 

Video Captureは名前通り、

rviz画面の動画を簡単にキャプチャすることができるrvizプラグインです。

 

Display PanelでVideo Captureを選択し、

下記のように、動画ファイルの名前とfpsを設定します。

f:id:meison_amsl:20151112082715p:plain

あとは上記のチェックボックスをオンすれば、

動画の撮影が始まり、チェックボックスをオフすれば撮影が終了します。

すると、rvizを起動したディレクトリにavi形式の動画ファイルが作成されるはずです。

 

残念ながら、そのaviファイルはそのままクリックしても

ubuntuのデフォルトビデオプレイヤーでは再生できなかったですが、

VLCをインストールし、VLCで開けば冒頭のように動画を再生することができました。

動画の大きさは10秒で200MBほどでした。

 

可視化用rqtプラグインの使い方

公式ドキュメントは下記です。

 

rqt_histogram_plot

f:id:meison_amsl:20151112184519p:plain

 

rqt_histogram_plotはヒストグラムのグラフを動的の描画するrqtプラグインです。

ヒストグラムの一つのビンのデータを表すHistogramWithRangeBinと、

HistogramWithRangeBin.msgをリストにした、

HistogramWithRangeでメッセージを構成し、

jsk_visualization_packages/HistogramWithRange.msg at master · AtsushiSakai/jsk_visualization_packages

HistogramWithRangeをpublishすることで、

そのデータをヒストグラムとして可視化してくれます。

 

可視化のサンプリングコードは下記です。

jsk_visualization_packages/jsk_rqt_plugins/sample/sample_histogram.launch

 

rqt_2d_plot

f:id:meison_amsl:20151113083550p:plain

 

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

f:id:meison_amsl:20151113100740p:plain

 

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

f:id:meison_amsl:20160111112148p:plain

 

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

 

このツールの詳しい使い方は下記のリンクを参考にすると良いと思います。

参考資料

github.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

データ可視化プログラミング入門

データ可視化プログラミング入門