Add set_software_trigger_enabled param and service

This commit is contained in:
jj
2025-06-23 15:11:53 +08:00
parent e52169a56f
commit 9e1ba961d3
6 changed files with 44 additions and 3 deletions
@@ -326,3 +326,9 @@ ros2 service call /camera/set_sync_interleaverlaser orbbec_camera_msgs/srv/SetIn
``` ```
ros2 service call /camera/set_sync_hosttime std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_sync_hosttime std_srvs/srv/SetBool '{data: true}'
``` ```
* `/camera/set_software_trigger_enabled`
```
ros2 service call /camera/set_software_trigger_enabled std_srvs/srv/SetBool '{data: true}'
```
+2
View File
@@ -151,6 +151,8 @@ The following are the launch parameters available:
* The delay time of the trigger signal output after receiving the capture command or trigger signal in microseconds,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD) * The delay time of the trigger signal output after receiving the capture command or trigger signal in microseconds,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
* **trigger_out_enabled** * **trigger_out_enabled**
* Enable the trigger out signal,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD) * Enable the trigger out signal,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
* **software_trigger_enabled**
* Enable the software trigger out signal,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
* **frames_per_trigger** * **frames_per_trigger**
* The frame number of each stream after each trigger in triggering mode,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD) * The frame number of each stream after each trigger in triggering mode,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
* **software_trigger_period** * **software_trigger_period**
@@ -313,6 +313,9 @@ class OBCameraNode {
std::shared_ptr<SetFilter ::Response>& response); std::shared_ptr<SetFilter ::Response>& response);
void setSYNCHostimeCallback(const std::shared_ptr<std_srvs::srv::SetBool::Request>& request, void setSYNCHostimeCallback(const std::shared_ptr<std_srvs::srv::SetBool::Request>& request,
std::shared_ptr<std_srvs::srv::SetBool::Response>& response); std::shared_ptr<std_srvs::srv::SetBool::Response>& response);
void setSoftwareTriggerEnabledCallback(
const std::shared_ptr<std_srvs::srv::SetBool::Request>& request,
std::shared_ptr<std_srvs::srv::SetBool::Response>& response);
bool toggleSensor(const stream_index_pair& stream_index, bool enabled, std::string& msg); bool toggleSensor(const stream_index_pair& stream_index, bool enabled, std::string& msg);
@@ -493,6 +496,7 @@ class OBCameraNode {
rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr set_reset_timestamp_srv_; rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr set_reset_timestamp_srv_;
rclcpp::Service<SetInt32>::SharedPtr set_interleaver_laser_sync_srv_; rclcpp::Service<SetInt32>::SharedPtr set_interleaver_laser_sync_srv_;
rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr set_sync_host_time_srv_; rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr set_sync_host_time_srv_;
rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr set_software_trigger_enabled_srv_;
rclcpp::Service<SetFilter>::SharedPtr set_filter_srv_; rclcpp::Service<SetFilter>::SharedPtr set_filter_srv_;
bool enable_sync_output_accel_gyro_ = false; bool enable_sync_output_accel_gyro_ = false;
@@ -582,6 +586,7 @@ class OBCameraNode {
int trigger2image_delay_us_ = 0; int trigger2image_delay_us_ = 0;
int trigger_out_delay_us_ = 0; int trigger_out_delay_us_ = 0;
bool trigger_out_enabled_ = false; bool trigger_out_enabled_ = false;
bool software_trigger_enabled_ = false;
int frames_per_trigger_ = 2; int frames_per_trigger_ = 2;
bool enable_ptp_config_ = false; bool enable_ptp_config_ = false;
std::string depth_precision_str_; std::string depth_precision_str_;
@@ -178,6 +178,7 @@ def generate_launch_description():
DeclareLaunchArgument('trigger2image_delay_us', default_value='0'), DeclareLaunchArgument('trigger2image_delay_us', default_value='0'),
DeclareLaunchArgument('trigger_out_delay_us', default_value='0'), DeclareLaunchArgument('trigger_out_delay_us', default_value='0'),
DeclareLaunchArgument('trigger_out_enabled', default_value='true'), DeclareLaunchArgument('trigger_out_enabled', default_value='true'),
DeclareLaunchArgument('software_trigger_enabled', default_value='true'),
DeclareLaunchArgument('frames_per_trigger', default_value='2'), DeclareLaunchArgument('frames_per_trigger', default_value='2'),
DeclareLaunchArgument('software_trigger_period', default_value='33'), # ms DeclareLaunchArgument('software_trigger_period', default_value='33'), # ms
DeclareLaunchArgument('enable_ptp_config', default_value='false'),#Only for Gemini 335Le DeclareLaunchArgument('enable_ptp_config', default_value='false'),#Only for Gemini 335Le
+7 -3
View File
@@ -299,8 +299,11 @@ void OBCameraNode::setupDevices() {
RCLCPP_INFO_STREAM(logger_, "Frames per trigger: " << sync_config.framesPerTrigger); RCLCPP_INFO_STREAM(logger_, "Frames per trigger: " << sync_config.framesPerTrigger);
RCLCPP_INFO_STREAM(logger_, RCLCPP_INFO_STREAM(logger_,
"Software trigger period " << software_trigger_period_.count() << " ms"); "Software trigger period " << software_trigger_period_.count() << " ms");
software_trigger_timer_ = node_->create_wall_timer( software_trigger_timer_ = node_->create_wall_timer(software_trigger_period_, [this]() {
software_trigger_period_, [this]() { TRY_EXECUTE_BLOCK(device_->triggerCapture()); }); if (software_trigger_enabled_) {
TRY_EXECUTE_BLOCK(device_->triggerCapture());
}
});
} }
} }
if (device_->isPropertySupported(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL, if (device_->isPropertySupported(OB_DEVICE_PTP_CLOCK_SYNC_ENABLE_BOOL,
@@ -1652,7 +1655,8 @@ void OBCameraNode::getParameters() {
setAndGetNodeParameter<int>(color_delay_us_, "color_delay_us", 0); setAndGetNodeParameter<int>(color_delay_us_, "color_delay_us", 0);
setAndGetNodeParameter<int>(trigger2image_delay_us_, "trigger2image_delay_us", 0); setAndGetNodeParameter<int>(trigger2image_delay_us_, "trigger2image_delay_us", 0);
setAndGetNodeParameter<int>(trigger_out_delay_us_, "trigger_out_delay_us", 0); setAndGetNodeParameter<int>(trigger_out_delay_us_, "trigger_out_delay_us", 0);
setAndGetNodeParameter<bool>(trigger_out_enabled_, "trigger_out_enabled", false); setAndGetNodeParameter<bool>(trigger_out_enabled_, "trigger_out_enabled", true);
setAndGetNodeParameter<bool>(software_trigger_enabled_, "software_trigger_enabled", true);
setAndGetNodeParameter<bool>(enable_ptp_config_, "enable_ptp_config", false); setAndGetNodeParameter<bool>(enable_ptp_config_, "enable_ptp_config", false);
setAndGetNodeParameter<std::string>(cloud_frame_id_, "cloud_frame_id", ""); setAndGetNodeParameter<std::string>(cloud_frame_id_, "cloud_frame_id", "");
if (enable_colored_point_cloud_ || enable_d2c_viewer_) { if (enable_colored_point_cloud_ || enable_d2c_viewer_) {
+23
View File
@@ -206,6 +206,11 @@ void OBCameraNode::setupCameraCtrlServices() {
std::shared_ptr<SetBool::Response> response) { std::shared_ptr<SetBool::Response> response) {
setSYNCHostimeCallback(request, response); setSYNCHostimeCallback(request, response);
}); });
set_software_trigger_enabled_srv_ = node_->create_service<SetBool>(
"set_software_trigger_enabled", [this](const std::shared_ptr<SetBool::Request> request,
std::shared_ptr<SetBool::Response> response) {
setSoftwareTriggerEnabledCallback(request, response);
});
set_write_customerdata_srv_ = node_->create_service<SetString>( set_write_customerdata_srv_ = node_->create_service<SetString>(
"set_write_customer_data", [this](const std::shared_ptr<SetString::Request> request, "set_write_customer_data", [this](const std::shared_ptr<SetString::Request> request,
std::shared_ptr<SetString::Response> response) { std::shared_ptr<SetString::Response> response) {
@@ -1058,6 +1063,24 @@ void OBCameraNode::setSYNCHostimeCallback(
} }
} }
void OBCameraNode::setSoftwareTriggerEnabledCallback(
const std::shared_ptr<std_srvs::srv::SetBool::Request>& request,
std::shared_ptr<std_srvs::srv::SetBool::Response>& response) {
try {
software_trigger_enabled_ = request->data;
response->success = true;
} catch (const ob::Error& e) {
response->message = e.getMessage();
response->success = false;
} catch (const std::exception& e) {
response->message = e.what();
response->success = false;
} catch (...) {
response->message = "unknown error";
response->success = false;
}
}
void OBCameraNode::setWriteCustomerData(const std::shared_ptr<SetString::Request>& request, void OBCameraNode::setWriteCustomerData(const std::shared_ptr<SetString::Request>& request,
std::shared_ptr<SetString::Response>& response) { std::shared_ptr<SetString::Response>& response) {
if (request->data.empty()) { if (request->data.empty()) {