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 <shenlanzhou@orbbec.com>
This commit is contained in:
0ppenheim7
2026-08-07 18:31:34 +08:00
committed by GitHub
co-authored by slz
parent be941f5a95
commit 8e7cad2bfa
+22 -10
View File
@@ -376,20 +376,32 @@ void OBCameraNodeDriver::init() {
net_device_port_ = static_cast<int>(declare_parameter<int>("net_device_port", 0));
enumerate_net_device_ = declare_parameter<bool>("enumerate_net_device", false);
uvc_backend_ = declare_parameter<std::string>("uvc_backend", "libuvc");
const bool use_explicit_net_device = !net_device_ip_.empty() && net_device_port_ != 0;
device_access_mode_str_ = declare_parameter<std::string>("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(