feat: only apply provided launch settings

This commit is contained in:
ob-yalian
2026-05-27 09:47:40 +08:00
parent 25774f6824
commit 790e9f712f
2 changed files with 120 additions and 34 deletions
@@ -237,6 +237,10 @@ class OBCameraNode {
void loadConfigJson(); void loadConfigJson();
void captureInitialRosParameters();
bool isLaunchParamProvided(const std::string &param_name) const;
bool exportConfigJsonToFile(const std::string &file_path, std::string &message); bool exportConfigJsonToFile(const std::string &file_path, std::string &message);
void exportConfigJsonIfRequested(); void exportConfigJsonIfRequested();
@@ -881,6 +885,7 @@ class OBCameraNode {
OBStreamType align_target_stream_ = OB_STREAM_COLOR; OBStreamType align_target_stream_ = OB_STREAM_COLOR;
bool retry_on_usb3_detection_failure_ = false; bool retry_on_usb3_detection_failure_ = false;
bool config_json_loaded_ = false; bool config_json_loaded_ = false;
std::unordered_set<std::string> initial_ros_params_;
std::atomic_bool is_camera_node_initialized_{false}; std::atomic_bool is_camera_node_initialized_{false};
int laser_energy_level_ = -1; int laser_energy_level_ = -1;
ob::PointCloudFilter depth_point_cloud_filter_; ob::PointCloudFilter depth_point_cloud_filter_;
+115 -34
View File
@@ -823,21 +823,28 @@ void OBCameraNode::setupDevices() {
} }
auto device_info = device_->getDeviceInfo(); auto device_info = device_->getDeviceInfo();
CHECK_NOTNULL(device_info); CHECK_NOTNULL(device_info);
auto should_apply_launch_config = [this](const std::string &param_name) {
return isLaunchParamProvided(param_name);
};
if (retry_on_usb3_detection_failure_ && if (should_apply_launch_config("retry_on_usb3_detection_failure") &&
retry_on_usb3_detection_failure_ &&
device_->isPropertySupported(OB_PROP_DEVICE_USB3_REPEAT_IDENTIFY_BOOL, device_->isPropertySupported(OB_PROP_DEVICE_USB3_REPEAT_IDENTIFY_BOOL,
OB_PERMISSION_READ_WRITE)) { OB_PERMISSION_READ_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_DEVICE_USB3_REPEAT_IDENTIFY_BOOL, TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_DEVICE_USB3_REPEAT_IDENTIFY_BOOL,
retry_on_usb3_detection_failure_); retry_on_usb3_detection_failure_);
} }
if (device_->isPropertySupported(OB_PROP_HEARTBEAT_BOOL, OB_PERMISSION_READ_WRITE)) { if (should_apply_launch_config("enable_heartbeat") &&
device_->isPropertySupported(OB_PROP_HEARTBEAT_BOOL, OB_PERMISSION_READ_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_HEARTBEAT_BOOL, enable_heartbeat_); TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_HEARTBEAT_BOOL, enable_heartbeat_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, logger_,
"Current heartbeat: " << (device_->getBoolProperty(OB_PROP_HEARTBEAT_BOOL) ? "ON" : "OFF")); "Current heartbeat: " << (device_->getBoolProperty(OB_PROP_HEARTBEAT_BOOL) ? "ON" : "OFF"));
} }
device_->enableFirmwareLog(enable_firmware_log_); if (should_apply_launch_config("enable_firmware_log")) {
RCLCPP_INFO_STREAM(logger_, "Set firmware log to " << (enable_firmware_log_ ? "ON" : "OFF")); device_->enableFirmwareLog(enable_firmware_log_);
RCLCPP_INFO_STREAM(logger_, "Set firmware log to " << (enable_firmware_log_ ? "ON" : "OFF"));
}
if (max_depth_limit_ > 0 && if (max_depth_limit_ > 0 &&
device_->isPropertySupported(OB_PROP_MAX_DEPTH_INT, OB_PERMISSION_READ_WRITE)) { device_->isPropertySupported(OB_PROP_MAX_DEPTH_INT, OB_PERMISSION_READ_WRITE)) {
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_MAX_DEPTH_INT, max_depth_limit_); TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_MAX_DEPTH_INT, max_depth_limit_);
@@ -866,7 +873,8 @@ void OBCameraNode::setupDevices() {
RCLCPP_DEBUG_STREAM(logger_, "Create align filter"); RCLCPP_DEBUG_STREAM(logger_, "Create align filter");
align_filter_ = std::make_unique<ob::Align>(align_target_stream_); align_filter_ = std::make_unique<ob::Align>(align_target_stream_);
} }
if (sensors_.find(DEPTH) != sensors_.end() && if (should_apply_launch_config("disparity_to_depth_mode") &&
sensors_.find(DEPTH) != sensors_.end() &&
device_->isPropertySupported(OB_PROP_DISPARITY_TO_DEPTH_BOOL, OB_PERMISSION_READ_WRITE) && device_->isPropertySupported(OB_PROP_DISPARITY_TO_DEPTH_BOOL, OB_PERMISSION_READ_WRITE) &&
device_->isPropertySupported(OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, OB_PERMISSION_READ_WRITE)) { device_->isPropertySupported(OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, OB_PERMISSION_READ_WRITE)) {
if (disparity_to_depth_mode_ == "HW") { if (disparity_to_depth_mode_ == "HW") {
@@ -886,7 +894,8 @@ void OBCameraNode::setupDevices() {
<< disparity_to_depth_mode_ << "', keeping default settings"); << disparity_to_depth_mode_ << "', keeping default settings");
} }
} }
if (device_->isPropertySupported(OB_PROP_LDP_BOOL, OB_PERMISSION_READ_WRITE)) { if (should_apply_launch_config("enable_ldp") &&
device_->isPropertySupported(OB_PROP_LDP_BOOL, OB_PERMISSION_READ_WRITE)) {
if (device_->isPropertySupported(OB_PROP_LASER_CONTROL_INT, OB_PERMISSION_READ_WRITE)) { if (device_->isPropertySupported(OB_PROP_LASER_CONTROL_INT, OB_PERMISSION_READ_WRITE)) {
auto laser_enable = device_->getIntProperty(OB_PROP_LASER_CONTROL_INT); auto laser_enable = device_->getIntProperty(OB_PROP_LASER_CONTROL_INT);
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_LDP_BOOL, enable_ldp_); TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_LDP_BOOL, enable_ldp_);
@@ -916,13 +925,15 @@ void OBCameraNode::setupDevices() {
OB_PROP_LASER_POWER_LEVEL_CONTROL_INT)); OB_PROP_LASER_POWER_LEVEL_CONTROL_INT));
} }
} }
if (device_->isPropertySupported(OB_PROP_LASER_CONTROL_INT, OB_PERMISSION_READ_WRITE)) { if (should_apply_launch_config("enable_laser") &&
device_->isPropertySupported(OB_PROP_LASER_CONTROL_INT, OB_PERMISSION_READ_WRITE)) {
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_LASER_CONTROL_INT, enable_laser_); TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_LASER_CONTROL_INT, enable_laser_);
RCLCPP_INFO_STREAM(logger_, RCLCPP_INFO_STREAM(logger_,
"Current G300 laser control: " "Current G300 laser control: "
<< (device_->getIntProperty(OB_PROP_LASER_CONTROL_INT) ? "ON" : "OFF")); << (device_->getIntProperty(OB_PROP_LASER_CONTROL_INT) ? "ON" : "OFF"));
} }
if (device_->isPropertySupported(OB_PROP_LASER_BOOL, OB_PERMISSION_READ_WRITE)) { if (should_apply_launch_config("enable_laser") &&
device_->isPropertySupported(OB_PROP_LASER_BOOL, OB_PERMISSION_READ_WRITE)) {
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_LASER_BOOL, enable_laser_); TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_LASER_BOOL, enable_laser_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, logger_,
@@ -954,7 +965,8 @@ void OBCameraNode::setupDevices() {
}); });
} }
} }
if (device_->isPropertySupported(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL, if (should_apply_launch_config("enable_ptp_config") &&
device_->isPropertySupported(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL,
OB_PERMISSION_READ_WRITE)) { OB_PERMISSION_READ_WRITE)) {
device_->setBoolProperty(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL, enable_ptp_config_); device_->setBoolProperty(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL, enable_ptp_config_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
@@ -1011,7 +1023,8 @@ void OBCameraNode::setupDevices() {
} else if (stream_index == COLOR_RIGHT) { } else if (stream_index == COLOR_RIGHT) {
mirrorPropertyID = OB_PROP_COLOR_RIGHT_MIRROR_BOOL; mirrorPropertyID = OB_PROP_COLOR_RIGHT_MIRROR_BOOL;
} }
if (device_->isPropertySupported(mirrorPropertyID, OB_PERMISSION_WRITE)) { if (should_apply_launch_config(stream_name_[stream_index] + "_mirror") &&
device_->isPropertySupported(mirrorPropertyID, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, mirrorPropertyID, mirror_stream_[stream_index]); TRY_TO_SET_PROPERTY(setBoolProperty, mirrorPropertyID, mirror_stream_[stream_index]);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, "Current " << stream_name_[stream_index] << " mirror: " logger_, "Current " << stream_name_[stream_index] << " mirror: "
@@ -1033,7 +1046,8 @@ void OBCameraNode::setupDevices() {
} else if (stream_index == COLOR_RIGHT) { } else if (stream_index == COLOR_RIGHT) {
flipPropertyID = OB_PROP_COLOR_RIGHT_FLIP_BOOL; flipPropertyID = OB_PROP_COLOR_RIGHT_FLIP_BOOL;
} }
if (device_->isPropertySupported(flipPropertyID, OB_PERMISSION_WRITE)) { if (should_apply_launch_config(stream_name_[stream_index] + "_flip") &&
device_->isPropertySupported(flipPropertyID, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, flipPropertyID, flip_stream_[stream_index]); TRY_TO_SET_PROPERTY(setBoolProperty, flipPropertyID, flip_stream_[stream_index]);
RCLCPP_INFO_STREAM(logger_, RCLCPP_INFO_STREAM(logger_,
"Current " << stream_name_[stream_index] << " flip: " "Current " << stream_name_[stream_index] << " flip: "
@@ -1064,7 +1078,8 @@ void OBCameraNode::setupDevices() {
} }
} }
if (device_->isPropertySupported(OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_color_auto_white_balance") &&
device_->isPropertySupported(OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL, TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL,
enable_color_auto_white_balance_); enable_color_auto_white_balance_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
@@ -1072,7 +1087,7 @@ void OBCameraNode::setupDevices() {
"Current color auto white balance: " "Current color auto white balance: "
<< (device_->getBoolProperty(OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL) ? "ON" : "OFF")); << (device_->getBoolProperty(OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL) ? "ON" : "OFF"));
} }
if (!color_preset_.empty() && if (should_apply_launch_config("color_preset") && !color_preset_.empty() &&
device_->isPropertySupported(OB_PROP_COLOR_PRESET_PRIORITY_INT, OB_PERMISSION_WRITE)) { device_->isPropertySupported(OB_PROP_COLOR_PRESET_PRIORITY_INT, OB_PERMISSION_WRITE)) {
std::string preset_key = color_preset_; std::string preset_key = color_preset_;
std::transform(preset_key.begin(), preset_key.end(), preset_key.begin(), ::tolower); std::transform(preset_key.begin(), preset_key.end(), preset_key.begin(), ::tolower);
@@ -1118,7 +1133,8 @@ void OBCameraNode::setupDevices() {
"Current color gain: " << device_->getIntProperty(OB_PROP_COLOR_GAIN_INT)); "Current color gain: " << device_->getIntProperty(OB_PROP_COLOR_GAIN_INT));
} }
} }
if (device_->isPropertySupported(OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_color_auto_exposure_priority") &&
device_->isPropertySupported(OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT, OB_PERMISSION_WRITE)) {
int set_enable_color_auto_exposure_priority = enable_color_auto_exposure_priority_ ? 1 : 0; int set_enable_color_auto_exposure_priority = enable_color_auto_exposure_priority_ ? 1 : 0;
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT, TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT,
set_enable_color_auto_exposure_priority); set_enable_color_auto_exposure_priority);
@@ -1127,7 +1143,8 @@ void OBCameraNode::setupDevices() {
"Current color auto exposure priority: " "Current color auto exposure priority: "
<< (device_->getIntProperty(OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT) ? "ON" : "OFF")); << (device_->getIntProperty(OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT) ? "ON" : "OFF"));
} }
if (device_->isPropertySupported(OB_PROP_COLOR_AUTO_EXPOSURE_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_color_auto_exposure") &&
device_->isPropertySupported(OB_PROP_COLOR_AUTO_EXPOSURE_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_COLOR_AUTO_EXPOSURE_BOOL, TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_COLOR_AUTO_EXPOSURE_BOOL,
enable_color_auto_exposure_); enable_color_auto_exposure_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
@@ -1274,7 +1291,8 @@ void OBCameraNode::setupDevices() {
RCLCPP_INFO_STREAM(logger_, "Current color denoising level: " RCLCPP_INFO_STREAM(logger_, "Current color denoising level: "
<< device_->getIntProperty(OB_PROP_COLOR_DENOISING_LEVEL_INT)); << device_->getIntProperty(OB_PROP_COLOR_DENOISING_LEVEL_INT));
} }
if (device_->isPropertySupported(OB_PROP_COLOR_ANTI_FLICKER_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("color_anti_flicker") &&
device_->isPropertySupported(OB_PROP_COLOR_ANTI_FLICKER_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_COLOR_ANTI_FLICKER_BOOL, color_anti_flicker_); TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_COLOR_ANTI_FLICKER_BOOL, color_anti_flicker_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, "Current color anti-flicker to " logger_, "Current color anti-flicker to "
@@ -1320,7 +1338,8 @@ void OBCameraNode::setupDevices() {
"Current depth gain: " << device_->getIntProperty(OB_PROP_DEPTH_GAIN_INT)); "Current depth gain: " << device_->getIntProperty(OB_PROP_DEPTH_GAIN_INT));
} }
} }
if (sensors_.find(DEPTH) != sensors_.end() && if (should_apply_launch_config("enable_depth_auto_exposure_priority") &&
sensors_.find(DEPTH) != sensors_.end() &&
device_->isPropertySupported(OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT, OB_PERMISSION_WRITE)) { device_->isPropertySupported(OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT, OB_PERMISSION_WRITE)) {
int set_enable_depth_auto_exposure_priority = enable_depth_auto_exposure_priority_ ? 1 : 0; int set_enable_depth_auto_exposure_priority = enable_depth_auto_exposure_priority_ ? 1 : 0;
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT, TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT,
@@ -1330,7 +1349,8 @@ void OBCameraNode::setupDevices() {
"Current depth auto exposure priority: " "Current depth auto exposure priority: "
<< (device_->getIntProperty(OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT) ? "ON" : "OFF")); << (device_->getIntProperty(OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT) ? "ON" : "OFF"));
} }
if (device_->isPropertySupported(OB_PROP_IR_AUTO_EXPOSURE_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_ir_auto_exposure") &&
device_->isPropertySupported(OB_PROP_IR_AUTO_EXPOSURE_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_IR_AUTO_EXPOSURE_BOOL, enable_ir_auto_exposure_); TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_IR_AUTO_EXPOSURE_BOOL, enable_ir_auto_exposure_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, "Current IR auto exposure: " logger_, "Current IR auto exposure: "
@@ -1398,14 +1418,16 @@ void OBCameraNode::setupDevices() {
"Current IR gain: " << device_->getIntProperty(OB_PROP_IR_GAIN_INT)); "Current IR gain: " << device_->getIntProperty(OB_PROP_IR_GAIN_INT));
} }
} }
if (device_->isPropertySupported(OB_PROP_IR_LONG_EXPOSURE_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_ir_long_exposure") &&
device_->isPropertySupported(OB_PROP_IR_LONG_EXPOSURE_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_IR_LONG_EXPOSURE_BOOL, enable_ir_long_exposure_); TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_IR_LONG_EXPOSURE_BOOL, enable_ir_long_exposure_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, "Current IR long exposure: " logger_, "Current IR long exposure: "
<< (device_->getBoolProperty(OB_PROP_IR_LONG_EXPOSURE_BOOL) ? "ON" : "OFF")); << (device_->getBoolProperty(OB_PROP_IR_LONG_EXPOSURE_BOOL) ? "ON" : "OFF"));
} }
if (enable_noise_removal_filter_ && sensors_.find(DEPTH) != sensors_.end() && if (should_apply_launch_config("enable_noise_removal_filter") && enable_noise_removal_filter_ &&
sensors_.find(DEPTH) != sensors_.end() &&
device_->isPropertySupported(OB_PROP_DEPTH_MAX_DIFF_INT, OB_PERMISSION_WRITE)) { device_->isPropertySupported(OB_PROP_DEPTH_MAX_DIFF_INT, OB_PERMISSION_WRITE)) {
auto default_noise_removal_filter_min_diff = auto default_noise_removal_filter_min_diff =
device_->getIntProperty(OB_PROP_DEPTH_MAX_DIFF_INT); device_->getIntProperty(OB_PROP_DEPTH_MAX_DIFF_INT);
@@ -1426,7 +1448,8 @@ void OBCameraNode::setupDevices() {
<< device_->getIntProperty(OB_PROP_DEPTH_MAX_DIFF_INT)); << device_->getIntProperty(OB_PROP_DEPTH_MAX_DIFF_INT));
} }
if (enable_noise_removal_filter_ && sensors_.find(DEPTH) != sensors_.end() && if (should_apply_launch_config("enable_noise_removal_filter") && enable_noise_removal_filter_ &&
sensors_.find(DEPTH) != sensors_.end() &&
device_->isPropertySupported(OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT, OB_PERMISSION_WRITE)) { device_->isPropertySupported(OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT, OB_PERMISSION_WRITE)) {
auto default_noise_removal_filter_max_size = auto default_noise_removal_filter_max_size =
device_->getIntProperty(OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT); device_->getIntProperty(OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT);
@@ -1446,7 +1469,8 @@ void OBCameraNode::setupDevices() {
RCLCPP_INFO_STREAM(logger_, "Current noise_removal_filter_max_size: " RCLCPP_INFO_STREAM(logger_, "Current noise_removal_filter_max_size: "
<< device_->getIntProperty(OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT)); << device_->getIntProperty(OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT));
} }
if (sensors_.find(DEPTH) != sensors_.end() && if (should_apply_launch_config("enable_noise_removal_filter") &&
sensors_.find(DEPTH) != sensors_.end() &&
device_->isPropertySupported(OB_PROP_DEPTH_SOFT_FILTER_BOOL, OB_PERMISSION_READ_WRITE)) { device_->isPropertySupported(OB_PROP_DEPTH_SOFT_FILTER_BOOL, OB_PERMISSION_READ_WRITE)) {
device_->setBoolProperty(OB_PROP_DEPTH_SOFT_FILTER_BOOL, enable_noise_removal_filter_); device_->setBoolProperty(OB_PROP_DEPTH_SOFT_FILTER_BOOL, enable_noise_removal_filter_);
RCLCPP_INFO_STREAM(logger_, "Set noise removal filter to " RCLCPP_INFO_STREAM(logger_, "Set noise removal filter to "
@@ -1468,7 +1492,8 @@ void OBCameraNode::setupDevices() {
RCLCPP_INFO_STREAM(logger_, "Current disparity range mode: " RCLCPP_INFO_STREAM(logger_, "Current disparity range mode: "
<< disparityRangeModeToString(current_disparity_range_mode)); << disparityRangeModeToString(current_disparity_range_mode));
} }
if (device_->isPropertySupported(OB_PROP_HW_NOISE_REMOVE_FILTER_ENABLE_BOOL, if (should_apply_launch_config("enable_hardware_noise_removal_filter") &&
device_->isPropertySupported(OB_PROP_HW_NOISE_REMOVE_FILTER_ENABLE_BOOL,
OB_PERMISSION_READ_WRITE)) { OB_PERMISSION_READ_WRITE)) {
device_->setBoolProperty(OB_PROP_HW_NOISE_REMOVE_FILTER_ENABLE_BOOL, device_->setBoolProperty(OB_PROP_HW_NOISE_REMOVE_FILTER_ENABLE_BOOL,
enable_hardware_noise_removal_filter_); enable_hardware_noise_removal_filter_);
@@ -1503,7 +1528,8 @@ void OBCameraNode::setupDevices() {
RCLCPP_INFO_STREAM(logger_, "Current exposure range mode: " RCLCPP_INFO_STREAM(logger_, "Current exposure range mode: "
<< exposureRangeModeToString(current_exposure_range_mode)); << exposureRangeModeToString(current_exposure_range_mode));
} }
if (device_->isPropertySupported(OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_accel_data_correction") &&
device_->isPropertySupported(OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL, TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL,
enable_accel_data_correction_); enable_accel_data_correction_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
@@ -1511,7 +1537,8 @@ void OBCameraNode::setupDevices() {
"Current accel data correction: " "Current accel data correction: "
<< (device_->getBoolProperty(OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL) ? "ON" : "OFF")); << (device_->getBoolProperty(OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL) ? "ON" : "OFF"));
} }
if (device_->isPropertySupported(OB_PROP_SDK_GYRO_FRAME_TRANSFORMED_BOOL, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("enable_gyro_data_correction") &&
device_->isPropertySupported(OB_PROP_SDK_GYRO_FRAME_TRANSFORMED_BOOL, OB_PERMISSION_WRITE)) {
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_GYRO_FRAME_TRANSFORMED_BOOL, TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_GYRO_FRAME_TRANSFORMED_BOOL,
enable_gyro_data_correction_); enable_gyro_data_correction_);
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
@@ -1538,7 +1565,8 @@ void OBCameraNode::setupDevices() {
logger_, "Current intra camera sync reference: " logger_, "Current intra camera sync reference: "
<< intraCameraSyncReferenceToString(current_intra_camera_sync_reference)); << intraCameraSyncReferenceToString(current_intra_camera_sync_reference));
} }
if (device_->isPropertySupported(OB_PROP_DEVICE_AE_STRATEGY_INT, OB_PERMISSION_WRITE)) { if (should_apply_launch_config("ae_strategy") &&
device_->isPropertySupported(OB_PROP_DEVICE_AE_STRATEGY_INT, OB_PERMISSION_WRITE)) {
device_->setIntProperty(OB_PROP_DEVICE_AE_STRATEGY_INT, (ae_strategy_ == "motion" ? 0 : 1)); device_->setIntProperty(OB_PROP_DEVICE_AE_STRATEGY_INT, (ae_strategy_ == "motion" ? 0 : 1));
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
logger_, "Current Sports Mode: " logger_, "Current Sports Mode: "
@@ -1546,7 +1574,8 @@ void OBCameraNode::setupDevices() {
: "OFF")); : "OFF"));
} }
if ((ae_reference_stream_ == "depth" || ae_reference_stream_ == "color") && if (should_apply_launch_config("ae_reference_stream") &&
(ae_reference_stream_ == "depth" || ae_reference_stream_ == "color") &&
device_->isPropertySupported(OB_PROP_DEVICE_AE_REFERENCE_INT, OB_PERMISSION_WRITE)) { device_->isPropertySupported(OB_PROP_DEVICE_AE_REFERENCE_INT, OB_PERMISSION_WRITE)) {
if (device_->isPropertySupported(OB_PROP_DEVICE_AE_REFERENCE_INT, OB_PERMISSION_WRITE)) { if (device_->isPropertySupported(OB_PROP_DEVICE_AE_REFERENCE_INT, OB_PERMISSION_WRITE)) {
auto ae_reference = ae_reference_stream_ == "depth" ? 0 : 1; auto ae_reference = ae_reference_stream_ == "depth" ? 0 : 1;
@@ -1625,6 +1654,21 @@ void OBCameraNode::loadConfigJson() {
} }
} }
void OBCameraNode::captureInitialRosParameters() {
initial_ros_params_.clear();
const auto overrides = node_->get_node_parameters_interface()->get_parameter_overrides();
for (const auto &param : overrides) {
initial_ros_params_.insert(param.first);
}
}
bool OBCameraNode::isLaunchParamProvided(const std::string &param_name) const {
if (param_name.empty()) {
return false;
}
return initial_ros_params_.find(param_name) != initial_ros_params_.end();
}
void OBCameraNode::syncConfigJsonDeviceSettings() { void OBCameraNode::syncConfigJsonDeviceSettings() {
if (!config_json_loaded_) { if (!config_json_loaded_) {
return; return;
@@ -2215,9 +2259,13 @@ void OBCameraNode::setupColorPostProcessFilter() {
std::map<std::string, bool> filter_params = { std::map<std::string, bool> filter_params = {
{"DecimationFilter", enable_color_decimation_filter_}, {"DecimationFilter", enable_color_decimation_filter_},
}; };
std::map<std::string, std::string> filter_param_names = {
{"DecimationFilter", "enable_color_decimation_filter"},
};
std::string filter_name = filter->type(); std::string filter_name = filter->type();
RCLCPP_DEBUG_STREAM(logger_, "Configuring color filter: " << filter_name); RCLCPP_DEBUG_STREAM(logger_, "Configuring color filter: " << filter_name);
if (filter_params.find(filter_name) != filter_params.end()) { if (filter_params.find(filter_name) != filter_params.end() &&
isLaunchParamProvided(filter_param_names[filter_name])) {
const auto *value = filter_params[filter_name] ? "enabled" : "disabled"; const auto *value = filter_params[filter_name] ? "enabled" : "disabled";
RCLCPP_INFO_STREAM(logger_, "Set color filter " << filter_name << " to " << value); RCLCPP_INFO_STREAM(logger_, "Set color filter " << filter_name << " to " << value);
filter->enable(filter_params[filter_name]); filter->enable(filter_params[filter_name]);
@@ -2244,9 +2292,13 @@ void OBCameraNode::setupColorPostProcessFilter() {
std::map<std::string, bool> filter_params = { std::map<std::string, bool> filter_params = {
{"DecimationFilter", enable_left_color_decimation_filter_}, {"DecimationFilter", enable_left_color_decimation_filter_},
}; };
std::map<std::string, std::string> filter_param_names = {
{"DecimationFilter", "enable_left_color_decimation_filter"},
};
std::string filter_name = filter->type(); std::string filter_name = filter->type();
RCLCPP_DEBUG_STREAM(logger_, "Configuring left color filter: " << filter_name); RCLCPP_DEBUG_STREAM(logger_, "Configuring left color filter: " << filter_name);
if (filter_params.find(filter_name) != filter_params.end()) { if (filter_params.find(filter_name) != filter_params.end() &&
isLaunchParamProvided(filter_param_names[filter_name])) {
const auto *value = filter_params[filter_name] ? "enabled" : "disabled"; const auto *value = filter_params[filter_name] ? "enabled" : "disabled";
RCLCPP_INFO_STREAM(logger_, "Set left color filter " << filter_name << " to " << value); RCLCPP_INFO_STREAM(logger_, "Set left color filter " << filter_name << " to " << value);
filter->enable(filter_params[filter_name]); filter->enable(filter_params[filter_name]);
@@ -2275,9 +2327,13 @@ void OBCameraNode::setupColorPostProcessFilter() {
std::map<std::string, bool> filter_params = { std::map<std::string, bool> filter_params = {
{"DecimationFilter", enable_right_color_decimation_filter_}, {"DecimationFilter", enable_right_color_decimation_filter_},
}; };
std::map<std::string, std::string> filter_param_names = {
{"DecimationFilter", "enable_right_color_decimation_filter"},
};
std::string filter_name = filter->type(); std::string filter_name = filter->type();
RCLCPP_DEBUG_STREAM(logger_, "Configuring right color filter: " << filter_name); RCLCPP_DEBUG_STREAM(logger_, "Configuring right color filter: " << filter_name);
if (filter_params.find(filter_name) != filter_params.end()) { if (filter_params.find(filter_name) != filter_params.end() &&
isLaunchParamProvided(filter_param_names[filter_name])) {
const auto *value = filter_params[filter_name] ? "enabled" : "disabled"; const auto *value = filter_params[filter_name] ? "enabled" : "disabled";
RCLCPP_INFO_STREAM(logger_, "Set right color filter " << filter_name << " to " << value); RCLCPP_INFO_STREAM(logger_, "Set right color filter " << filter_name << " to " << value);
filter->enable(filter_params[filter_name]); filter->enable(filter_params[filter_name]);
@@ -2303,7 +2359,7 @@ void OBCameraNode::setupColorPostProcessFilter() {
auto device_info = device_->getDeviceInfo(); auto device_info = device_->getDeviceInfo();
CHECK_NOTNULL(device_info); CHECK_NOTNULL(device_info);
if (pid_ == GEMINI2_PID || pid_ == GEMINI2L_PID) { if (pid_ == GEMINI2_PID || pid_ == GEMINI2L_PID) {
if (enable_color_decimation_filter_) { if (isLaunchParamProvided("enable_color_decimation_filter") && enable_color_decimation_filter_) {
auto decimation_filter = std::make_shared<ob::DecimationFilter>(); auto decimation_filter = std::make_shared<ob::DecimationFilter>();
decimation_filter->enable(true); decimation_filter->enable(true);
color_filter_list_.push_back(decimation_filter); color_filter_list_.push_back(decimation_filter);
@@ -2337,9 +2393,13 @@ void OBCameraNode::setupLeftIrPostProcessFilter() {
std::map<std::string, bool> filter_params = { std::map<std::string, bool> filter_params = {
{"SequenceIdFilter", enable_left_ir_sequence_id_filter_}, {"SequenceIdFilter", enable_left_ir_sequence_id_filter_},
}; };
std::map<std::string, std::string> filter_param_names = {
{"SequenceIdFilter", "enable_left_ir_sequence_id_filter"},
};
std::string filter_name = filter->type(); std::string filter_name = filter->type();
RCLCPP_DEBUG_STREAM(logger_, "Configuring left IR filter: " << filter_name); RCLCPP_DEBUG_STREAM(logger_, "Configuring left IR filter: " << filter_name);
if (filter_params.find(filter_name) != filter_params.end()) { if (filter_params.find(filter_name) != filter_params.end() &&
isLaunchParamProvided(filter_param_names[filter_name])) {
const auto *value = filter_params[filter_name] ? "enabled" : "disabled"; const auto *value = filter_params[filter_name] ? "enabled" : "disabled";
RCLCPP_INFO_STREAM(logger_, "Set left IR filter " << filter_name << " to " << value); RCLCPP_INFO_STREAM(logger_, "Set left IR filter " << filter_name << " to " << value);
filter->enable(filter_params[filter_name]); filter->enable(filter_params[filter_name]);
@@ -2371,9 +2431,13 @@ void OBCameraNode::setupRightIrPostProcessFilter() {
std::map<std::string, bool> filter_params = { std::map<std::string, bool> filter_params = {
{"SequenceIdFilter", enable_right_ir_sequence_id_filter_}, {"SequenceIdFilter", enable_right_ir_sequence_id_filter_},
}; };
std::map<std::string, std::string> filter_param_names = {
{"SequenceIdFilter", "enable_right_ir_sequence_id_filter"},
};
std::string filter_name = filter->type(); std::string filter_name = filter->type();
RCLCPP_DEBUG_STREAM(logger_, "Configuring right IR filter: " << filter_name); RCLCPP_DEBUG_STREAM(logger_, "Configuring right IR filter: " << filter_name);
if (filter_params.find(filter_name) != filter_params.end()) { if (filter_params.find(filter_name) != filter_params.end() &&
isLaunchParamProvided(filter_param_names[filter_name])) {
const auto *value = filter_params[filter_name] ? "enabled" : "disabled"; const auto *value = filter_params[filter_name] ? "enabled" : "disabled";
RCLCPP_INFO_STREAM(logger_, "Set right IR filter " << filter_name << " to " << value); RCLCPP_INFO_STREAM(logger_, "Set right IR filter " << filter_name << " to " << value);
filter->enable(filter_params[filter_name]); filter->enable(filter_params[filter_name]);
@@ -2412,12 +2476,28 @@ void OBCameraNode::setupDepthPostProcessFilter() {
{"MgcNoiseRemovalFilter", enable_mgc_noise_removal_filter_}, {"MgcNoiseRemovalFilter", enable_mgc_noise_removal_filter_},
{"LutNoiseRemovalFilter", enable_lut_noise_removal_filter_}, {"LutNoiseRemovalFilter", enable_lut_noise_removal_filter_},
}; };
std::map<std::string, std::string> filter_param_names = {
{"DecimationFilter", "enable_decimation_filter"},
{"HDRMerge", "enable_hdr_merge"},
{"SequenceIdFilter", "enable_sequence_id_filter"},
{"SpatialAdvancedFilter", "enable_spatial_filter"},
{"TemporalFilter", "enable_temporal_filter"},
{"HoleFillingFilter", "enable_hole_filling_filter"},
{"DisparityTransform", "enable_disparity_to_depth"},
{"ThresholdFilter", "enable_threshold_filter"},
{"SpatialFastFilter", "enable_spatial_fast_filter"},
{"SpatialModerateFilter", "enable_spatial_moderate_filter"},
{"FalsePositiveFilter", "enable_false_positive_filter"},
{"MgcNoiseRemovalFilter", "enable_mgc_noise_removal_filter"},
{"LutNoiseRemovalFilter", "enable_lut_noise_removal_filter"},
};
for (size_t i = 0; i < depth_filter_list_.size(); i++) { for (size_t i = 0; i < depth_filter_list_.size(); i++) {
auto filter = depth_filter_list_[i]; auto filter = depth_filter_list_[i];
std::string filter_name = filter->type(); std::string filter_name = filter->type();
RCLCPP_DEBUG_STREAM(logger_, "Configuring depth filter: " << filter_name); RCLCPP_DEBUG_STREAM(logger_, "Configuring depth filter: " << filter_name);
if (filter_params.find(filter_name) != filter_params.end()) { if (filter_params.find(filter_name) != filter_params.end() &&
isLaunchParamProvided(filter_param_names[filter_name])) {
const auto *value = filter_params[filter_name] ? "enabled" : "disabled"; const auto *value = filter_params[filter_name] ? "enabled" : "disabled";
RCLCPP_INFO_STREAM(logger_, "Set depth filter " << filter_name << " to " << value); RCLCPP_INFO_STREAM(logger_, "Set depth filter " << filter_name << " to " << value);
filter->enable(filter_params[filter_name]); filter->enable(filter_params[filter_name]);
@@ -3540,6 +3620,7 @@ void OBCameraNode::getParameters() {
void OBCameraNode::setupTopics() { void OBCameraNode::setupTopics() {
try { try {
captureInitialRosParameters();
getParameters(); getParameters();
loadConfigJson(); loadConfigJson();
setupDevices(); setupDevices();