diff --git a/orbbec_camera/include/orbbec_camera/ob_camera_node.h b/orbbec_camera/include/orbbec_camera/ob_camera_node.h index 7536e1f3..d9dc8bb2 100644 --- a/orbbec_camera/include/orbbec_camera/ob_camera_node.h +++ b/orbbec_camera/include/orbbec_camera/ob_camera_node.h @@ -262,6 +262,9 @@ class OBCameraNode { void switchIRCameraCallback(const std::shared_ptr& request, std::shared_ptr& response); + void setIRLongExposureCallback(const std::shared_ptr& request, + std::shared_ptr& response); + void publishPointCloud(const std::shared_ptr& frame_set); void publishDepthPointCloud(const std::shared_ptr& frame_set); @@ -360,6 +363,7 @@ class OBCameraNode { rclcpp::Service::SharedPtr set_auto_white_balance_srv_; rclcpp::Service::SharedPtr get_sdk_version_srv_; rclcpp::Service::SharedPtr switch_ir_camera_srv_; + rclcpp::Service::SharedPtr set_ir_long_exposure_srv_; std::map::SharedPtr> set_auto_exposure_srv_; rclcpp::Service::SharedPtr get_device_srv_; diff --git a/orbbec_camera/src/ros_service.cpp b/orbbec_camera/src/ros_service.cpp index a554f633..9e2488b7 100644 --- a/orbbec_camera/src/ros_service.cpp +++ b/orbbec_camera/src/ros_service.cpp @@ -159,6 +159,11 @@ void OBCameraNode::setupCameraCtrlServices() { std::shared_ptr response) { switchIRCameraCallback(request, response); }); + set_ir_long_exposure_srv_ = node_->create_service( + "set_ir_long_exposure", [this](const std::shared_ptr request, + std::shared_ptr response) { + setIRLongExposureCallback(request, response); + }); } void OBCameraNode::setExposureCallback(const std::shared_ptr& request, @@ -686,4 +691,21 @@ void OBCameraNode::switchIRCameraCallback(const std::shared_ptrsuccess = false; } } +void OBCameraNode::setIRLongExposureCallback( + const std::shared_ptr& request, + std::shared_ptr& response) { + try { + device_->setBoolProperty(OB_PROP_IR_LONG_EXPOSURE_BOOL, 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; + } +} } // namespace orbbec_camera