• ubuntu20.04 ROS 环境下使用 Flir Blackfly S 工业相机


    Flir Blackfly 官网:网址
    Spinnaker C++ API 网址

    Flir Blackfly S USB3 产品介绍

    Blackfly S 采用业内先进的冰块外形传感器。
    具有强大功能,可以轻松生成所需的精确图像,并加速应用程序开发。
    包括对图像捕获和相机预处理的自动和精确手动控制
    Blackfly S 提供GigE、USB3、套装和板级版本。
    精确图像 索尼CMOS传感器中的选择包括:全局快门、偏振和高灵敏度BSI传感器。

    实物图如下:
    在这里插入图片描述
    使用的型号为:BFS-U3-16S2C-CS

    其主要参数如下:
    在这里插入图片描述

    安装 Spinnaker

    Spinnaker SDK的下载地址:
    地址

    但是只能找到2.x版本的

    Spinnaker2及以上,安装后不再系统include文件夹中添加头文件,影响驱动“”对文件的索引。

    注意安装完毕后,文件是在 /opt 文件夹中

    如果用 flir_adk_ethernet 功能包 怎会出现 找不到头文件的情况。 如果能找到 Spinnaker1.x 版本的,这个功能包则可以用。

    安装Spinnaker 在下载的文件夹找到install_spinnaker.sh这个文件,然后在其路径下打开终端,输入

    sudo sh install_spinnaker.sh
    
    • 1

    安装提示安装即可。

    安装 spinnaker_sdk_camera_driver 功能包

    由于安装的 2.x版本的 Spinnaker 所以 最好 选择 这个功能包 ,省去配置路径的很多麻烦。

    该功能包对于 x86_64 的电脑 需要 安装如下依赖

    • unwind-dev
    • ros-noetic-cv-bridge
    • ros-noetic-image-transport

    通过如下指令安装 依赖

    sudo apt install libunwind-dev ros-noetic-cv-bridge ros-noetic-image-transport
    
    • 1

    从github上下载功能包

    git clone https://github.com/neufieldrobotics/spinnaker_camera_driver.git
    
    • 1

    放到ros的工作空间编译

    catkin_make
    
    • 1

    好了,如果是 ubuntu 18.04 之前的版本应该没问题

    但是我的是 ubuntu 20.04 版本的,编译报错了

    提示 ,在 std_include.h 文件中找不到 cv.h文件

    原因就是 ubuntu 20.04 的opencv版本是 v4的,版本不匹配造成的。

    此时需要对功能包源码进行一定修改

    打开 std_include.h 文件,删掉 第 9行

    9  -  #include <cv.h>
    
    • 1

    打开 capture.cpp 文件 ,修改 第 1000 行

    if (LIVE_)namedWindow("Acquisition", CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO);
    
    • 1
    if (LIVE_)namedWindow("Acquisition", WINDOW_NORMAL | WINDOW_KEEPRATIO);
    
    • 1

    将上面的改为下面的

    修改 第 1049 行

    int key = cvWaitKey(1);
    
    • 1
    int key = waitKey(1);
    
    • 1

    将上面的改为下面的

    修改 第 1073 行

    cvDestroyAllWindows();
    
    • 1
    destroyAllWindows();
    
    • 1

    将上面的改为下面的

    修改 第 1101 行

    cvDestroyAllWindows();
    
    • 1
    destroyAllWindows();
    
    • 1

    将上面的改为下面的

    然后再编译即可成功!

    增加USB3.0的带宽限制

    默认的,在Linux系统中,USB-FS 仅有16MB的带宽对于所有的USB设备。对于高帧率相机来说这个带宽就太少了,并且如果相机的分辨率很高,或者同时接多个相机,那么都需要增大其带宽限制。

    在安装 Spinnaker 的时候 会 自动的 设置 带宽。 如果想确定成功没有,可以打开 /etc/rc.local文件,如果没有这个文件,肯定没有设置成功。
    有这个文件的话,打开,看最后有没有下面这句话:

    sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
    
    • 1

    如果有,那么设置应该成功了。还可以通过如下指令查看

    cat /sys/module/usbcore/parameters/usbfs_memory_mb
    
    • 1

    设置成功,终端如下:
    在这里插入图片描述
    如果没有成功,可以执行

    sudo sh configure_usbfs.sh
    
    • 1

    这个脚本。

    也可以手动设置这个带宽,方法如下:
    首先 添加 rc.local 文件,并附权

            $ sudo touch /etc/rc.local
            $ sudo chmod 744 /etc/rc.local
    
    • 1
    • 2

    在最后添加下面这个句

    sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
    
    • 1

    然后保存,重启设备。用上面的检测方法检查下,失败的话用下面的

    $ sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
    
    • 1

    如果用多个相机的话,那么可能要超过1000

    硬件连接

    在这里插入图片描述

    修改相机id号

    相机本身自己有一个8位的id号,在相机的下部。这个id号要填到 test_params.yaml 文件中

    cam_ids:
    
    • 1
    master_cam:
    
    • 1

    改这两个值

    启动驱动

    roslaunch spinnaker_sdk_camera_driver acquisition.launch
    
    • 1

    然后可以查看当前 消息 名称

    rostopic list
    
    • 1

    在这里插入图片描述

    /camera_array/cam0/image_raw 就是图像的消息

    rostopic hz /camera_array/cam0/image_raw
    
    • 1

    可以查看其频率
    在这里插入图片描述

    rviz查看图像

    启动rviz

    rviz
    
    • 1

    添加 image 功能菜单,然后Image Topic 选择/camera_array/cam0/image_raw

    即可出现画面,如下:
    在这里插入图片描述

  • 相关阅读:
    Windows 修vscode的插件安装和缓存目录 释放C盘空间
    vue防抖和限流
    hive排序
    elementUI textarea可自适应文本高度的文本域
    linux 配置 NTP 服务器
    mysql数据库优化--数据库参数
    v-cloak指令的使用
    echarts手动触发气泡的显示和隐藏
    贪吃蛇游戏
    GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图
  • 原文地址:https://blog.csdn.net/qq_32761549/article/details/126488889