海康威视在linux下使用笔记——ros驱动相机

本文档记录了如何在Linux环境下进行海康威视相机的二次开发,包括下载MVSSDK、安装步骤、运行示例程序以及解决常见问题。此外,还介绍了如何在ROS下配置和驱动相机,提供了GitHub上的ROS驱动包链接,并提醒注意可能的环境冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过两天的踩坑,因为是第一次用海康威视的相机,下面是海康的相机在linux下的二次开发和在ros下驱动的笔记。

一、下载官方海康威视Linux系统的MVS SDK:

官方网址:海康机器人-机器视觉-下载中心 选择“机器视觉工业相机客户端MVS V2.1.0(Linux)”下载。

解压后有适应各种架构计算机的压缩包:

其中常用的是:

  • 树梅派:armhf架构

  • jetson nano: aarch64架构

  • PC: x86_64架构

解压后安装:

里面有一个INSTALL文件可以参考步骤如下:

  • 安装前,需要获取root权限:sudo su 或 su root

  • tar-xzvf 文件名: 解压压缩包

  • cd MVS-2.1.0_x86_64_20201228/ : 进入文件根目录

  • ./setup.sh  :运行安装脚本

  • 安装完成在路径下/opt/MVS下会看到:

  • 其中:

    • Sample:示例程序

    • lib:封装好的so库

    • include:头文件

    • doc:说明文档

    • bin:可运行文件,包括客户端软件等

运行demo,测试linux环境是否搭建成功:

运行之前先阅读文件夹下的README,步骤如下,如GrabImage:

  • 进入文件GrabImage

  • maek编译

  • ./GrabImage运行可执行文件

  • 运行后会枚举网络中的设备,输入相应的camera index,如0,回车

  • 结果如下:

注意事项:

1.关闭防火墙

2.配置ip使得相机的ip和PC的ip在同一网段:

Linux 下建议开启巨帧,开启方法(仅供参考,可选择操作部分):

1、临时开启:ifconfig eth0 mtu 9000 2、永久开启:将"ifconfig eth0 mtu 9000"语句写到配置文件,重启生效。

注意:eth0 代表网卡名字,不同系统名字有可能不一样;9000 代表最大接收包的 5大小,一些较老的网卡最大接收包或许无法达到,需根据实际来设置,并且相机 侧需将 GEVSCPSPacketSize 节点设置成相应大小。

对于常见报错,可能是环境配置的脚本运行出了问题,安装包下脚本说明:

1、set_env_path.sh:设置环境变量,将 SDK 动态库放入系统环境变量中。

2、set_rp_filter.sh:禁用 rpfilter,使 pc 的 IP 网段和相机的 IP 网段不在同一网段时也能枚举的上。

3、set_socket_buffer_size.sh:当出现 GigE 丢包时,可开大 socket 缓存,用来减缓丢包。

4、set_usb_priority.sh:设置 udev 规则,使之能在非管理员权限下使用u3相机。

5、set_usbfs_memory_size.sh:设置 usb 缓存,使之能兼容多个大分辨率u3相机。

在ROS下驱动,这里在github上找到一个大佬自己写的驱动:

请自取,主页和方法在下方:

GitHub - luckyluckydadada/HIKROBOT-MVS-CAMERA-ROS: The ros driver package of Hikvision Industrial Camera SDK.​​​​​

 

mkdir -p ~/ws_hikrobot_camera/src
git clone https://github.com/luckyluckydadada/HIKROBOT-MVS-CAMERA-ROS.git ~/ws_hikrobot_camera/src/hikrobot_camera
cd ~/ws_hikrobot_camera
catkin_make
source ./devel/setup.bash 
roslaunch hikrobot_camera hikrobot_camera.launch
#rviz
source ./devel/setup.bash 
roslaunch hikrobot_camera hikrobot_camera_rviz.launch

这里有一个坑,如果在安装MVS配置了bin目录的环境变量,会和rviz需要的libQT5*等库冲突。

要修改相机参数请自行阅读代码内容。如config文件和src文件。

