はじめに
本記事は,下記記事のシリーズ記事です.
関連記事等気になる方は是非下記記事から飛んでください!
前回は,ROS1で.ui
ファイルでレイアウト指定したパネルを Rviz Plugin にする方法を紹介しました.
本記事では,ROS2(foxy)ではどうすれば良いかを紹介しますが,ほとんど ROS1 と変わらないです.
なので,差分部分だけ説明しょうと思います.
ソースコードは下記にて公開しています(Apache2.0)
環境については,DockerでROSの環境ベースを作っているので,興味のある方は是非使ってみてください...!
動作説明
ROS1と動作の様子は変わらないので,同じものを載せておきます.
画像の中では ROS1 環境のものですが, ROS2 (foxy) で動作しますので,是非やってみてください.
ソースコードはこちらです.
コード解説
前述の通り,差分部分だけ解説します.
dial_panel.h
- インクルードヘッダをROS2対応のものに変更.
- ノードハンドラをROS2対応に変更.
- PublisherをROS2対応に変更.
dial_panel.cpp
-
#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
- ライブラリ名の頭に
lib
をつけないように変更(Windows対応のためらしい) - 継承元クラス名の変更(
rviz::Panel
->rviz_common::Panel
)
CMakeLists.txt
-
catkin
からament
対応に変更 -
plubinlib
のエクスポート設定が必要なので追記.
(pluginlib_export_plugin_description_file(rviz_common plugin_description.xml)
)
package.xml
- colcon ament 対応の
package.xml
に変更
おわりに
というわけで,特筆すべき変更点を Githubのdiffとともに記しました.
なんだか雑なコミット履歴みたいになってしまいましたが,下手に説明を増やすよりわかりやすいかと考えたため,このようにしました.
diffからもわかるとおり,ROS1とほとんど変わりません.
Qt 部分の説明は前記事でしっかり行っているので,是非そちらと合わせてご覧ください!
というわけで,次回はrviz::Display
(ROS2ならrviz_common::Display
)を使うプラグインを作ろうと思います!