解决海康相机SDK导致 `libusb_set_option` 问题的经验总结

在使用海康相机SDK时,可能会遇到以下问题:


问题描述

当编译某些ROS代码时,出现类似错误:

/usr/bin/ld: …/…/lib/libpcl_io.so.1.8.0: undefined reference to `libusb_set_option’


原因分析

安装海康相机SDK后,系统原本的 libusb 依赖会被重新链接到海康SDK指定的路径。
由于 libusb 是许多外设程序的重要依赖库,这种更改可能导致其他设备驱动或程序(例如使用系统默认 libusb 的程序)出现冲突,从而触发上述错误。


解决方法

为了解决 libusb 路径冲突问题,需要手动调整环境变量 LD_LIBRARY_PATH,让系统程序优先使用系统默认的 libusb 版本。

以下是详细步骤:

1. 检查环境变量配置

打开终端,检查当前 LD_LIBRARY_PATH 配置:

echo $LD_LIBRARY_PATH

解决海康SDK与libusb路径冲突问题

在某些情况下,安装海康SDK后,系统中的 libusb 可能与海康SDK中的版本发生冲突,导致其他依赖 libusb 的程序出现问题。以下是解决此问题的步骤:

1. 检查冲突源

如果输出中包含海康SDK的路径,例如 /path/to/hikvision/sdk/lib,这可能是冲突的来源。

2. 修改 ~/.bashrc

为确保优先使用系统默认的 libusb,可以通过调整 ~/.bashrc 配置文件来重新设置 LD_LIBRARY_PATH

在文件末尾添加以下一行:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

说明

/usr/lib/x86_64-linux-gnu 是系统默认的 libusb 路径,根据你的系统架构可能有所不同。如果有多个默认路径,请确保所有可能的系统库路径都在 LD_LIBRARY_PATH 变量中优先级靠前。

3. 应用更改

保存并关闭文件后,在终端执行以下命令使修改生效:

source ~/.bashrc

4. 检查是否解决问题

重新运行导致错误的程序,确认问题是否解决。如果仍有问题,可以检查程序实际加载的 libusb 版本:

ldd /path/to/your/executable | grep libusb

确保输出路径正确

确保输出中显示的路径为 /usr/lib/x86_64-linux-gnu/libusb.so 或系统默认路径,而不是海康SDK的路径。

进一步优化

特定程序设置环境变量

如果你只希望某些程序使用默认的 libusb,可以在运行这些程序时临时设置 LD_LIBRARY_PATH

LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH ./your_program

总结

安装海康SDK后,路径冲突问题可能影响到其他依赖 libusb 的程序。通过调整 LD_LIBRARY_PATH 优先使用系统默认库路径,可以有效解决问题。

希望本文对遇到类似问题的朋友有所帮助!如果你有更好的解决方法,欢迎交流! 😊
在这里插入图片描述

### 如何在ROS中集成和使用海康相机SDK #### 集成准备 为了成功地在ROS环境中集成并使用海康相机SDK,需先完成一系列准备工作。这包括但不限于安装必要的依赖项以及配置开发环境。 - **安装依赖库**:确保已安装所有必需的软件包,如`ros-melodic-desktop-full`或其他版本对应的全功能套件[^2]。 - **获取海康相机SDK**:从官方网站或可信渠道下载适用于Linux平台的最新版海康相机SDK,并按照官方文档说明进行解压与安装操作[^3]。 #### 创建ROS工作空间 建立一个新的ROS工作空间来管理即将编写的节点和其他资源文件: ```bash mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/ ``` 初始化此工作空间并将源码目录设置好之后,可以克隆特定于海康相机的支持包到该位置内: ```bash git clone https://gitcode.com/open-source-toolkit/55c1b src/hik_camera_driver_ros ``` 这里假设目标仓库位于上述URL处;实际应用时应替换为最新的官方推荐链接。 #### 编写CMakeLists.txt 编辑新加入项目的`CMakeLists.txt`文件,在其中添加对于外部库(即海康SDK)路径和支持函数声明部分的内容。例如: ```cmake find_package(catkin REQUIRED COMPONENTS roscpp std_msgs ) include_directories( ${CATKIN_INCLUDE_DIRS} /usr/local/include/hikvision_sdk # 假设SDK头文件存于此处 ) link_directories(/usr/local/lib) # SDK动态链接库所在的位置 add_executable(hik_cam_node src/main.cpp) target_link_libraries(hik_cam_node ${catkin_LIBRARIES} hikvision_sdk_lib_name) ``` 注意调整具体路径以匹配本地实际情况。 #### 实现Camera Node逻辑 编写用于控制摄像头采集流程的核心程序——通常是一个订阅者发布者的组合体。下面给出了一段简单的Python实现作为参考: ```python #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError import numpy as np # 导入HikVision Camera API模块... try: from pyhik.hikvisionapi import Client except ImportError: raise Exception('Failed to load HikVision camera driver') class HIKCamNode(object): def __init__(self): self.bridge = CvBridge() self.image_pub = rospy.Publisher("/camera/image_raw", Image, queue_size=10) client = Client('http://<IP_ADDRESS>', '<USERNAME>', '<PASSWORD>') stream_url = client.Streaming.channels[1].picture.methodGet().url while not rospy.is_shutdown(): try: resp = requests.get(stream_url, auth=('admin', 'password'), stream=True).raw frame = np.asarray(bytearray(resp.read()), dtype="uint8") img = cv2.imdecode(frame, cv2.IMREAD_COLOR) ros_image = self.bridge.cv2_to_imgmsg(img, "bgr8") self.image_pub.publish(ros_image) except KeyboardInterrupt: break if __name__ == '__main__': rospy.init_node('hik_cam_node') node = HIKCamNode() rospy.spin() ``` 这段脚本展示了如何连接至指定地址上的网络摄像机实例化对象,并周期性读取JPEG帧流转换成OpenCV格式后再经由`cv_bridge`工具封装进标准消息结构里向外广播出去。 #### 构建与运行 返回至上层目录执行构建命令使更改生效: ```bash cd .. catkin_make source devel/setup.bash ``` 最后启动刚才定义好的节点即可开始测试效果了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值