AIChallenge 2025の活動記(Rviz2 ツール編)
AIチャレンジ2025活動記-第4弾!今回のテーマはRviz2上に様々な情報を追加で表示させよう!です。
予選が始まって3週間が経過して、安定して走行できるレース環境がおおよそ出来上がってきた頃ではないでしょうか?続いてParameterやTrajectoryの細かな調整をするフェーズに入ると、現状の分析が重要になってきます!!
そこで今回はRviz2の画面を分析ツールとして充実させるべく、その拡張方法をご紹介します。
Rviz2の表示の種類
Rviz2上での情報表示にはOverlay表示とPanel表示の2種類があります。Overlayは中央の3Dビュー内に文字などをオーバーレイ表示する方法で、デフォルトで上部に表示される速度・ギア・ステアリング角などがその例です。AIチャレンジ開発環境ではautoware_overlay_rviz_pluginパッケージにて定義されています。一方、Panelは左右や下部のタブに表示されるウィジェット型の表示方法です。

Panel表示はRviz2起動中にマウス操作で自由に表示や移動ができてより手軽に実装可能なので、今回はパネル作成の方法を試してみましょう。
Panel表示ノードを作成
それではPanel表示ノードを作ってみましょう。新しいパッケージを作ってもよし!手軽に試してみたい方は既存のautoware_overlay_rviz_pluginパッケージに新しくノードを追加してもOKです。
まずはパネルを表示させてみましょう。下記のサンプルノードを追加しましょう。
sample_panel.cpp
#include <rviz_common/panel.hpp>
#include <pluginlib/class_list_macros.hpp>
#include <QWidget>
namespace aichallenge_rviz_plugin
{
class SamplePanel : public rviz_common::Panel
{
public:
SamplePanel(QWidget * parent = nullptr) : rviz_common::Panel(parent)
{
// 空のウィジェット
}
};
}
// プラグインとして登録
PLUGINLIB_EXPORT_CLASS(aichallenge_rviz_plugin::SamplePanel, rviz_common::Panel)
CMakeList.txtにサンプルノードの設定を追加します。
CMakeList.txt
set(display_source_files
src/sample_panel.cpp
)
plugins_description.xmlに下記の内容を追加して、プラグインとして認識させます。
plugins_description.xml
<library path="autoware_overlay_rviz_plugin">
<class name="autoware_overlay_rviz_plugin/SignalDisplay" type="autoware_overlay_rviz_plugin::SignalDisplay" base_class_type="rviz_common::Display">
<description>Signal overlay plugin for the 3D view.</description>
</class>
<class name="aichallenge_rviz_plugin::SamplePanel"
type="aichallenge_rviz_plugin::SamplePanel"
base_class_type="rviz_common::Panel">
<description>Sample Panel</description>
</class>
</library>
ビルドして実行してみましょう。
Rviz2が起動したら、左上のメニューからPanels→Add New Panel→SamplePanelを選択すると、左側のサイドパネル最下部に先ほど作成したSamplePanelが追加されます。

まだコンテンツが空なのでタイトルバーしか表示されませんが、きちんとパネルを生成できました。
パネル内にコンテンツを追加
パネルを作成できたので、次は内部に要素を追加しましょう。
パネル内コンテンツにはQtウィジェットを使う方法が簡単でおすすめです。
sample_panel.cppのインクルードにQtウィジェット関係を追加します。
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
テキストをウィジェットに使いしてみましょう。
SamplePanel(QWidget * parent = nullptr) : rviz_common::Panel(parent)
{
// ラベル作成
QLabel* label = new QLabel("Sample Text");
// レイアウト作成
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget(label);
// レイアウトをこのパネルに適用
setLayout(layout);
}
実行して先程と同様にパネルを表示させましょう。

テキストが表示されましたね!
QLabel以外にもQPushButton, QLineEdit, QComboBoxなど様々なGUI部品があります。ぜひ色々な要素を追加してみてください!
活用例
分析ツールとして活用する例をご紹介します。
トピック/aichallenge/awsim/statusを購読するとラップ数やラップタイム等を取得できます。これを利用して、例えばラップタイム表や速度変化グラフを作ってみてはいかがでしょうか?


おわりに
今回は分析ツールとしてのRviz2コンテンツ拡充のご紹介でした。タイム改善に直接つながるものではありませんが、効率的な改良のための分析に役立てていただけたら嬉しいです!
次回もお楽しみに😄
過去の記事も合わせてご覧ください。
Discussion