Skip to content

Commit fb2ab65

Browse files
authored
Merge branch 'autowarefoundation:main' into feat/distortion_correction_node_update_azimuth_and_distance
2 parents 192a89d + b8c9701 commit fb2ab65

File tree

92 files changed

+1703
-4949
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+1703
-4949
lines changed

.github/CODEOWNERS

+3-3
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ evaluator/kinematic_evaluator/** dominik.jargot@robotec.ai fumiya.watanabe@tier4
7777
evaluator/localization_evaluator/** dominik.jargot@robotec.ai koji.minoda@tier4.jp
7878
evaluator/perception_online_evaluator/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp
7979
evaluator/planning_evaluator/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp
80-
evaluator/tier4_metrics_rviz_plugin/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp
80+
evaluator/tier4_metrics_rviz_plugin/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp
8181
launch/tier4_autoware_api_launch/** isamu.takagi@tier4.jp ryohsuke.mitsudome@tier4.jp
8282
launch/tier4_control_launch/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
8383
launch/tier4_localization_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
@@ -121,7 +121,7 @@ perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp
121121
perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp
122122
perception/detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
123123
perception/elevation_map_loader/** kosuke.takeuchi@tier4.jp shintaro.tomie@tier4.jp taichi.higashide@tier4.jp
124-
perception/euclidean_cluster/** yukihiro.saito@tier4.jp
124+
perception/euclidean_cluster/** dai.nguyen@tier4.jp yukihiro.saito@tier4.jp
125125
perception/ground_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp
126126
perception/image_projection_based_fusion/** dai.nguyen@tier4.jp koji.minoda@tier4.jp kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
127127
perception/lidar_apollo_instance_segmentation/** yukihiro.saito@tier4.jp
@@ -212,7 +212,7 @@ sensing/image_diagnostics/** dai.nguyen@tier4.jp
212212
sensing/image_transport_decompressor/** yukihiro.saito@tier4.jp
213213
sensing/imu_corrector/** koji.minoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
214214
sensing/livox/livox_tag_filter/** ryohsuke.mitsudome@tier4.jp
215-
sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com kyoichi.sugahara@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp
215+
sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp kyoichi.sugahara@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp
216216
sensing/radar_scan_to_pointcloud2/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp
217217
sensing/radar_static_pointcloud_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp
218218
sensing/radar_threshold_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp

control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class LaneDepartureChecker
121121
std::vector<std::pair<double, lanelet::Lanelet>> getLaneletsFromPath(
122122
const lanelet::LaneletMapPtr lanelet_map_ptr, const PathWithLaneId & path) const;
123123

124-
std::optional<lanelet::BasicPolygon2d> getFusedLaneletPolygonForPath(
124+
std::optional<tier4_autoware_utils::Polygon2d> getFusedLaneletPolygonForPath(
125125
const lanelet::LaneletMapPtr lanelet_map_ptr, const PathWithLaneId & path) const;
126126

127127
bool checkPathWillLeaveLane(

control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp

+25-19
Original file line numberDiff line numberDiff line change
@@ -321,33 +321,39 @@ std::vector<std::pair<double, lanelet::Lanelet>> LaneDepartureChecker::getLanele
321321
lanelet_map_ptr->laneletLayer, footprint_hull_basic_polygon, 0.0);
322322
}
323323

324-
std::optional<lanelet::BasicPolygon2d> LaneDepartureChecker::getFusedLaneletPolygonForPath(
324+
std::optional<tier4_autoware_utils::Polygon2d> LaneDepartureChecker::getFusedLaneletPolygonForPath(
325325
const lanelet::LaneletMapPtr lanelet_map_ptr, const PathWithLaneId & path) const
326326
{
327327
const auto lanelets_distance_pair = getLaneletsFromPath(lanelet_map_ptr, path);
328+
auto to_polygon2d = [](const lanelet::BasicPolygon2d & poly) -> tier4_autoware_utils::Polygon2d {
329+
tier4_autoware_utils::Polygon2d p;
330+
auto & outer = p.outer();
331+
332+
for (const auto & p : poly) {
333+
tier4_autoware_utils::Point2d p2d(p.x(), p.y());
334+
outer.push_back(p2d);
335+
}
336+
boost::geometry::correct(p);
337+
return p;
338+
};
339+
328340
// Fuse lanelets into a single BasicPolygon2d
329-
auto fused_lanelets = [&lanelets_distance_pair]() -> std::optional<lanelet::BasicPolygon2d> {
341+
auto fused_lanelets = [&]() -> std::optional<tier4_autoware_utils::Polygon2d> {
330342
if (lanelets_distance_pair.empty()) return std::nullopt;
331-
if (lanelets_distance_pair.size() == 1)
332-
return lanelets_distance_pair.at(0).second.polygon2d().basicPolygon();
343+
tier4_autoware_utils::MultiPolygon2d lanelet_unions;
344+
tier4_autoware_utils::MultiPolygon2d result;
333345

334-
lanelet::BasicPolygon2d merged_polygon =
335-
lanelets_distance_pair.at(0).second.polygon2d().basicPolygon();
336-
for (size_t i = 1; i < lanelets_distance_pair.size(); ++i) {
346+
for (size_t i = 0; i < lanelets_distance_pair.size(); ++i) {
337347
const auto & route_lanelet = lanelets_distance_pair.at(i).second;
338-
const auto & poly = route_lanelet.polygon2d().basicPolygon();
339-
340-
std::vector<lanelet::BasicPolygon2d> lanelet_union_temp;
341-
boost::geometry::union_(poly, merged_polygon, lanelet_union_temp);
342-
343-
// Update merged_polygon by accumulating all merged results
344-
merged_polygon.clear();
345-
for (const auto & temp_poly : lanelet_union_temp) {
346-
merged_polygon.insert(merged_polygon.end(), temp_poly.begin(), temp_poly.end());
347-
}
348+
const auto & p = route_lanelet.polygon2d().basicPolygon();
349+
tier4_autoware_utils::Polygon2d poly = to_polygon2d(p);
350+
boost::geometry::union_(lanelet_unions, poly, result);
351+
lanelet_unions = result;
352+
result.clear();
348353
}
349-
if (merged_polygon.empty()) return std::nullopt;
350-
return merged_polygon;
354+
355+
if (lanelet_unions.empty()) return std::nullopt;
356+
return lanelet_unions.front();
351357
}();
352358

353359
return fused_lanelets;

control/mpc_lateral_controller/src/mpc.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -355,12 +355,15 @@ std::pair<bool, VectorXd> MPC::updateStateForDelayCompensation(
355355
MatrixXd Wd(DIM_X, 1);
356356
MatrixXd Cd(DIM_Y, DIM_X);
357357

358+
const double sign_vx = m_is_forward_shift ? 1 : -1;
359+
358360
MatrixXd x_curr = x0_orig;
359361
double mpc_curr_time = start_time;
360362
for (size_t i = 0; i < m_input_buffer.size(); ++i) {
361363
double k, v = 0.0;
362364
try {
363-
k = interpolation::lerp(traj.relative_time, traj.k, mpc_curr_time);
365+
// NOTE: When driving backward, the curvature's sign should be reversed.
366+
k = interpolation::lerp(traj.relative_time, traj.k, mpc_curr_time) * sign_vx;
364367
v = interpolation::lerp(traj.relative_time, traj.vx, mpc_curr_time);
365368
} catch (const std::exception & e) {
366369
RCLCPP_ERROR(m_logger, "mpc resample failed at delay compensation, stop mpc: %s", e.what());
@@ -446,6 +449,7 @@ MPCMatrix MPC::generateMPCMatrix(
446449
const double ref_vx = reference_trajectory.vx.at(i);
447450
const double ref_vx_squared = ref_vx * ref_vx;
448451

452+
// NOTE: When driving backward, the curvature's sign should be reversed.
449453
const double ref_k = reference_trajectory.k.at(i) * sign_vx;
450454
const double ref_smooth_k = reference_trajectory.smooth_k.at(i) * sign_vx;
451455

evaluator/perception_online_evaluator/package.xml

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<depend>diagnostic_msgs</depend>
2222
<depend>eigen</depend>
2323
<depend>geometry_msgs</depend>
24+
<depend>lanelet2_extension</depend>
2425
<depend>libgoogle-glog-dev</depend>
2526
<depend>motion_utils</depend>
2627
<depend>nav_msgs</depend>

evaluator/perception_online_evaluator/test/test_perception_online_evaluator_node.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ class EvalTest : public ::testing::Test
7979

8080
marker_sub_ = rclcpp::create_subscription<MarkerArray>(
8181
eval_node, "perception_online_evaluator/markers", 10,
82-
[this]([[maybe_unused]] const MarkerArray::SharedPtr msg) { has_received_marker_ = true; });
82+
[this]([[maybe_unused]] const MarkerArray::ConstSharedPtr msg) {
83+
has_received_marker_ = true;
84+
});
8385
uuid_ = generateUUID();
8486
}
8587

evaluator/tier4_metrics_rviz_plugin/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ find_package(Qt5 REQUIRED Core Widgets Charts)
88
set(QT_WIDGETS_LIB Qt5::Widgets)
99
set(QT_CHARTS_LIB Qt5::Charts)
1010
set(CMAKE_AUTOMOC ON)
11-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
1211
add_definitions(-DQT_NO_KEYWORDS)
1312

1413
ament_auto_add_library(${PROJECT_NAME} SHARED
1514
src/metrics_visualize_panel.cpp
15+
include/metrics_visualize_panel.hpp
1616
)
1717

1818
target_link_libraries(${PROJECT_NAME}

evaluator/tier4_metrics_rviz_plugin/src/metrics_visualize_panel.hpp evaluator/tier4_metrics_rviz_plugin/include/metrics_visualize_panel.hpp

+53-4
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
#ifndef Q_MOC_RUN
2020
#include <QChartView>
2121
#include <QColor>
22+
#include <QComboBox>
2223
#include <QGridLayout>
2324
#include <QHeaderView>
2425
#include <QLabel>
2526
#include <QLineSeries>
2627
#include <QPainter>
28+
#include <QPushButton>
2729
#include <QTableWidget>
2830
#include <QVBoxLayout>
2931
#endif
@@ -33,9 +35,12 @@
3335

3436
#include <diagnostic_msgs/msg/diagnostic_array.hpp>
3537

38+
#include <iostream>
3639
#include <limits>
3740
#include <string>
3841
#include <unordered_map>
42+
#include <utility>
43+
#include <vector>
3944

4045
namespace rviz_plugins
4146
{
@@ -62,10 +67,10 @@ struct Metric
6267
{
6368
auto label = new QLabel;
6469
label->setAlignment(Qt::AlignCenter);
65-
label->setText("metric_name");
70+
label->setText(QString::fromStdString(status.name));
6671
labels.emplace("metric_name", label);
6772

68-
header.push_back(QString::fromStdString(status.name));
73+
header.push_back("metric_name");
6974
}
7075

7176
for (const auto & [key, value] : status.values) {
@@ -146,6 +151,8 @@ struct Metric
146151

147152
QTableWidget * getTable() const { return table; }
148153

154+
std::unordered_map<std::string, QLabel *> getLabels() const { return labels; }
155+
149156
private:
150157
static std::optional<std::string> getValue(const DiagnosticStatus & status, std::string && key)
151158
{
@@ -186,19 +193,61 @@ class MetricsVisualizePanel : public rviz_common::Panel
186193
void onInitialize() override;
187194

188195
private Q_SLOTS:
196+
// Slot functions triggered by UI events
197+
void onTopicChanged();
198+
void onSpecificMetricChanged();
199+
void onClearButtonClicked();
200+
void onTabChanged();
189201

190202
private:
203+
// ROS 2 node and subscriptions for handling metrics data
191204
rclcpp::Node::SharedPtr raw_node_;
192205
rclcpp::TimerBase::SharedPtr timer_;
193-
rclcpp::Subscription<DiagnosticArray>::SharedPtr sub_;
206+
std::unordered_map<std::string, rclcpp::Subscription<DiagnosticArray>::SharedPtr> subscriptions_;
207+
208+
// Topics from which metrics are collected
209+
std::vector<std::string> topics_ = {
210+
"/diagnostic/planning_evaluator/metrics", "/diagnostic/perception_online_evaluator/metrics"};
194211

212+
// Timer and metrics message callback
195213
void onTimer();
196-
void onMetrics(const DiagnosticArray::ConstSharedPtr msg);
214+
void onMetrics(const DiagnosticArray::ConstSharedPtr & msg, const std::string & topic_name);
215+
216+
// Functions to update UI based on selected metrics
217+
void updateViews();
218+
void updateSelectedMetric(const std::string & metric_name);
197219

220+
// UI components
198221
QGridLayout * grid_;
222+
QComboBox * topic_selector_;
223+
QTabWidget * tab_widget_;
224+
225+
// "Specific Metrics" tab components
226+
QComboBox * specific_metric_selector_;
227+
QChartView * specific_metric_chart_view_;
228+
QTableWidget * specific_metric_table_;
229+
230+
// Selected metrics data
231+
std::optional<std::pair<std::string, Metric>> selected_metrics_;
199232

233+
// Cache for received messages by topics
234+
std::unordered_map<std::string, DiagnosticArray::ConstSharedPtr> current_msg_map_;
235+
236+
// Mapping from topics to metrics widgets (tables and charts)
237+
std::unordered_map<
238+
std::string, std::unordered_map<std::string, std::pair<QTableWidget *, QChartView *>>>
239+
topic_widgets_map_;
240+
241+
// Synchronization
200242
std::mutex mutex_;
243+
244+
// Stored metrics data
201245
std::unordered_map<std::string, Metric> metrics_;
246+
247+
// Utility functions for managing widget visibility based on topics
248+
void updateWidgetVisibility(const std::string & target_topic, const bool show);
249+
void showCurrentTopicWidgets();
250+
void hideInactiveTopicWidgets();
202251
};
203252
} // namespace rviz_plugins
204253

evaluator/tier4_metrics_rviz_plugin/package.xml

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<maintainer email="satoshi.ota@tier4.jp">Satoshi OTA</maintainer>
88
<maintainer email="kyoichi.sugahara@tier4.jp">Kyoichi Sugahara</maintainer>
99
<maintainer email="maxime.clement@tier4.jp">Maxime CLEMENT</maintainer>
10+
<maintainer email="kosuke.takeuchi@tier4.jp">Kosuke Takeuchi</maintainer>
11+
<maintainer email="fumiya.watanabe@tier4.jp">Fumiya Watanabe</maintainer>
1012
<license>Apache License 2.0</license>
1113

1214
<buildtool_depend>ament_cmake_auto</buildtool_depend>

0 commit comments

Comments
 (0)