Help us understand the problem. What is going on with this article?

オリジナル Rviz Plugin をつくってみる 3. ROS2で .ui ファイルを使ってオリジナルパネルをつくる

はじめに

本記事は,下記記事のシリーズ記事です.
関連記事等気になる方は是非下記記事から飛んでください!

https://qiita.com/RyodoTanaka/items/eadfb81bd52404dabdb4

前回は,ROS1で.uiファイルでレイアウト指定したパネルを Rviz Plugin にする方法を紹介しました.
本記事では,ROS2(foxy)ではどうすれば良いかを紹介しますが,ほとんど ROS1 と変わらないです.
なので,差分部分だけ説明しょうと思います.
ソースコードは下記にて公開しています(Apache2.0)

環境については,DockerでROSの環境ベースを作っているので,興味のある方は是非使ってみてください...!

動作説明

ROS1と動作の様子は変わらないので,同じものを載せておきます.
画像の中では ROS1 環境のものですが, ROS2 (foxy) で動作しますので,是非やってみてください.
ソースコードはこちらです.

rviz-panel.gif

コード解説

前述の通り,差分部分だけ解説します.

dial_panel.h

https://github.com/RyodoTanaka/rviz_plugin_examples/compare/foxy-devel...noetic-devel#diff-f5d929e81dc50ffa656257028b3e24bc07bff17a4f05a548a0e8ce636037661cL4-R4

  • インクルードヘッダをROS2対応のものに変更.
  • ノードハンドラをROS2対応に変更.
  • PublisherをROS2対応に変更.

dial_panel.cpp

https://github.com/RyodoTanaka/rviz_plugin_examples/compare/foxy-devel...noetic-devel#diff-2f49cbb364cd10486128a8e6a56b669393ce621077f287f36c35a8395af602fb

  • #include <pluginlib/class_list_macros.h>#include <class_loader/class_loader.hpp>に変更
  • デバッグ用にロガーを設定
  • ROS2用にNodeのアロケーションを行う
  • ROS2対応のPublisher設定に変更
  • プラグインの登録をCLASS_LOADER_REGISTER_CLASS(rviz_plugin_examples::DialPanel, rviz_common::Panel)に変更

plugin_description.xml

https://github.com/RyodoTanaka/rviz_plugin_examples/compare/foxy-devel...noetic-devel#diff-0aeb8d00de9bbaadd72e3b0d6a29f6fc55845d9fc328b23d15d40bb71c523df9

  • ライブラリ名の頭にlibをつけないように変更(Windows対応のためらしい)
  • 継承元クラス名の変更(rviz::Panel -> rviz_common::Panel

CMakeLists.txt

https://github.com/RyodoTanaka/rviz_plugin_examples/compare/foxy-devel...noetic-devel#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20a

  • catkinからament対応に変更
  • plubinlibのエクスポート設定が必要なので追記. (pluginlib_export_plugin_description_file(rviz_common plugin_description.xml)

package.xml

https://github.com/RyodoTanaka/rviz_plugin_examples/compare/foxy-devel...noetic-devel#diff-37a67ff78eb7260214b323353263b9af40a2fa98719a1e81937fae0159df87a3

  • colcon ament 対応のpackage.xmlに変更

おわりに

というわけで,特筆すべき変更点を Githubのdiffとともに記しました.
なんだか雑なコミット履歴みたいになってしまいましたが,下手に説明を増やすよりわかりやすいかと考えたため,このようにしました.
diffからもわかるとおり,ROS1とほとんど変わりません.
Qt 部分の説明は前記事でしっかり行っているので,是非そちらと合わせてご覧ください!

というわけで,次回はrviz::Display(ROS2ならrviz_common::Display)を使うプラグインを作ろうと思います!

RyodoTanaka
ロボットのエンジニアになりたい大学院生です. クラリネット吹くのが好きです.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away