mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-04 20:17:47 +08:00
fix: preserve dependent property configuration order
This commit is contained in:
@@ -1148,22 +1148,42 @@ void OBCameraNode::setupDevices() {
|
|||||||
sensors_.find(DEPTH) != sensors_.end() &&
|
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") {
|
TRY_EXECUTE_BLOCK({
|
||||||
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_DISPARITY_TO_DEPTH_BOOL, 1);
|
bool expected_hardware_enabled = false;
|
||||||
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, 0);
|
bool expected_software_enabled = false;
|
||||||
RCLCPP_INFO_STREAM(logger_, "Disparity to depth mode: HW");
|
bool mode_supported = true;
|
||||||
} else if (disparity_to_depth_mode_ == "SW") {
|
if (disparity_to_depth_mode_ == "HW") {
|
||||||
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_DISPARITY_TO_DEPTH_BOOL, 0);
|
expected_hardware_enabled = true;
|
||||||
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, 1);
|
device_->setBoolProperty(OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, false);
|
||||||
RCLCPP_INFO_STREAM(logger_, "Disparity to depth mode: SW");
|
device_->setBoolProperty(OB_PROP_DISPARITY_TO_DEPTH_BOOL, true);
|
||||||
} else if (disparity_to_depth_mode_ == "disable") {
|
} else if (disparity_to_depth_mode_ == "SW") {
|
||||||
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_DISPARITY_TO_DEPTH_BOOL, 0);
|
expected_software_enabled = true;
|
||||||
TRY_TO_SET_PROPERTY(setBoolProperty, OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, 0);
|
device_->setBoolProperty(OB_PROP_DISPARITY_TO_DEPTH_BOOL, false);
|
||||||
RCLCPP_INFO_STREAM(logger_, "Disparity to depth mode: disabled");
|
device_->setBoolProperty(OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, true);
|
||||||
} else {
|
} else if (disparity_to_depth_mode_ == "disable") {
|
||||||
RCLCPP_WARN_STREAM(logger_, "Unknown disparity to depth mode '"
|
device_->setBoolProperty(OB_PROP_DISPARITY_TO_DEPTH_BOOL, false);
|
||||||
<< disparity_to_depth_mode_ << "', keeping default settings");
|
device_->setBoolProperty(OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL, false);
|
||||||
}
|
} else {
|
||||||
|
RCLCPP_WARN_STREAM(logger_, "Unknown disparity to depth mode '"
|
||||||
|
<< disparity_to_depth_mode_
|
||||||
|
<< "', keeping default settings");
|
||||||
|
mode_supported = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode_supported) {
|
||||||
|
const bool hardware_enabled = device_->getBoolProperty(OB_PROP_DISPARITY_TO_DEPTH_BOOL);
|
||||||
|
const bool software_enabled = device_->getBoolProperty(OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL);
|
||||||
|
if (hardware_enabled != expected_hardware_enabled ||
|
||||||
|
software_enabled != expected_software_enabled) {
|
||||||
|
RCLCPP_ERROR_STREAM(logger_, "Failed to apply disparity to depth mode "
|
||||||
|
<< disparity_to_depth_mode_
|
||||||
|
<< ": device reports hardware=" << hardware_enabled
|
||||||
|
<< ", software=" << software_enabled);
|
||||||
|
} else {
|
||||||
|
RCLCPP_INFO_STREAM(logger_, "Disparity to depth mode: " << disparity_to_depth_mode_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (should_apply_launch_config("enable_ldp") &&
|
if (should_apply_launch_config("enable_ldp") &&
|
||||||
@@ -1219,32 +1239,33 @@ void OBCameraNode::setupDevices() {
|
|||||||
"Current laser control: " << (device_->getIntProperty(OB_PROP_LASER_BOOL) ? "ON" : "OFF")));
|
"Current laser control: " << (device_->getIntProperty(OB_PROP_LASER_BOOL) ? "ON" : "OFF")));
|
||||||
}
|
}
|
||||||
if (!sync_mode_str_.empty()) {
|
if (!sync_mode_str_.empty()) {
|
||||||
auto sync_config = device_->getMultiDeviceSyncConfig();
|
|
||||||
std::transform(sync_mode_str_.begin(), sync_mode_str_.end(), sync_mode_str_.begin(), ::toupper);
|
|
||||||
sync_mode_ = OBSyncModeFromString(sync_mode_str_);
|
|
||||||
sync_config.syncMode = sync_mode_;
|
|
||||||
sync_config.depthDelayUs = depth_delay_us_;
|
|
||||||
sync_config.colorDelayUs = color_delay_us_;
|
|
||||||
sync_config.trigger2ImageDelayUs = trigger2image_delay_us_;
|
|
||||||
sync_config.triggerOutDelayUs = trigger_out_delay_us_;
|
|
||||||
sync_config.triggerOutEnable = trigger_out_enabled_;
|
|
||||||
sync_config.framesPerTrigger = frames_per_trigger_;
|
|
||||||
TRY_EXECUTE_BLOCK(device_->setMultiDeviceSyncConfig(sync_config));
|
|
||||||
TRY_EXECUTE_BLOCK({
|
TRY_EXECUTE_BLOCK({
|
||||||
|
auto sync_config = device_->getMultiDeviceSyncConfig();
|
||||||
|
std::transform(sync_mode_str_.begin(), sync_mode_str_.end(), sync_mode_str_.begin(),
|
||||||
|
::toupper);
|
||||||
|
sync_mode_ = OBSyncModeFromString(sync_mode_str_);
|
||||||
|
sync_config.syncMode = sync_mode_;
|
||||||
|
sync_config.depthDelayUs = depth_delay_us_;
|
||||||
|
sync_config.colorDelayUs = color_delay_us_;
|
||||||
|
sync_config.trigger2ImageDelayUs = trigger2image_delay_us_;
|
||||||
|
sync_config.triggerOutDelayUs = trigger_out_delay_us_;
|
||||||
|
sync_config.triggerOutEnable = trigger_out_enabled_;
|
||||||
|
sync_config.framesPerTrigger = frames_per_trigger_;
|
||||||
|
device_->setMultiDeviceSyncConfig(sync_config);
|
||||||
sync_config = device_->getMultiDeviceSyncConfig();
|
sync_config = device_->getMultiDeviceSyncConfig();
|
||||||
RCLCPP_INFO_STREAM(logger_,
|
RCLCPP_INFO_STREAM(logger_,
|
||||||
"Current sync mode: " << magic_enum::enum_name(sync_config.syncMode));
|
"Current sync mode: " << magic_enum::enum_name(sync_config.syncMode));
|
||||||
|
if (sync_config.syncMode == OB_MULTI_DEVICE_SYNC_MODE_SOFTWARE_TRIGGERING) {
|
||||||
|
RCLCPP_INFO_STREAM(logger_, "Frames per trigger: " << sync_config.framesPerTrigger);
|
||||||
|
RCLCPP_INFO_STREAM(logger_,
|
||||||
|
"Software trigger period " << software_trigger_period_.count() << " ms");
|
||||||
|
software_trigger_timer_ = node_->create_wall_timer(software_trigger_period_, [this]() {
|
||||||
|
if (software_trigger_enabled_) {
|
||||||
|
TRY_EXECUTE_BLOCK(device_->triggerCapture());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (sync_mode_ == OB_MULTI_DEVICE_SYNC_MODE_SOFTWARE_TRIGGERING) {
|
|
||||||
RCLCPP_INFO_STREAM(logger_, "Frames per trigger: " << sync_config.framesPerTrigger);
|
|
||||||
RCLCPP_INFO_STREAM(logger_,
|
|
||||||
"Software trigger period " << software_trigger_period_.count() << " ms");
|
|
||||||
software_trigger_timer_ = node_->create_wall_timer(software_trigger_period_, [this]() {
|
|
||||||
if (software_trigger_enabled_) {
|
|
||||||
TRY_EXECUTE_BLOCK(device_->triggerCapture());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (should_apply_launch_config("enable_ptp_config") &&
|
if (should_apply_launch_config("enable_ptp_config") &&
|
||||||
device_->isPropertySupported(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL,
|
device_->isPropertySupported(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL,
|
||||||
|
|||||||
@@ -245,11 +245,12 @@ void OBLidarNode::setupDevices() {
|
|||||||
RCLCPP_ERROR(logger_, "filter level value is out of range[%d,%d], please check the value",
|
RCLCPP_ERROR(logger_, "filter level value is out of range[%d,%d], please check the value",
|
||||||
range.min, range.max);
|
range.min, range.max);
|
||||||
} else {
|
} else {
|
||||||
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_LIDAR_TAIL_FILTER_LEVEL_INT, filter_level_);
|
TRY_EXECUTE_BLOCK({
|
||||||
TRY_TO_SET_PROPERTY(setIntProperty, OB_PROP_LIDAR_APPLY_CONFIGS_INT, 1);
|
device_->setIntProperty(OB_PROP_LIDAR_TAIL_FILTER_LEVEL_INT, filter_level_);
|
||||||
TRY_EXECUTE_BLOCK(RCLCPP_INFO_STREAM(
|
device_->setIntProperty(OB_PROP_LIDAR_APPLY_CONFIGS_INT, 1);
|
||||||
logger_, "Current filter level: "
|
RCLCPP_INFO_STREAM(logger_, "Current filter level: " << device_->getIntProperty(
|
||||||
<< device_->getIntProperty(OB_PROP_LIDAR_TAIL_FILTER_LEVEL_INT)));
|
OB_PROP_LIDAR_TAIL_FILTER_LEVEL_INT));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user