From 8e7cad2bfa2c4a6ac4e779be99c64e72166043af Mon Sep 17 00:00:00 2001 From: 0ppenheim7 <144502076+0ppenheim7@users.noreply.github.com> Date: Fri, 7 Aug 2026 18:31:34 +0800 Subject: [PATCH] fix: skip UVC backend setup for explicit Ethernet devices (#205) * Skip UVC backend setup for explicit Ethernet devices * fix: continue network enumeration without USB backend --------- Co-authored-by: slz --- orbbec_camera/src/ob_camera_node_driver.cpp | 32 ++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/orbbec_camera/src/ob_camera_node_driver.cpp b/orbbec_camera/src/ob_camera_node_driver.cpp index 98c6ef07..2609be90 100644 --- a/orbbec_camera/src/ob_camera_node_driver.cpp +++ b/orbbec_camera/src/ob_camera_node_driver.cpp @@ -376,20 +376,32 @@ void OBCameraNodeDriver::init() { net_device_port_ = static_cast(declare_parameter("net_device_port", 0)); enumerate_net_device_ = declare_parameter("enumerate_net_device", false); uvc_backend_ = declare_parameter("uvc_backend", "libuvc"); + const bool use_explicit_net_device = !net_device_ip_.empty() && net_device_port_ != 0; device_access_mode_str_ = declare_parameter("device_access_mode", "Default"); device_access_mode_ = stringToAccessMode(device_access_mode_str_); RCLCPP_INFO_STREAM(logger_, "Device access mode: " << device_access_mode_str_ << " (" << device_access_mode_ << ")"); - if (uvc_backend_ == "libuvc") { - ctx_->setUvcBackendType(OB_UVC_BACKEND_TYPE_LIBUVC); - RCLCPP_INFO_STREAM(logger_, "Set UVC backend to " << uvc_backend_); - } else if (uvc_backend_ == "v4l2") { - ctx_->setUvcBackendType(OB_UVC_BACKEND_TYPE_V4L2); - RCLCPP_INFO_STREAM(logger_, "Set UVC backend to " << uvc_backend_); - } else { - ctx_->setUvcBackendType(OB_UVC_BACKEND_TYPE_LIBUVC); - RCLCPP_WARN_STREAM(logger_, - "Unsupported uvc_backend '" << uvc_backend_ << "', using default libuvc"); + if (!use_explicit_net_device) { + try { + if (uvc_backend_ == "libuvc") { + ctx_->setUvcBackendType(OB_UVC_BACKEND_TYPE_LIBUVC); + RCLCPP_INFO_STREAM(logger_, "Set UVC backend to " << uvc_backend_); + } else if (uvc_backend_ == "v4l2") { + ctx_->setUvcBackendType(OB_UVC_BACKEND_TYPE_V4L2); + RCLCPP_INFO_STREAM(logger_, "Set UVC backend to " << uvc_backend_); + } else { + ctx_->setUvcBackendType(OB_UVC_BACKEND_TYPE_LIBUVC); + RCLCPP_WARN_STREAM( + logger_, "Unsupported uvc_backend '" << uvc_backend_ << "', using default libuvc"); + } + } catch (const ob::Error &e) { + if (!enumerate_net_device_ || e.getStatus() != OB_ERROR_ITEM_NOT_FOUND) { + throw; + } + RCLCPP_WARN_STREAM(logger_, + "USB backend is unavailable; continuing with network device enumeration: " + << orbbec_camera::formatObErrorWithStatus(e)); + } } ctx_->enableNetDeviceEnumeration(enumerate_net_device_); device_changed_callback_id_ = ctx_->registerDeviceChangedCallback(