<think>我们正在处理一个关于海康工业相机ROS使用时出现参数错误(MV_E_PARAMETER)的问题。根据引用[1]中的错误信息,虽然它提到了一个不同的错误(关于消息包导入的问题),但它提醒我们需要确保ROS环境中的消息包配置正确。然而,用户当前的问题是关于参数错误MV_E_PARAMETER。 首先,我们需要了解MV_E_PARAMETER错误的含义。在海康工业相机的SDK中,错误码MV_E_PARAMETER通常表示传递给函数的参数无效,例如参数值超出范围、类型不匹配或者传递了空指针等。 在ROS使用海康工业相机,通常是通过一个ROS驱动包(如hkcam_driver或类似包)来实现的。当出现MV_E_PARAMETER错误时,可能的原因包括: 1. **相机参数配置错误**:在启动相机节点的ROS参数文件中,可能设置了无效的参数值,例如图像宽度、高度、帧率等超出了相机支持的范围。 2. **相机参数设置时机不当**:在相机尚未初始化完成时就尝试设置参数。 3. **驱动代码中的参数传递错误**:驱动代码在调用海康SDK的函数时传递了错误的参数。 ### 解决方案步骤 #### 1. 检查ROS参数配置文件 检查启动相机节点时加载的参数文件(通常是YAML格式),确保所有参数值在相机支持的范围内。例如,检查以下常见参数: - `width`:图像宽度,必须为相机支持的分辨率(如1920, 1280等) - `height`:图像高度 - `fps`:帧率,不能超过相机最大帧率 - `pixel_format`:像素格式(如Mono8, RGB8等),必须与相机支持的格式一致 示例参数文件(camera_params.yaml): ```yaml camera_name: "hkcam" serial_number: "12345" width: 1920 height: 1080 fps: 30 pixel_format: "RGB8" ``` #### 2. 检查相机支持的分辨率和帧率 使用海康提供的相机配置工具(如MVS)查看相机支持的分辨率、帧率以及像素格式,确保ROS参数设置在这些范围内。 #### 3. 更新相机驱动 确保使用ROS驱动包是最新版本,因为旧版本可能存在参数处理的bug。可以到GitHub仓库查看是否有更新或相关issue。 #### 4. 查看驱动日志 运行相机节点时,查看详细的日志输出,通常驱动会打印出设置参数的过程。如果某个参数设置失败,日志中可能会有提示。 #### 5. 调试驱动代码 如果以上步骤无法解决问题,可能需要检查驱动代码中设置参数的部分。例如,在驱动代码中,设置参数通常是通过调用SDK的`MV_CC_SetXXX`函数实现的。需要确保在调用这些函数之前,相机已经成功初始化(即已经成功打开相机)。 例如,在设置宽高时,代码可能如下: ```cpp // 假设 handle 是相机句柄 int ret = MV_CC_SetIntValue(handle, "Width", width); if (ret != MV_OK) { ROS_ERROR("Set width failed: %x", ret); } ``` 如果这里的`width`值不在相机支持范围内,就会返回`MV_E_PARAMETER`。 #### 6. 联系海康技术支持 如果问题依然存在,建议联系海康工业相机的技术支持,提供详细的错误信息和操作步骤,以便他们协助解决。 ### 相关问题 §§相关问题§§ 1. 如何查看海康工业相机支持的分辨率和帧率范围? 2. ROS驱动中如何正确设置海康相机的参数? 3. 海康相机ROS中常见的错误码有哪些,如何解决? 4. 如何更新海康相机ROS驱动? 5. 海康相机参数设置失败后,如何恢复默认设置? [^1]: 引用自站内错误信息示例,实际解决参数错误需参考具体驱动相机文档。</think>### 海康工业相机 ROS 参数错误 MV_E_PARAMETER 解决方案 #### 问题分析 `MV_E_PARAMETER` 是海康威视 MVS SDK 的典型错误码,表示**参数传递异常**。在 ROS 环境中通常由以下原因导致: 1. **参数类型/范围错误**:ROS 参数服务器传递的参数值超出相机支持范围(如分辨率、帧率等) 2. **参数加载时机不当**:相机未初始化完成时尝试配置参数 3. **参数命名冲突**:ROS 参数名与 SDK 内部参数名不匹配 4. **驱动兼容性问题**:ROS 驱动版本与相机固件/ SDK 不兼容 --- #### 解决方案 ##### 1. 验证参数范围(关键步骤) 通过海康官方 MVS 软件确认相机支持的有效参数范围: - 打开 MVS → 连接相机 → 点击"参数"选项卡 - 记录支持的分辨率(Width/Height)、像素格式(PixelFormat)、帧率(AcquisitionFrameRate)等关键参数 - 在 ROS 参数文件(如 `camera_params.yaml`)中确保参数值在有效范围内: ```yaml # 示例参数配置 camera: frame_rate: 30 # 需≤MVS显示的最大帧率 resolution: [1920, 1200] # 需在MVS支持的分辨率列表中 pixel_format: "BayerRG8" # 必须与MVS显示的格式名完全一致 ``` ##### 2. 检查参数加载时序 在驱动启动脚本中添加延迟初始化逻辑(以 Python 驱动为例): ```python rospy.init_node('hik_camera_node') rospy.sleep(2.0) # 等待相机初始化完成 camera = hk_camera.HKCamera(serial_number) camera.set_parameters(rospy.get_param("/camera")) # 延迟加载参数 ``` ##### 3. 更新驱动与 SDK 1. 检查驱动兼容性: ```bash rosdep check hik_camera_driver # 验证依赖 ``` 2. 升级组件: - 从[海康官网](https://www.hikrobotics.com/cn/machinevision/service/download)下载最新 SDK - 更新 ROS 驱动(推荐使用官方维护版本): ```bash cd ~/catkin_ws/src git clone https://github.com/HikRobotics/hik_camera_ros.git catkin_make ``` ##### 4. 启用详细日志 在 launch 文件中开启调试日志: ```xml <node pkg="hik_camera_driver" type="camera_node" name="camera" output="screen"> <param name="debug" type="bool" value="true"/> <!-- 启用SDK日志 --> <param name="log_level" type="int" value="4"/> <!-- 详细日志级别 --> </node> ``` 通过日志可定位具体报错的参数名,常见错误如: ``` [ERROR] MV_E_PARAMETER: Invalid parameter (nParam = 0x4, value=500.0) ``` ##### 5. 参数映射检查 若使用第三方驱动,检查参数映射文件(如 `hik_camera/config/params_map.yaml`)是否正确定义 ROS 与 SDK 参数的对应关系: ```yaml ros_param: "gain" # ROS参数名 sdk_param: "GainRaw" # SDK对应参数名 converter: "float" # 类型转换规则 range: [0.0, 24.0] # 有效范围 ``` --- #### 典型错误场景修复 **案例**:设置帧率 60fps 报错 **原因**:相机最大支持 30fps **修复**: ```bash rosparam set /camera/frame_rate 30 # 修改为有效值 rosnode kill /camera_node # 重启节点 roslaunch hik_camera camera.launch ``` **案例**:分辨率 1920x1080 报错 **原因**:相机仅支持 1920x1200 或 1280x720 **修复**: ```yaml # camera_params.yaml resolution: [1920, 1200] # 使用MVS验证过的分辨率 ``` --- #### 进阶调试 若问题持续存在: 1. 使用 `rosparam dump` 导出参数检查: ```bash rosparam dump params.yaml /camera ``` 2. 通过 SDK 原生 API 验证参数: ```cpp MV_CC_SetFloatValue(handle, "AcquisitionFrameRate", 30.0); if(ret != MV_OK) { ROS_ERROR("Set failed: %x", ret); // 输出错误码 } ``` 3. 联系海康技术支持提供相机型号与以下信息: - ROS 驱动版本 - SDK 版本号 - `rosparam list` 输出 - 完整的启动日志 > 注:海康相机对参数精度敏感,浮点参数需确保在 $$ \pm 10^{-6} $$ 误差范围内[^1]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值