From 590518fb6435bfa379bb2896813f005f843efb23 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 14 May 2024 13:50:38 +0900 Subject: [PATCH] chore(tools): move system and evaluation tools to autoware_tools repo from autoware.universe (#7002) * chore(tools): move system tools Signed-off-by: satoshi-ota * chore(evaluator): move evaluators Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../tier4_metrics_rviz_plugin/CMakeLists.txt | 31 --- evaluator/tier4_metrics_rviz_plugin/README.md | 16 -- .../icons/classes/MetricsVisualizePanel.png | Bin 18815 -> 0 bytes .../include/metrics_visualize_panel.hpp | 254 ----------------- .../tier4_metrics_rviz_plugin/package.xml | 33 --- .../plugins/plugin_description.xml | 5 - .../src/metrics_visualize_panel.cpp | 262 ------------------ .../CMakeLists.txt | 9 - tools/rqt_diagnostic_graph_monitor/README.md | 1 - .../rqt_diagnostic_graph_monitor/package.xml | 24 -- tools/rqt_diagnostic_graph_monitor/plugin.xml | 16 -- .../python/__init__.py | 37 --- .../python/graph.py | 127 --------- .../python/items.py | 54 ---- .../python/module.py | 61 ---- .../python/utils.py | 29 -- .../python/widget.py | 85 ------ .../script/cui_diagnostic_graph_monitor | 14 - .../script/rqt_diagnostic_graph_monitor | 8 - 19 files changed, 1066 deletions(-) delete mode 100644 evaluator/tier4_metrics_rviz_plugin/CMakeLists.txt delete mode 100644 evaluator/tier4_metrics_rviz_plugin/README.md delete mode 100644 evaluator/tier4_metrics_rviz_plugin/icons/classes/MetricsVisualizePanel.png delete mode 100644 evaluator/tier4_metrics_rviz_plugin/include/metrics_visualize_panel.hpp delete mode 100644 evaluator/tier4_metrics_rviz_plugin/package.xml delete mode 100644 evaluator/tier4_metrics_rviz_plugin/plugins/plugin_description.xml delete mode 100644 evaluator/tier4_metrics_rviz_plugin/src/metrics_visualize_panel.cpp delete mode 100644 tools/rqt_diagnostic_graph_monitor/CMakeLists.txt delete mode 100644 tools/rqt_diagnostic_graph_monitor/README.md delete mode 100644 tools/rqt_diagnostic_graph_monitor/package.xml delete mode 100644 tools/rqt_diagnostic_graph_monitor/plugin.xml delete mode 100644 tools/rqt_diagnostic_graph_monitor/python/__init__.py delete mode 100644 tools/rqt_diagnostic_graph_monitor/python/graph.py delete mode 100644 tools/rqt_diagnostic_graph_monitor/python/items.py delete mode 100644 tools/rqt_diagnostic_graph_monitor/python/module.py delete mode 100644 tools/rqt_diagnostic_graph_monitor/python/utils.py delete mode 100644 tools/rqt_diagnostic_graph_monitor/python/widget.py delete mode 100755 tools/rqt_diagnostic_graph_monitor/script/cui_diagnostic_graph_monitor delete mode 100755 tools/rqt_diagnostic_graph_monitor/script/rqt_diagnostic_graph_monitor diff --git a/evaluator/tier4_metrics_rviz_plugin/CMakeLists.txt b/evaluator/tier4_metrics_rviz_plugin/CMakeLists.txt deleted file mode 100644 index 8475b596e6d6b..0000000000000 --- a/evaluator/tier4_metrics_rviz_plugin/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(tier4_metrics_rviz_plugin) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -find_package(Qt5 REQUIRED Core Widgets Charts) -set(QT_WIDGETS_LIB Qt5::Widgets) -set(QT_CHARTS_LIB Qt5::Charts) -set(CMAKE_AUTOMOC ON) -add_definitions(-DQT_NO_KEYWORDS) - -ament_auto_add_library(${PROJECT_NAME} SHARED - src/metrics_visualize_panel.cpp - include/metrics_visualize_panel.hpp -) - -target_link_libraries(${PROJECT_NAME} - ${QT_WIDGETS_LIB} - ${QT_CHARTS_LIB} -) - -target_compile_options(${PROJECT_NAME} PUBLIC -Wno-error=deprecated-copy -Wno-error=pedantic) -# Export the plugin to be imported by rviz2 -pluginlib_export_plugin_description_file(rviz_common plugins/plugin_description.xml) - -ament_auto_package( - INSTALL_TO_SHARE - icons - plugins -) diff --git a/evaluator/tier4_metrics_rviz_plugin/README.md b/evaluator/tier4_metrics_rviz_plugin/README.md deleted file mode 100644 index be94141254030..0000000000000 --- a/evaluator/tier4_metrics_rviz_plugin/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# tier4_metrics_rviz_plugin - -## Purpose - -This plugin panel to visualize `planning_evaluator` output. - -## Inputs / Outputs - -| Name | Type | Description | -| ---------------------------------------- | --------------------------------------- | ------------------------------------- | -| `/diagnostic/planning_evaluator/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | Subscribe `planning_evaluator` output | - -## HowToUse - -1. Start rviz and select panels/Add new panel. -2. Select MetricsVisualizePanel and press OK. diff --git a/evaluator/tier4_metrics_rviz_plugin/icons/classes/MetricsVisualizePanel.png b/evaluator/tier4_metrics_rviz_plugin/icons/classes/MetricsVisualizePanel.png deleted file mode 100644 index 6a67573717ae18b6008e00077defb27256415663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18815 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 QxT*u><#`b=z=h}h2b9~@i2wiq diff --git a/evaluator/tier4_metrics_rviz_plugin/include/metrics_visualize_panel.hpp b/evaluator/tier4_metrics_rviz_plugin/include/metrics_visualize_panel.hpp deleted file mode 100644 index 3d66099988d8b..0000000000000 --- a/evaluator/tier4_metrics_rviz_plugin/include/metrics_visualize_panel.hpp +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright 2024 TIER IV, Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef METRICS_VISUALIZE_PANEL_HPP_ -#define METRICS_VISUALIZE_PANEL_HPP_ - -#ifndef Q_MOC_RUN -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace rviz_plugins -{ - -using diagnostic_msgs::msg::DiagnosticArray; -using diagnostic_msgs::msg::DiagnosticStatus; -using diagnostic_msgs::msg::KeyValue; -using QtCharts::QChart; -using QtCharts::QChartView; -using QtCharts::QLineSeries; - -struct Metric -{ -public: - explicit Metric(const DiagnosticStatus & status) : chart(new QChartView), table(new QTableWidget) - { - init(status); - } - - void init(const DiagnosticStatus & status) - { - QStringList header{}; - - { - auto label = new QLabel; - label->setAlignment(Qt::AlignCenter); - label->setText(QString::fromStdString(status.name)); - labels.emplace("metric_name", label); - - header.push_back("metric_name"); - } - - for (const auto & [key, value] : status.values) { - auto label = new QLabel; - label->setAlignment(Qt::AlignCenter); - labels.emplace(key, label); - - auto plot = new QLineSeries; - plot->setName(QString::fromStdString(key)); - plots.emplace(key, plot); - chart->chart()->addSeries(plot); - chart->chart()->createDefaultAxes(); - - header.push_back(QString::fromStdString(key)); - } - - { - chart->chart()->setTitle(QString::fromStdString(status.name)); - chart->chart()->legend()->setVisible(true); - chart->chart()->legend()->detachFromChart(); - chart->setRenderHint(QPainter::Antialiasing); - } - - { - table->setColumnCount(status.values.size() + 1); - table->setHorizontalHeaderLabels(header); - table->verticalHeader()->hide(); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - table->setRowCount(1); - table->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); - } - } - - void updateData(const double time, const DiagnosticStatus & status) - { - for (const auto & [key, value] : status.values) { - const double data = std::stod(value); - labels.at(key)->setText(QString::fromStdString(toString(data))); - plots.at(key)->append(time, data); - updateMinMax(data); - } - - { - const auto area = chart->chart()->plotArea(); - const auto rect = chart->chart()->legend()->rect(); - chart->chart()->legend()->setGeometry( - QRectF(area.x(), area.y(), area.width(), rect.height())); - chart->chart()->axes(Qt::Horizontal).front()->setRange(time - 100.0, time); - } - - { - table->setCellWidget(0, 0, labels.at("metric_name")); - } - - for (size_t i = 0; i < status.values.size(); ++i) { - table->setCellWidget(0, i + 1, labels.at(status.values.at(i).key)); - } - } - - void updateMinMax(double data) - { - if (data < y_range_min) { - y_range_min = data > 0.0 ? 0.9 * data : 1.1 * data; - chart->chart()->axes(Qt::Vertical).front()->setMin(y_range_min); - } - - if (data > y_range_max) { - y_range_max = data > 0.0 ? 1.1 * data : 0.9 * data; - chart->chart()->axes(Qt::Vertical).front()->setMax(y_range_max); - } - } - - void updateTable() { table->update(); } - - void updateGraph() { chart->update(); } - - QChartView * getChartView() const { return chart; } - - QTableWidget * getTable() const { return table; } - - std::unordered_map getLabels() const { return labels; } - -private: - static std::optional getValue(const DiagnosticStatus & status, std::string && key) - { - const auto itr = std::find_if( - status.values.begin(), status.values.end(), - [&](const auto & value) { return value.key == key; }); - - if (itr == status.values.end()) { - return std::nullopt; - } - - return itr->value; - } - - static std::string toString(const double & value) - { - std::stringstream ss; - ss << std::scientific << std::setprecision(2) << value; - return ss.str(); - } - - QChartView * chart; - QTableWidget * table; - - std::unordered_map labels; - std::unordered_map plots; - - double y_range_min{std::numeric_limits::max()}; - double y_range_max{std::numeric_limits::lowest()}; -}; - -class MetricsVisualizePanel : public rviz_common::Panel -{ - Q_OBJECT - -public: - explicit MetricsVisualizePanel(QWidget * parent = nullptr); - void onInitialize() override; - -private Q_SLOTS: - // Slot functions triggered by UI events - void onTopicChanged(); - void onSpecificMetricChanged(); - void onClearButtonClicked(); - void onTabChanged(); - -private: - // ROS 2 node and subscriptions for handling metrics data - rclcpp::Node::SharedPtr raw_node_; - rclcpp::TimerBase::SharedPtr timer_; - std::unordered_map::SharedPtr> subscriptions_; - - // Topics from which metrics are collected - std::vector topics_ = { - "/diagnostic/planning_evaluator/metrics", "/diagnostic/perception_online_evaluator/metrics"}; - - // Timer and metrics message callback - void onTimer(); - void onMetrics(const DiagnosticArray::ConstSharedPtr & msg, const std::string & topic_name); - - // Functions to update UI based on selected metrics - void updateViews(); - void updateSelectedMetric(const std::string & metric_name); - - // UI components - QGridLayout * grid_; - QComboBox * topic_selector_; - QTabWidget * tab_widget_; - - // "Specific Metrics" tab components - QComboBox * specific_metric_selector_; - QChartView * specific_metric_chart_view_; - QTableWidget * specific_metric_table_; - - // Selected metrics data - std::optional> selected_metrics_; - - // Cache for received messages by topics - std::unordered_map current_msg_map_; - - // Mapping from topics to metrics widgets (tables and charts) - std::unordered_map< - std::string, std::unordered_map>> - topic_widgets_map_; - - // Synchronization - std::mutex mutex_; - - // Stored metrics data - std::unordered_map metrics_; - - // Utility functions for managing widget visibility based on topics - void updateWidgetVisibility(const std::string & target_topic, const bool show); - void showCurrentTopicWidgets(); - void hideInactiveTopicWidgets(); -}; -} // namespace rviz_plugins - -#endif // METRICS_VISUALIZE_PANEL_HPP_ diff --git a/evaluator/tier4_metrics_rviz_plugin/package.xml b/evaluator/tier4_metrics_rviz_plugin/package.xml deleted file mode 100644 index d06382bc8c539..0000000000000 --- a/evaluator/tier4_metrics_rviz_plugin/package.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - tier4_metrics_rviz_plugin - 0.0.0 - The tier4_metrics_rviz_plugin package - Satoshi OTA - Kyoichi Sugahara - Maxime CLEMENT - Kosuke Takeuchi - Fumiya Watanabe - Apache License 2.0 - - ament_cmake_auto - autoware_cmake - - diagnostic_msgs - libqt5-charts-dev - libqt5-core - libqt5-gui - libqt5-widgets - qtbase5-dev - rclcpp - rviz_common - - ament_lint_auto - autoware_lint_common - - - ament_cmake - - - diff --git a/evaluator/tier4_metrics_rviz_plugin/plugins/plugin_description.xml b/evaluator/tier4_metrics_rviz_plugin/plugins/plugin_description.xml deleted file mode 100644 index 5aca5bd7faa54..0000000000000 --- a/evaluator/tier4_metrics_rviz_plugin/plugins/plugin_description.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - MetricsVisualizePanel - - diff --git a/evaluator/tier4_metrics_rviz_plugin/src/metrics_visualize_panel.cpp b/evaluator/tier4_metrics_rviz_plugin/src/metrics_visualize_panel.cpp deleted file mode 100644 index b92a9a7ace53d..0000000000000 --- a/evaluator/tier4_metrics_rviz_plugin/src/metrics_visualize_panel.cpp +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2024 TIER IV, Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#include "metrics_visualize_panel.hpp" - -#include - -#include - -#include -#include -#include -#include - -namespace rviz_plugins -{ -MetricsVisualizePanel::MetricsVisualizePanel(QWidget * parent) -: rviz_common::Panel(parent), grid_(new QGridLayout()) -{ - // Initialize the main tab widget - tab_widget_ = new QTabWidget(); - - // Create and configure the "All Metrics" tab - QWidget * all_metrics_widget = new QWidget(); - grid_ = new QGridLayout(all_metrics_widget); // Apply grid layout to the widget directly - all_metrics_widget->setLayout(grid_); - - // Add topic selector combobox - topic_selector_ = new QComboBox(); - for (const auto & topic : topics_) { - topic_selector_->addItem(QString::fromStdString(topic)); - } - grid_->addWidget(topic_selector_, 0, 0, 1, -1); // Add topic selector to the grid layout - connect(topic_selector_, SIGNAL(currentIndexChanged(int)), this, SLOT(onTopicChanged())); - - tab_widget_->addTab( - all_metrics_widget, "All Metrics"); // Add "All Metrics" tab to the tab widget - - // Create and configure the "Specific Metrics" tab - QWidget * specific_metrics_widget = new QWidget(); - QVBoxLayout * specific_metrics_layout = new QVBoxLayout(); - specific_metrics_widget->setLayout(specific_metrics_layout); - - // Add specific metric selector combobox - specific_metric_selector_ = new QComboBox(); - specific_metrics_layout->addWidget(specific_metric_selector_); - connect( - specific_metric_selector_, SIGNAL(currentIndexChanged(int)), this, - SLOT(onSpecificMetricChanged())); - - // Add clear button - QPushButton * clear_button = new QPushButton("Clear"); - specific_metrics_layout->addWidget(clear_button); - connect(clear_button, &QPushButton::clicked, this, &MetricsVisualizePanel::onClearButtonClicked); - - // Add chart view for specific metrics - specific_metric_chart_view_ = new QChartView(); - specific_metrics_layout->addWidget(specific_metric_chart_view_); - - tab_widget_->addTab( - specific_metrics_widget, "Specific Metrics"); // Add "Specific Metrics" tab to the tab widget - - // Set the main layout of the panel - QVBoxLayout * main_layout = new QVBoxLayout(); - main_layout->addWidget(tab_widget_); - setLayout(main_layout); -} - -void MetricsVisualizePanel::onInitialize() -{ - using std::placeholders::_1; - - raw_node_ = this->getDisplayContext()->getRosNodeAbstraction().lock()->get_raw_node(); - - for (const auto & topic_name : topics_) { - const auto callback = [this, topic_name](const DiagnosticArray::ConstSharedPtr msg) { - this->onMetrics(msg, topic_name); - }; - const auto subscription = - raw_node_->create_subscription(topic_name, rclcpp::QoS{1}, callback); - subscriptions_[topic_name] = subscription; - } - - const auto period = std::chrono::milliseconds(static_cast(1e3 / 10)); - timer_ = raw_node_->create_wall_timer(period, [&]() { onTimer(); }); -} - -void MetricsVisualizePanel::updateWidgetVisibility( - const std::string & target_topic, const bool show) -{ - for (const auto & [topic_name, metric_widgets_pair] : topic_widgets_map_) { - const bool is_target_topic = (topic_name == target_topic); - if ((!is_target_topic && show) || (is_target_topic && !show)) { - continue; - } - for (const auto & [metric, widgets] : metric_widgets_pair) { - widgets.first->setVisible(show); - widgets.second->setVisible(show); - } - } -} - -void MetricsVisualizePanel::showCurrentTopicWidgets() -{ - const std::string current_topic = topic_selector_->currentText().toStdString(); - updateWidgetVisibility(current_topic, true); -} - -void MetricsVisualizePanel::hideInactiveTopicWidgets() -{ - const std::string current_topic = topic_selector_->currentText().toStdString(); - updateWidgetVisibility(current_topic, false); -} - -void MetricsVisualizePanel::onTopicChanged() -{ - std::lock_guard message_lock(mutex_); - hideInactiveTopicWidgets(); - showCurrentTopicWidgets(); -} - -void MetricsVisualizePanel::updateSelectedMetric(const std::string & metric_name) -{ - std::lock_guard message_lock(mutex_); - - for (const auto & [topic, msg] : current_msg_map_) { - const auto time = msg->header.stamp.sec + msg->header.stamp.nanosec * 1e-9; - for (const auto & status : msg->status) { - if (metric_name == status.name) { - selected_metrics_ = {metric_name, Metric(status)}; - selected_metrics_->second.updateData(time, status); - return; - } - } - } -} - -void MetricsVisualizePanel::updateViews() -{ - if (!selected_metrics_) { - return; - } - - Metric & metric = selected_metrics_->second; - specific_metric_chart_view_->setChart(metric.getChartView()->chart()); - auto * specific_metrics_widget = dynamic_cast(tab_widget_->widget(1)); - auto * specific_metrics_layout = dynamic_cast(specific_metrics_widget->layout()); - specific_metrics_layout->removeWidget(specific_metric_table_); - specific_metric_table_ = metric.getTable(); - QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); - sizePolicy.setHeightForWidth(specific_metric_table_->sizePolicy().hasHeightForWidth()); - specific_metric_table_->setSizePolicy(sizePolicy); - specific_metrics_layout->insertWidget(1, specific_metric_table_); -} - -void MetricsVisualizePanel::onSpecificMetricChanged() -{ - const auto selected_metrics_str = specific_metric_selector_->currentText().toStdString(); - updateSelectedMetric(selected_metrics_str); - updateViews(); -} - -void MetricsVisualizePanel::onClearButtonClicked() -{ - if (!selected_metrics_) { - return; - } - updateSelectedMetric(selected_metrics_->first); - updateViews(); -} - -void MetricsVisualizePanel::onTimer() -{ - std::lock_guard message_lock(mutex_); - - for (auto & [name, metric] : metrics_) { - metric.updateGraph(); - metric.updateTable(); - } - - if (selected_metrics_) { - selected_metrics_->second.updateGraph(); - selected_metrics_->second.updateTable(); - } -} - -void MetricsVisualizePanel::onMetrics( - const DiagnosticArray::ConstSharedPtr & msg, const std::string & topic_name) -{ - std::lock_guard message_lock(mutex_); - - const auto time = msg->header.stamp.sec + msg->header.stamp.nanosec * 1e-9; - constexpr size_t GRAPH_COL_SIZE = 5; - - for (const auto & status : msg->status) { - const size_t num_current_metrics = topic_widgets_map_[topic_name].size(); - if (metrics_.count(status.name) == 0) { - const auto metric = Metric(status); - metrics_.emplace(status.name, metric); - - // Calculate grid position - const size_t row = num_current_metrics / GRAPH_COL_SIZE * 2 + - 2; // start from 2 to leave space for the topic selector and tab widget - const size_t col = num_current_metrics % GRAPH_COL_SIZE; - - // Get the widgets from the metric - const auto tableWidget = metric.getTable(); - const auto chartViewWidget = metric.getChartView(); - - // Get the layout for the "All Metrics" tab - auto all_metrics_widget = dynamic_cast(tab_widget_->widget(0)); - QGridLayout * all_metrics_layout = dynamic_cast(all_metrics_widget->layout()); - - // Add the widgets to the "All Metrics" tab layout - all_metrics_layout->addWidget(tableWidget, row, col); - all_metrics_layout->setRowStretch(row, false); - all_metrics_layout->addWidget(chartViewWidget, row + 1, col); - all_metrics_layout->setRowStretch(row + 1, true); - all_metrics_layout->setColumnStretch(col, true); - - // Also add the widgets to the topic_widgets_map_ for easy management - topic_widgets_map_[topic_name][status.name] = std::make_pair(tableWidget, chartViewWidget); - } - metrics_.at(status.name).updateData(time, status); - - // update selected metrics - const auto selected_metrics_str = specific_metric_selector_->currentText().toStdString(); - if (selected_metrics_str == status.name) { - if (selected_metrics_) { - selected_metrics_->second.updateData(time, status); - } - } - } - - // Update the specific metric selector - QSignalBlocker blocker(specific_metric_selector_); - for (const auto & status : msg->status) { - if (specific_metric_selector_->findText(QString::fromStdString(status.name)) == -1) { - specific_metric_selector_->addItem(QString::fromStdString(status.name)); - } - } - - // save the message for metrics selector - current_msg_map_[topic_name] = msg; -} - -} // namespace rviz_plugins - -#include -PLUGINLIB_EXPORT_CLASS(rviz_plugins::MetricsVisualizePanel, rviz_common::Panel) diff --git a/tools/rqt_diagnostic_graph_monitor/CMakeLists.txt b/tools/rqt_diagnostic_graph_monitor/CMakeLists.txt deleted file mode 100644 index 9e8bb20bb92a3..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(rqt_diagnostic_graph_monitor) - -find_package(autoware_cmake REQUIRED) -autoware_package() -ament_python_install_package(${PROJECT_NAME} PACKAGE_DIR python) -install(FILES plugin.xml DESTINATION share/${PROJECT_NAME}) -install(PROGRAMS script/rqt_diagnostic_graph_monitor DESTINATION lib/${PROJECT_NAME}) -ament_auto_package(INSTALL_TO_SHARE script) diff --git a/tools/rqt_diagnostic_graph_monitor/README.md b/tools/rqt_diagnostic_graph_monitor/README.md deleted file mode 100644 index 8dccca34db8c5..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/README.md +++ /dev/null @@ -1 +0,0 @@ -# System diagnostic monitor diff --git a/tools/rqt_diagnostic_graph_monitor/package.xml b/tools/rqt_diagnostic_graph_monitor/package.xml deleted file mode 100644 index 60780e2794998..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/package.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - rqt_diagnostic_graph_monitor - 0.1.0 - The rqt_diagnostic_graph_monitor package - Takagi, Isamu - Apache License 2.0 - - ament_cmake_auto - autoware_cmake - - python_qt_binding - rqt_gui - rqt_gui_py - - ament_lint_auto - autoware_lint_common - - - ament_cmake - - - diff --git a/tools/rqt_diagnostic_graph_monitor/plugin.xml b/tools/rqt_diagnostic_graph_monitor/plugin.xml deleted file mode 100644 index 6c64185e3f0af..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/plugin.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - folder - - - - utilities-system-monitor - - - - diff --git a/tools/rqt_diagnostic_graph_monitor/python/__init__.py b/tools/rqt_diagnostic_graph_monitor/python/__init__.py deleted file mode 100644 index 10f125fa447b5..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/python/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2023 The Autoware Contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from rqt_gui_py.plugin import Plugin - -from .module import MonitorModule -from .widget import MonitorWidget - - -class MonitorPlugin(Plugin): - def __init__(self, context): - super().__init__(context) - self.widget = MonitorWidget() - self.module = MonitorModule(context.node) - self.module.append_struct_callback(self.widget.on_graph) - context.add_widget(self.widget) - - def shutdown_plugin(self): - self.module.shutdown() - self.widget.shutdown() - - def save_settings(self, plugin_settings, instance_settings): - pass - - def restore_settings(self, plugin_settings, instance_settings): - pass diff --git a/tools/rqt_diagnostic_graph_monitor/python/graph.py b/tools/rqt_diagnostic_graph_monitor/python/graph.py deleted file mode 100644 index cea81c1226637..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/python/graph.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright 2023 The Autoware Contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from diagnostic_msgs.msg import DiagnosticStatus -from rclpy.time import Time - - -class DummyStatus: - def __init__(self): - self.level = DiagnosticStatus.STALE - - -class BaseUnit: - def __init__(self, status=DummyStatus()): - self._parents = [] - self._children = [] - self._path = None - self._type = None - self._status = status - - @property - def parents(self): - return self._parents - - @property - def children(self): - return self._children - - @property - def path(self): - return self._path - - @property - def kind(self): - return self._type - - -class NodeUnit(BaseUnit): - def __init__(self, struct): - super().__init__() - self._path = struct.path - self._type = struct.type - - def update(self, status): - self._status = status - - @property - def level(self): - return self._status.level - - -class DiagUnit(BaseUnit): - def __init__(self, struct): - super().__init__() - self._path = struct.path - self._name = struct.name - self._type = "diag" - - def update(self, status): - self._status = status - - @property - def level(self): - return self._status.level - - -class UnitLink: - def __init__(self, parent: BaseUnit, child: BaseUnit): - self._parent = parent - self._child = child - parent._children.append(self) - child._parents.append(self) - - def update(self, status): - self.status = status - - @property - def parent(self): - return self._parent - - @property - def child(self): - return self._child - - -class Graph: - def __init__(self, msg): - self._struct_stamp = Time.from_msg(msg.stamp) - self._status_stamp = None - self._id = msg.id - self._nodes = [NodeUnit(struct) for struct in msg.nodes] - self._diags = [DiagUnit(struct) for struct in msg.diags] - self._units = self._nodes + self._diags - self._links = [] - for struct in msg.links: - units = self._diags if struct.is_leaf else self._nodes - nodes = self._nodes - self._links.append(UnitLink(nodes[struct.parent], units[struct.child])) - - def update(self, msg): - if msg.id == self._id: - self._status_stamp = Time.from_msg(msg.stamp) - for node, status in zip(self._nodes, msg.nodes): - node.update(status) - for diag, status in zip(self._diags, msg.diags): - diag.update(status) - for link, status in zip(self._links, msg.links): - link.update(status) - - @property - def units(self): - return self._units - - @property - def links(self): - return self._links diff --git a/tools/rqt_diagnostic_graph_monitor/python/items.py b/tools/rqt_diagnostic_graph_monitor/python/items.py deleted file mode 100644 index 96f60ef0e09cf..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/python/items.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright 2024 The Autoware Contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -from diagnostic_msgs.msg import DiagnosticStatus -from python_qt_binding import QtGui -from python_qt_binding import QtWidgets - -from .graph import BaseUnit -from .graph import UnitLink - - -class MonitorIcons: - def __init__(self): - self.disable = QtGui.QIcon.fromTheme("dialog-question") - self.unknown = QtGui.QIcon.fromTheme("system-search") - self.ok = QtGui.QIcon.fromTheme("emblem-default") - self.warn = QtGui.QIcon.fromTheme("emblem-important") - self.error = QtGui.QIcon.fromTheme("dialog-error") - self.stale = QtGui.QIcon.fromTheme("appointment-missed") - - self._levels = {} - self._levels[DiagnosticStatus.OK] = self.ok - self._levels[DiagnosticStatus.WARN] = self.warn - self._levels[DiagnosticStatus.ERROR] = self.error - self._levels[DiagnosticStatus.STALE] = self.stale - - def get(self, level): - return self._levels.get(level, self.unknown) - - -class MonitorItem: - icons = MonitorIcons() - - def __init__(self, link: UnitLink, unit: BaseUnit): - item_text = f"{unit.path} ({unit.kind})" if unit.path else f"({unit.kind})" - self.item = QtWidgets.QTreeWidgetItem([item_text]) - self.link = link - self.unit = unit - self.item.setIcon(0, self.icons.stale) - - def update(self): - self.item.setIcon(0, self.icons.get(self.unit.level)) diff --git a/tools/rqt_diagnostic_graph_monitor/python/module.py b/tools/rqt_diagnostic_graph_monitor/python/module.py deleted file mode 100644 index 74294659ef61a..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/python/module.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2023 The Autoware Contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -from rclpy.node import Node -from tier4_system_msgs.msg import DiagGraphStatus -from tier4_system_msgs.msg import DiagGraphStruct - -from .graph import Graph -from .utils import default_qos -from .utils import durable_qos -from .utils import foreach - - -class MonitorModule: - def __init__(self, node: Node): - self.graph = None - self.struct_callbacks = [] - self.status_callbacks = [] - self.node = node - self.sub_struct = self.subscribe_struct() - self.sub_status = self.subscribe_status() - - def append_struct_callback(self, callback): - self.struct_callbacks.append(callback) - - def append_status_callback(self, callback): - self.status_callbacks.append(callback) - - def on_struct(self, msg): - self.graph = Graph(msg) - foreach(self.struct_callbacks, lambda callback: callback(self.graph)) - - def on_status(self, msg): - self.graph.update(msg) - foreach(self.status_callbacks, lambda callback: callback(self.graph)) - - def subscribe_struct(self): - return self.node.create_subscription( - DiagGraphStruct, "/diagnostics_graph/struct", self.on_struct, durable_qos(1) - ) - - def subscribe_status(self): - return self.node.create_subscription( - DiagGraphStatus, "/diagnostics_graph/status", self.on_status, default_qos(1) - ) - - def shutdown(self): - self.node.destroy_subscription(self.sub_struct) - self.node.destroy_subscription(self.sub_status) diff --git a/tools/rqt_diagnostic_graph_monitor/python/utils.py b/tools/rqt_diagnostic_graph_monitor/python/utils.py deleted file mode 100644 index 6e66102b16dc9..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/python/utils.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2024 The Autoware Contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from rclpy.qos import QoSDurabilityPolicy -from rclpy.qos import QoSProfile - - -def default_qos(depth): - return QoSProfile(depth=depth) - - -def durable_qos(depth): - return QoSProfile(depth=depth, durability=QoSDurabilityPolicy.TRANSIENT_LOCAL) - - -def foreach(iterable, function): - for item in iterable: - function(item) diff --git a/tools/rqt_diagnostic_graph_monitor/python/widget.py b/tools/rqt_diagnostic_graph_monitor/python/widget.py deleted file mode 100644 index e7f022e5907c0..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/python/widget.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright 2023 The Autoware Contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from python_qt_binding import QtCore -from python_qt_binding import QtWidgets - -from .graph import Graph -from .items import MonitorItem -from .utils import foreach - - -class MonitorWidget(QtWidgets.QSplitter): - def __init__(self): - super().__init__() - self.graph = None - self.items = [] - self.root_widget = QtWidgets.QTreeWidget() - self.tree_widget = QtWidgets.QTreeWidget() - self.root_widget.setHeaderLabels(["Top-level"]) - self.tree_widget.setHeaderLabels(["Subtrees"]) - self.addWidget(self.root_widget) - self.addWidget(self.tree_widget) - - self._timer = QtCore.QTimer() - self._timer.timeout.connect(self.on_timer) - self._timer.start(500) - - def shutdown(self): - self.clear_graph() - - def on_timer(self): - foreach(self.items, lambda item: item.update()) - - def on_graph(self, graph: Graph): - self.clear_graph() - self.build_graph(graph) - - def clear_graph(self): - self.graph = None - self.items = [] - self.root_widget.clear() - self.tree_widget.clear() - - def build_graph(self, graph: Graph): - self.graph = graph - root_units = filter(self.is_root_unit, self.graph.units) - tree_units = filter(self.is_tree_unit, self.graph.units) - root_items = [MonitorItem(None, unit) for unit in root_units] - tree_items = [MonitorItem(None, unit) for unit in tree_units] - link_items = [MonitorItem(link, link.child) for link in self.graph.links] - self.items = root_items + tree_items + link_items - - # Note: overwrite link items with root/tree items if there is more than one. - parents = {} - for items in [link_items, tree_items, root_items]: - parents.update({item.unit: item.item for item in items}) - - # Connect tree widget items. - root_widget_item = self.root_widget.invisibleRootItem() - tree_widget_item = self.tree_widget.invisibleRootItem() - for item in root_items: - root_widget_item.addChild(item.item) - for item in tree_items: - tree_widget_item.addChild(item.item) - for item in link_items: - parents[item.link.parent].addChild(item.item) - - @staticmethod - def is_root_unit(unit): - return len(unit.parents) == 0 - - @staticmethod - def is_tree_unit(unit): - return len(unit.parents) >= 2 and len(unit.children) != 0 diff --git a/tools/rqt_diagnostic_graph_monitor/script/cui_diagnostic_graph_monitor b/tools/rqt_diagnostic_graph_monitor/script/cui_diagnostic_graph_monitor deleted file mode 100755 index 8b0685125d026..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/script/cui_diagnostic_graph_monitor +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 - -import rclpy -from rqt_diagnostic_graph_monitor.module import MonitorModule - -if __name__ == "__main__": - try: - rclpy.init() - node = rclpy.create_node("test_rqt_diagnostic_graph_monitor") - test = MonitorModule(node) - rclpy.spin(node) - rclpy.shutdown() - except KeyboardInterrupt: - print("KeyboardInterrupt") diff --git a/tools/rqt_diagnostic_graph_monitor/script/rqt_diagnostic_graph_monitor b/tools/rqt_diagnostic_graph_monitor/script/rqt_diagnostic_graph_monitor deleted file mode 100755 index a5237a87e87d6..0000000000000 --- a/tools/rqt_diagnostic_graph_monitor/script/rqt_diagnostic_graph_monitor +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python3 - -import sys - -import rqt_gui.main - -rqt_main = rqt_gui.main.Main() -sys.exit(rqt_main.main(sys.argv, standalone="rqt_diagnostic_graph_monitor.MonitorPlugin"))