C++
ROS
ロボット
rviz

ROS講座23 jskプラグインでrviz上に情報を表示する1

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

ロボットを動かしている時に例えばバッテリー電圧やモーターを流れる電流など、特定の値を常に監視したいというニーズはあります。値をpublishしておけばrostopic echoで見ることはできますが、常に監視しようとするとrvizの画面上に出ていてくれると便利です。
この問題はjskのrvizプラグインを使うと解決できます。以下のようにrviz上に値を表示する必要があります。

  • 円形にグラフ表示を行うPieChart
  • 折れ線としてグラフ表示するPlotter2D

一番左の列は後々紹介するOverlayDiagnosticです。

jsk_rviz.png

install

jskのrvizプラグラインをインストールします。

jsk_rvizプラグインのインストール
sudo apt-get install -y ros-kinetic-jsk-visualization

サンプルプログラム

本当はバッテリー電圧など意味のある値を見るものですが、サンプルとして適当な値を出力します。上記の画像のようなグラフを出力するためにはstd_msgs::Float32で値を出力します。

vis_lecture/src/vis_float32_publisher.cpp
#include "ros/ros.h"
#include "std_msgs/Float32.h"
#include "math.h"

int main(int argc, char **argv){
    ros::init(argc, argv, "vis_float32_publisher");
    ros::NodeHandle n;

    //publisher
    ros::Publisher float_pub = n.advertise<std_msgs::Float32>("float32", 10);

    ros::Rate loop_rate(10);
    int count=0;
    while (ros::ok()){
        //publish joint states
        std_msgs::Float32 float_data;
        float_data.data=sin(count*3.14/10/2);
        float_pub.publish(float_data);

        count++;
        ros::spinOnce();
        loop_rate.sleep();
    } 
    return 0;
}

また以下のlaunchでrvizが起動できます。

vis_lecture/launch/jsk_rviz1.launch
<launch>
  <arg name="rvizconfig" default="$(find vis_lecture)/rviz/jsk_rviz1.rviz" />

  <node name="vis_float32_publisher" pkg="vis_lecture" type="vis_float32_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>

以下のコマンドで実行です。

roslaunch vis_lecture jsk_rviz1.launch

vis_move.gif

Rvizの設定

もしros_lectureのgithubからcloneしている場合はRvizの設定ファイルが読まれるので自動で表示がされますが、そうでない場合は手動で表示設定をする必要があります。

プラグインの起動

  1. Rvizの左下の「Add」ボタンを押します。
  2. 出てくる画面で「PieChart」または「Plotter2D」をクリックします。

jsk_rviz3.png

プラグインの詳細設定

思った通りの表示をするためには設定が必要です。主な設定を示します。

Piechartの設定

  • Topic 表示したいstd_msg::Float32型のROSトピックを書きます。ドロップダウン形式で選択することもできます。
  • Size 表示する大きさをpixel単位で書きます。
  • Left、top 表示位置です。それぞれ0だとPieChartの左上がRvizの3D画面の左上と一致します。
  • max value、min value 円グラフの最大、最小の時の値を設定します。 グラフの下にプロットされている名前は設定の一番上の「PieChart」と書かれているところを選択して画面下の「Rename」で変えられます。

Plotter2Dの設定

PieChartの差分のみ書きます。
* width、height 表示の横、縦の大きさを書きます。

jsk_rviz2.png

補足

これらのプラグインで表示できるのはstd_msgs::Flaot32型のメッセージのみです。Flaot64やInt32ではできません。

参考

目次ページへのリンク

ROS講座の目次へのリンク