From 7f9e48162aad44d120f10b0d04e5851ad200d149 Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Fri, 21 Nov 2025 13:59:16 +0900 Subject: [PATCH 1/7] Add support for retro multi-reflection filtering in Hesai drivers - Introduced a new function `supports_retro_multi_reflection_filtering` to check if the sensor model supports retro multi-reflection filtering. - Updated `HesaiSensorConfiguration` to include an optional `retro_multi_reflection_filtering` parameter. - Implemented methods in `HesaiHwInterface` for setting and getting the retro multi-reflection filtering state. - Modified configuration files and schemas to accommodate the new filtering option. - Enhanced logging to reflect changes in retro multi-reflection filtering settings during configuration checks. --- .../nebula_common/hesai/hesai_common.hpp | 25 ++++++++++++ .../hesai_hw_interface.hpp | 9 +++++ .../hesai_hw_interface.cpp | 40 +++++++++++++++++++ .../config/lidar/hesai/PandarQT128.param.yaml | 1 + nebula_ros/schema/PandarQT128.schema.json | 3 ++ nebula_ros/schema/sub/lidar_hesai.json | 5 +++ nebula_ros/src/hesai/hesai_ros_wrapper.cpp | 13 ++++++ 7 files changed, 96 insertions(+) diff --git a/nebula_common/include/nebula_common/hesai/hesai_common.hpp b/nebula_common/include/nebula_common/hesai/hesai_common.hpp index 5c7d51c25..4d666ce12 100644 --- a/nebula_common/include/nebula_common/hesai/hesai_common.hpp +++ b/nebula_common/include/nebula_common/hesai/hesai_common.hpp @@ -38,6 +38,7 @@ namespace drivers { bool supports_functional_safety(const SensorModel & sensor_model); +bool supports_retro_multi_reflection_filtering(const SensorModel & sensor_model); struct AdvancedFunctionalSafetyConfiguration { @@ -83,6 +84,7 @@ struct HesaiSensorConfiguration : public LidarConfigurationBase std::optional downsample_mask_path; bool hires_mode; std::optional blockage_mask_horizontal_bin_size_mdeg; + std::optional retro_multi_reflection_filtering; std::optional sync_diagnostics_topic; std::optional functional_safety; }; @@ -125,6 +127,13 @@ inline std::ostream & operator<<(std::ostream & os, HesaiSensorConfiguration con std::to_string(arg.blockage_mask_horizontal_bin_size_mdeg.value()) + " mdeg" : "disabled") << '\n'; + if (supports_retro_multi_reflection_filtering(arg.sensor_model)) { + os << "Retro Multi-Reflection Filtering: " + << (arg.retro_multi_reflection_filtering + ? (arg.retro_multi_reflection_filtering.value() ? "enabled" : "disabled") + : "not configured") + << '\n'; + } os << "Synchronization Diagnostics: " << (arg.sync_diagnostics_topic ? ("enabled, topic: " + arg.sync_diagnostics_topic.value()) : "disabled"); @@ -690,6 +699,22 @@ inline bool supports_blockage_mask(const SensorModel & sensor_model) } } +/// @brief Whether the given sensor model supports retro multi-reflection filtering +/// +/// Retro multi-reflection filtering is currently only supported for QT128. +/// +/// @param sensor_model Sensor model +/// @return True if the sensor model supports retro multi-reflection filtering, false otherwise +inline bool supports_retro_multi_reflection_filtering(const SensorModel & sensor_model) +{ + switch (sensor_model) { + case SensorModel::HESAI_PANDARQT128: + return true; + default: + return false; + } +} + } // namespace drivers } // namespace nebula diff --git a/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp b/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp index 13667b967..fa85401f6 100644 --- a/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp +++ b/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp @@ -85,6 +85,8 @@ const uint8_t g_ptc_command_set_rotate_direction = 0x2a; const uint8_t g_ptc_command_lidar_monitor = 0x27; const uint8_t g_ptc_command_set_up_close_blockage_detection = 0x58; const uint8_t g_ptc_command_get_up_close_blockage_detection = 0x59; +const uint8_t g_ptc_command_set_retro_multi_reflection_filtering = 0x5A; +const uint8_t g_ptc_command_get_retro_multi_reflection_filtering = 0x5B; const uint8_t g_ptc_error_code_no_error = 0x00; const uint8_t g_ptc_error_code_invalid_input_param = 0x01; @@ -323,6 +325,13 @@ class HesaiHwInterface /// @brief Getting values with PTC_COMMAND_GET_UP_CLOSE_BLOCKAGE_DETECTION /// @return Resulting status bool get_up_close_blockage_detection(); + /// @brief Setting values with PTC_COMMAND_SET_RETRO_MULTI_REFLECTION_FILTERING + /// @param enable Enable retro multi-reflection filtering + /// @return Resulting status + Status set_retro_multi_reflection_filtering(bool enable); + /// @brief Getting values with PTC_COMMAND_GET_RETRO_MULTI_REFLECTION_FILTERING + /// @return Resulting status + bool get_retro_multi_reflection_filtering(); /** * @brief Given the HW interface's sensor configuration and a given calibration, set the sensor diff --git a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp index 79736f979..2acd666c6 100644 --- a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp +++ b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp @@ -652,6 +652,30 @@ bool HesaiHwInterface::get_up_close_blockage_detection() return response[0] > 0x00; } +Status HesaiHwInterface::set_retro_multi_reflection_filtering(bool enable) +{ + std::vector request_payload; + request_payload.emplace_back(enable ? 0x01 : 0x00); + + auto response_or_err = + send_receive(g_ptc_command_set_retro_multi_reflection_filtering, request_payload); + response_or_err.value_or_throw(pretty_print_ptc_error(response_or_err.error_or({}))); + return Status::OK; +} + +bool HesaiHwInterface::get_retro_multi_reflection_filtering() +{ + auto response_or_err = send_receive(g_ptc_command_get_retro_multi_reflection_filtering); + auto response = + response_or_err.value_or_throw(pretty_print_ptc_error(response_or_err.error_or({}))); + + if (response.size() != 1) { + throw std::runtime_error("Unexpected payload size"); + } + + return response[0] > 0x00; +} + Status HesaiHwInterface::check_and_set_lidar_range( const HesaiCalibrationConfigurationBase & calibration) { @@ -1197,6 +1221,22 @@ HesaiStatus HesaiHwInterface::check_and_set_config( } } + if (supports_retro_multi_reflection_filtering(sensor_configuration->sensor_model)) { + if (sensor_configuration->retro_multi_reflection_filtering.has_value()) { + auto retro_filtering_currently_enabled = get_retro_multi_reflection_filtering(); + if (retro_filtering_currently_enabled != sensor_configuration->retro_multi_reflection_filtering.value()) { + logger_->info( + "current lidar retro_multi_reflection_filtering: " + + std::to_string(retro_filtering_currently_enabled)); + logger_->info( + "current configuration retro_multi_reflection_filtering: " + + std::to_string(sensor_configuration->retro_multi_reflection_filtering.value())); + logger_->info("Setting retro_multi_reflection_filtering via TCP."); + set_retro_multi_reflection_filtering(sensor_configuration->retro_multi_reflection_filtering.value()); + } + } + } + #ifdef WITH_DEBUG_STDOUT_HESAI_HW_INTERFACE logger_->debug("End CheckAndSetConfig(HesaiConfig)!"); #endif diff --git a/nebula_ros/config/lidar/hesai/PandarQT128.param.yaml b/nebula_ros/config/lidar/hesai/PandarQT128.param.yaml index 6e0ee152c..36203416d 100644 --- a/nebula_ros/config/lidar/hesai/PandarQT128.param.yaml +++ b/nebula_ros/config/lidar/hesai/PandarQT128.param.yaml @@ -30,6 +30,7 @@ ptp_lock_threshold: 100 retry_hw: true dual_return_distance_threshold: 0.1 + retro_multi_reflection_filtering: false diagnostics: pointcloud_publish_rate: frequency_ok: diff --git a/nebula_ros/schema/PandarQT128.schema.json b/nebula_ros/schema/PandarQT128.schema.json index 38f3f9f4d..add10e43d 100644 --- a/nebula_ros/schema/PandarQT128.schema.json +++ b/nebula_ros/schema/PandarQT128.schema.json @@ -108,6 +108,9 @@ "dual_return_distance_threshold": { "$ref": "sub/misc.json#/definitions/dual_return_distance_threshold" }, + "retro_multi_reflection_filtering": { + "$ref": "sub/lidar_hesai.json#/definitions/retro_multi_reflection_filtering" + }, "point_filters": { "$ref": "sub/misc.json#/definitions/point_filters" }, diff --git a/nebula_ros/schema/sub/lidar_hesai.json b/nebula_ros/schema/sub/lidar_hesai.json index 22480a194..4dc5dae9b 100644 --- a/nebula_ros/schema/sub/lidar_hesai.json +++ b/nebula_ros/schema/sub/lidar_hesai.json @@ -109,6 +109,11 @@ "description": "Whether to turn on or off the sensor's high resolution mode", "default": false }, + "retro_multi_reflection_filtering": { + "type": "boolean", + "description": "Whether to turn on or off retro multi-reflection filtering (QT128 only)", + "default": false + }, "blockage_mask_output": { "type": "object", "description": "Enables blockage detection and outputs a blockage mask per scan", diff --git a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp index c00d44580..1938d5fb6 100644 --- a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp +++ b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp @@ -189,6 +189,13 @@ nebula::Status HesaiRosWrapper::declare_and_get_sensor_config_params() config.hires_mode = this->declare_parameter("hires_mode", param_read_write()); } + if (drivers::supports_retro_multi_reflection_filtering(config.sensor_model)) { + config.retro_multi_reflection_filtering = + this->declare_parameter("retro_multi_reflection_filtering", param_read_write()); + } else { + config.retro_multi_reflection_filtering = std::nullopt; + } + { rcl_interfaces::msg::ParameterDescriptor descriptor = param_read_write(); RCLCPP_DEBUG_STREAM(get_logger(), config.sensor_model); @@ -480,6 +487,12 @@ rcl_interfaces::msg::SetParametersResult HesaiRosWrapper::on_parameter_change( get_param( p, "blockage_mask_output.horizontal_bin_size_mdeg", blockage_mask_horizontal_bin_size_mdeg); + if (drivers::supports_retro_multi_reflection_filtering(sensor_cfg_ptr_->sensor_model)) { + got_any = get_param(p, "retro_multi_reflection_filtering", new_cfg.retro_multi_reflection_filtering) | got_any; + } else { + new_cfg.retro_multi_reflection_filtering = std::nullopt; + } + // Currently, all of the sub-wrappers read-only parameters, so they do not be queried for updates if (!got_any) { From 23b166c43bb2ef2a23c6a5bac154386b49a6423a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 05:05:30 +0000 Subject: [PATCH 2/7] ci(pre-commit): autofix --- .../src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp | 7 +++++-- nebula_ros/src/hesai/hesai_ros_wrapper.cpp | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp index 2acd666c6..c099cdf6f 100644 --- a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp +++ b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp @@ -1224,7 +1224,9 @@ HesaiStatus HesaiHwInterface::check_and_set_config( if (supports_retro_multi_reflection_filtering(sensor_configuration->sensor_model)) { if (sensor_configuration->retro_multi_reflection_filtering.has_value()) { auto retro_filtering_currently_enabled = get_retro_multi_reflection_filtering(); - if (retro_filtering_currently_enabled != sensor_configuration->retro_multi_reflection_filtering.value()) { + if ( + retro_filtering_currently_enabled != + sensor_configuration->retro_multi_reflection_filtering.value()) { logger_->info( "current lidar retro_multi_reflection_filtering: " + std::to_string(retro_filtering_currently_enabled)); @@ -1232,7 +1234,8 @@ HesaiStatus HesaiHwInterface::check_and_set_config( "current configuration retro_multi_reflection_filtering: " + std::to_string(sensor_configuration->retro_multi_reflection_filtering.value())); logger_->info("Setting retro_multi_reflection_filtering via TCP."); - set_retro_multi_reflection_filtering(sensor_configuration->retro_multi_reflection_filtering.value()); + set_retro_multi_reflection_filtering( + sensor_configuration->retro_multi_reflection_filtering.value()); } } } diff --git a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp index 1938d5fb6..508e14015 100644 --- a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp +++ b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp @@ -488,7 +488,9 @@ rcl_interfaces::msg::SetParametersResult HesaiRosWrapper::on_parameter_change( p, "blockage_mask_output.horizontal_bin_size_mdeg", blockage_mask_horizontal_bin_size_mdeg); if (drivers::supports_retro_multi_reflection_filtering(sensor_cfg_ptr_->sensor_model)) { - got_any = get_param(p, "retro_multi_reflection_filtering", new_cfg.retro_multi_reflection_filtering) | got_any; + got_any = + get_param(p, "retro_multi_reflection_filtering", new_cfg.retro_multi_reflection_filtering) | + got_any; } else { new_cfg.retro_multi_reflection_filtering = std::nullopt; } From aa011bd9514665a8bf9beedca223d2e38f69c377 Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Fri, 21 Nov 2025 14:07:09 +0900 Subject: [PATCH 3/7] fix: correct wrong PTC codes Signed-off-by: Max SCHMELLER --- .../nebula_hw_interfaces_hesai/hesai_hw_interface.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp b/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp index fa85401f6..3fca0bce4 100644 --- a/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp +++ b/nebula_hw_interfaces/include/nebula_hw_interfaces/nebula_hw_interfaces_hesai/hesai_hw_interface.hpp @@ -85,8 +85,8 @@ const uint8_t g_ptc_command_set_rotate_direction = 0x2a; const uint8_t g_ptc_command_lidar_monitor = 0x27; const uint8_t g_ptc_command_set_up_close_blockage_detection = 0x58; const uint8_t g_ptc_command_get_up_close_blockage_detection = 0x59; -const uint8_t g_ptc_command_set_retro_multi_reflection_filtering = 0x5A; -const uint8_t g_ptc_command_get_retro_multi_reflection_filtering = 0x5B; +const uint8_t g_ptc_command_set_retro_multi_reflection_filtering = 0x47; +const uint8_t g_ptc_command_get_retro_multi_reflection_filtering = 0x48; const uint8_t g_ptc_error_code_no_error = 0x00; const uint8_t g_ptc_error_code_invalid_input_param = 0x01; From 3940320bfda25a555721a044fab81473055b38e5 Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Tue, 25 Nov 2025 18:11:43 +0900 Subject: [PATCH 4/7] chore: extend feature to OT128 Signed-off-by: Max SCHMELLER --- nebula_common/include/nebula_common/hesai/hesai_common.hpp | 3 +-- nebula_ros/config/lidar/hesai/Pandar128E4X.param.yaml | 1 + nebula_ros/schema/Pandar128E4X.schema.json | 3 +++ nebula_ros/schema/sub/lidar_hesai.json | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/nebula_common/include/nebula_common/hesai/hesai_common.hpp b/nebula_common/include/nebula_common/hesai/hesai_common.hpp index 4d666ce12..1fd332eb7 100644 --- a/nebula_common/include/nebula_common/hesai/hesai_common.hpp +++ b/nebula_common/include/nebula_common/hesai/hesai_common.hpp @@ -701,14 +701,13 @@ inline bool supports_blockage_mask(const SensorModel & sensor_model) /// @brief Whether the given sensor model supports retro multi-reflection filtering /// -/// Retro multi-reflection filtering is currently only supported for QT128. -/// /// @param sensor_model Sensor model /// @return True if the sensor model supports retro multi-reflection filtering, false otherwise inline bool supports_retro_multi_reflection_filtering(const SensorModel & sensor_model) { switch (sensor_model) { case SensorModel::HESAI_PANDARQT128: + case SensorModel::HESAI_PANDAR128_E4X: return true; default: return false; diff --git a/nebula_ros/config/lidar/hesai/Pandar128E4X.param.yaml b/nebula_ros/config/lidar/hesai/Pandar128E4X.param.yaml index 4d5878cf5..c5cd798aa 100644 --- a/nebula_ros/config/lidar/hesai/Pandar128E4X.param.yaml +++ b/nebula_ros/config/lidar/hesai/Pandar128E4X.param.yaml @@ -30,6 +30,7 @@ ptp_lock_threshold: 100 retry_hw: true dual_return_distance_threshold: 0.1 + retro_multi_reflection_filtering: false hires_mode: true diagnostics: pointcloud_publish_rate: diff --git a/nebula_ros/schema/Pandar128E4X.schema.json b/nebula_ros/schema/Pandar128E4X.schema.json index 59927847d..5997ee055 100644 --- a/nebula_ros/schema/Pandar128E4X.schema.json +++ b/nebula_ros/schema/Pandar128E4X.schema.json @@ -114,6 +114,9 @@ "dual_return_distance_threshold": { "$ref": "sub/misc.json#/definitions/dual_return_distance_threshold" }, + "retro_multi_reflection_filtering": { + "$ref": "sub/lidar_hesai.json#/definitions/retro_multi_reflection_filtering" + }, "point_filters": { "$ref": "sub/misc.json#/definitions/point_filters" }, diff --git a/nebula_ros/schema/sub/lidar_hesai.json b/nebula_ros/schema/sub/lidar_hesai.json index 4dc5dae9b..0162b130d 100644 --- a/nebula_ros/schema/sub/lidar_hesai.json +++ b/nebula_ros/schema/sub/lidar_hesai.json @@ -111,7 +111,7 @@ }, "retro_multi_reflection_filtering": { "type": "boolean", - "description": "Whether to turn on or off retro multi-reflection filtering (QT128 only)", + "description": "Whether to turn on or off retro multi-reflection filtering", "default": false }, "blockage_mask_output": { From 1a0f697b92d49074b0da2f1472aaa8a7402b9280 Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Tue, 25 Nov 2025 18:23:18 +0900 Subject: [PATCH 5/7] chore: simplify retro filter config Signed-off-by: Max SCHMELLER --- .../nebula_common/hesai/hesai_common.hpp | 6 ++--- .../hesai_hw_interface.cpp | 26 ++++++++----------- nebula_ros/src/hesai/hesai_ros_wrapper.cpp | 2 -- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/nebula_common/include/nebula_common/hesai/hesai_common.hpp b/nebula_common/include/nebula_common/hesai/hesai_common.hpp index 1fd332eb7..d1e156963 100644 --- a/nebula_common/include/nebula_common/hesai/hesai_common.hpp +++ b/nebula_common/include/nebula_common/hesai/hesai_common.hpp @@ -84,7 +84,7 @@ struct HesaiSensorConfiguration : public LidarConfigurationBase std::optional downsample_mask_path; bool hires_mode; std::optional blockage_mask_horizontal_bin_size_mdeg; - std::optional retro_multi_reflection_filtering; + bool retro_multi_reflection_filtering; std::optional sync_diagnostics_topic; std::optional functional_safety; }; @@ -129,9 +129,7 @@ inline std::ostream & operator<<(std::ostream & os, HesaiSensorConfiguration con << '\n'; if (supports_retro_multi_reflection_filtering(arg.sensor_model)) { os << "Retro Multi-Reflection Filtering: " - << (arg.retro_multi_reflection_filtering - ? (arg.retro_multi_reflection_filtering.value() ? "enabled" : "disabled") - : "not configured") + << (arg.retro_multi_reflection_filtering ? "enabled" : "disabled") << '\n'; } os << "Synchronization Diagnostics: " diff --git a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp index c099cdf6f..ecbf3e04e 100644 --- a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp +++ b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp @@ -1222,21 +1222,17 @@ HesaiStatus HesaiHwInterface::check_and_set_config( } if (supports_retro_multi_reflection_filtering(sensor_configuration->sensor_model)) { - if (sensor_configuration->retro_multi_reflection_filtering.has_value()) { - auto retro_filtering_currently_enabled = get_retro_multi_reflection_filtering(); - if ( - retro_filtering_currently_enabled != - sensor_configuration->retro_multi_reflection_filtering.value()) { - logger_->info( - "current lidar retro_multi_reflection_filtering: " + - std::to_string(retro_filtering_currently_enabled)); - logger_->info( - "current configuration retro_multi_reflection_filtering: " + - std::to_string(sensor_configuration->retro_multi_reflection_filtering.value())); - logger_->info("Setting retro_multi_reflection_filtering via TCP."); - set_retro_multi_reflection_filtering( - sensor_configuration->retro_multi_reflection_filtering.value()); - } + auto retro_filtering_currently_enabled = get_retro_multi_reflection_filtering(); + if ( + retro_filtering_currently_enabled != sensor_configuration->retro_multi_reflection_filtering) { + logger_->info( + "current lidar retro_multi_reflection_filtering: " + + std::to_string(retro_filtering_currently_enabled)); + logger_->info( + "current configuration retro_multi_reflection_filtering: " + + std::to_string(sensor_configuration->retro_multi_reflection_filtering)); + logger_->info("Setting retro_multi_reflection_filtering via TCP."); + set_retro_multi_reflection_filtering(sensor_configuration->retro_multi_reflection_filtering); } } diff --git a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp index 508e14015..9f508ad0f 100644 --- a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp +++ b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp @@ -192,8 +192,6 @@ nebula::Status HesaiRosWrapper::declare_and_get_sensor_config_params() if (drivers::supports_retro_multi_reflection_filtering(config.sensor_model)) { config.retro_multi_reflection_filtering = this->declare_parameter("retro_multi_reflection_filtering", param_read_write()); - } else { - config.retro_multi_reflection_filtering = std::nullopt; } { From f627b4747cc480bcca1c6617f3d940f3381b65fb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 25 Nov 2025 09:23:50 +0000 Subject: [PATCH 6/7] ci(pre-commit): autofix --- nebula_common/include/nebula_common/hesai/hesai_common.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nebula_common/include/nebula_common/hesai/hesai_common.hpp b/nebula_common/include/nebula_common/hesai/hesai_common.hpp index d1e156963..78ebace47 100644 --- a/nebula_common/include/nebula_common/hesai/hesai_common.hpp +++ b/nebula_common/include/nebula_common/hesai/hesai_common.hpp @@ -129,8 +129,7 @@ inline std::ostream & operator<<(std::ostream & os, HesaiSensorConfiguration con << '\n'; if (supports_retro_multi_reflection_filtering(arg.sensor_model)) { os << "Retro Multi-Reflection Filtering: " - << (arg.retro_multi_reflection_filtering ? "enabled" : "disabled") - << '\n'; + << (arg.retro_multi_reflection_filtering ? "enabled" : "disabled") << '\n'; } os << "Synchronization Diagnostics: " << (arg.sync_diagnostics_topic ? ("enabled, topic: " + arg.sync_diagnostics_topic.value()) From 04e9f9366483268527db490a6b72827a267f965c Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Tue, 25 Nov 2025 18:25:26 +0900 Subject: [PATCH 7/7] chore: forgot this line Signed-off-by: Max SCHMELLER --- nebula_ros/src/hesai/hesai_ros_wrapper.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp index 9f508ad0f..5adaba966 100644 --- a/nebula_ros/src/hesai/hesai_ros_wrapper.cpp +++ b/nebula_ros/src/hesai/hesai_ros_wrapper.cpp @@ -489,8 +489,6 @@ rcl_interfaces::msg::SetParametersResult HesaiRosWrapper::on_parameter_change( got_any = get_param(p, "retro_multi_reflection_filtering", new_cfg.retro_multi_reflection_filtering) | got_any; - } else { - new_cfg.retro_multi_reflection_filtering = std::nullopt; } // Currently, all of the sub-wrappers read-only parameters, so they do not be queried for updates