Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机

运行环境:Ubuntu20.04(64-Bit)

ROS版本:Noetic

网卡型号:Realtek RTL 8156外置网卡

相机型号:acA 1920-25gc (GigE接口)

驱动版本:pylon_6.3.0

目录

1 准备工作

        1.1 检查网卡

        1.2 检查通信

2 用SDK驱动读取图像

        2.1 安装驱动

        2.2 遇到的问题及解决方法

        2.3使用方法

                2.3.1 编译驱动程序

                2.3.2 运行程序

                2.3.3 查看图像

3 同时读取速腾激光雷达点云和相机图像

4 获取图像

        4.1 制作棋盘格标定板

        4.2 拍摄图像

5 内参标定

        5.1 打开标定程序

        5.2 添加图片

        5.3 配置标定设置

        5.4 计算标定参数

        5.5 导出标定参数

6 编写标定文件

        6.1 格式要求

        6.2 编写yaml文件

        6.3 设置相机标定文件路径

7 校准相机

        7.1下载程序包

        7.2 启动image_proc节点

        7.3 查看图像

****************************** ROS读取basler相机图像 ***********************************

1 准备工作

1.1 检查网卡

需要安装网卡驱动并打开巨型帧。

参考网址:Linux Ubuntu20.04安装RTL8156网卡驱动开启巨型帧_abanchao的博客-CSDN博客

1.2 检查通信

用pylon Viewer配置IP,保证能够正常查看图像。

参考网址:Windows10下pylon Viewer读取basler相机图像_abanchao的博客-CSDN博客

2 用SDK驱动读取图像

2.1 安装驱动

按照官网说明进行安装。

pylon_camera - ROS Wiki

参考链接:ubuntu18.04 ROS Basler相机详细步骤_贵在坚持,不忘初心的博客-CSDN博客_basler ubuntu

2.2 遇到的问题及解决方法

 rosdep update 时报错

1、更改google域名服务器

sudo gedit /etc/resolv.conf

2、将原有的nameserver这一行注释,并添加以下两行:

nameserver 8.8.8.8  
nameserver 8.8.4.4  

3、保存,退出,执行

sudo  apt-get update
rosdep update

但是,我按这个操作之后,并不能执行,不记得捣鼓过其他操作,下午来了发现可以了……

2.3使用方法

2.3.1 编译驱动程序

修改config的default.yaml文件中的image_encoding为bayer_gbrg8以输出彩色图像。

随后编译程序包。

catkin_make
source devel/setup.bash

2.3.2 运行程序

roslaunch pylon_camera pylon_camera_node.launch
#or
rosrun pylon_camera pylon_camera_node

2.3.3 查看图像

2.3.3.1 直接订阅节点信息

rosrun image_view image_view image:=/pylon_camera_node/image_raw

修改曝光时间可以调整照片亮度,见下下张图。

2.3.3.2 RVIZ订阅查看

roscore
rosrun rviz rviz

Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第1张图片

2.3.3.3 使用rqt工具查看

rqt_image_view

3 同时读取速腾激光雷达点云和相机图像

先运行雷达驱动包,再运行相机驱动包,并在RVIZ里订阅图像话题。

Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第2张图片

至此,已经能够获取图像了,但是还有一个问题:使用image_view和rqt等方式查看图片是彩色,但是在RVIZ里显示的是灰度图。原因是没有标定配准相机,标定工具有很多,比如matlab,autowar,这里选择matlab 2021b进行标定。

****************************** MATLAB 2021b 标定basler单目相机 ******************************

4 获取图像

4.1 制作棋盘格标定板

棋盘格有多种尺寸规格,选择A4大小的棋盘格可以直接在实验室打印机打印,较为方便。

棋盘格:8*6

单格尺寸:24mm

A4棋盘格文件,张正友标定法标定棋盘格-图像识别文档类资源-CSDN文库

4.2 拍摄图像

使用官方软件拍摄保存图片就很方便,20多张图片就行。

相机和棋盘格一个固定,一个移动拍摄。

Windows10下pylon Viewer读取basler相机图像_abanchao的博客-CSDN博客_pylon viewer使用

5 内参标定

5.1 打开标定程序

选择APP->图像处理和计算机视觉->Camera Calibration

5.2 添加图片

单击add image选择拍摄的图片。

5.3 配置标定设置

camera model:单目工业相机选择Standard

radial distortion:2/3代表去畸变参数的个数,最好选3,反正是电脑算。

compute:skew指的是图像扭曲参数,可以不选

5.4 计算标定参数

单击calibration后,界面右侧出现平均误差柱状图和相机与各标定板位置关系图。

发现某一张图片带来的误差较大时,可以单击条形,再从左侧图片列表右键删除并重新计算,使平均误差在0.5以下就可以。

5.5 导出标定参数

点击Export  camera calibration -> save session 会在matlab主界面显示标定计算结果。

camera intrinsics即相机内参。

Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第3张图片

 Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第4张图片

 

6 编写标定文件

6.1 格式要求

主要有.ini和.yaml两种格式,具体内容可参考:camera_calibration_parsers - ROS Wiki

官方模板

  • .ini 格式
# Prosilica camera intrinsics

[image]

width
2448

height
2050

[prosilica]

camera matrix
4827.93789 0.00000 1223.50000
0.00000 4835.62362 1024.50000
0.00000 0.00000 1.00000

distortion
-0.41527 0.31874 -0.00197 0.00071 0.00000

rectification
1.00000 0.00000 0.00000
0.00000 1.00000 0.00000
0.00000 0.00000 1.00000

projection
4827.93789 0.00000 1223.50000 0.00000
0.00000 4835.62362 1024.50000 0.00000
0.00000 0.00000 1.00000 0.00000
  • .yaml格式
image_width: 2448
image_height: 2050
camera_name: prosilica
camera_matrix:
  rows: 3
  cols: 3
  data: [4827.94, 0, 1223.5, 0, 4835.62, 1024.5, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.41527, 0.31874, -0.00197, 0.00071, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
  rows: 3
  cols: 4
  data: [4827.94, 0, 1223.5, 0, 0, 4835.62, 1024.5, 0, 0, 0, 1, 0]

6.2 编写yaml文件

直接在windows系统下新建文件,编写好后复制到ubuntu系统下,因为matlab就在windows系统。

image_width: 1920    
image_height: 1080
camera_name: camera
camera_matrix:
  rows: 3
  cols: 3
  data: [1652.202421, 0.00000, 0.00000,0.00000, 1648.337163, 0.00000, 948.888962, 605.836583 ,1.00000]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.239836474995421, 0.167935274313871, -0.0934123092297426, 0, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
  rows: 3
  cols: 4
  data: [1652.202421, 0.00000, 0.00000, 0.00000, 1648.337163, 0.00000, 651.074403, 0.00000, 948.888962, 605.836583 ,1.00000, 0.00000]

注意:

  • image_width和image_height分别是图像的宽和高,一定要填写正确。
  • camera_name相机名的匹配方法:看下一张图1处警告前括号内的名称,修改后没有该警告。

6.3 设置相机标定文件路径

把以上标定文件复制到ubuntu系统下,最好放置到相机对应的工作空间下,其他位置也行,因为需要设置绝对路径

修改相机config.yaml文件中的 camera_info_url 项,按照以下格式进行书写。

file:///full/path/to/local/file.yaml
file:///full/path/to/videre/file.ini
package://camera_info_manager/tests/test_calibration.yaml
package://ros_package_name/calibrations/camera3.yaml

Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第5张图片

7 校准相机

标定内参的文件有了,还需要用到 image_proc节点 根据参数进行校准。

7.1下载程序包

GitHub - ros-perception/image_pipeline: An image processing pipeline for ROS.

把包里的image_proc文件夹复制到相机的工作空间的/src文件夹下,包里的camera_calibration也是一个内参标定的工具。

重新编译时,如果报错"Could NOT find nodelet_topic_tools",则是缺少了nodelet_topic_tools功能包,可以输入以下命令查看所有功能包进行确认。

rospack  list

如果没有,则输入以下命令进行安装:

sudo apt-get install ros-noetic-nodelet-topic-tools

然后重新编译。

7.2 启动image_proc节点

在按照 2.3.2 启动相机程序后,新打开一个终端,输入以下命令:

ROS_NAMESPACE=pylon_camera_node rosrun image_proc image_proc

7.3 查看图像

选择图像校准后的节点 /pylon_camera_node/image_color/image 进行查看。

Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第6张图片

至此,对相机的标定校准工作完成,可以在RVIZ里查看彩色图像了,也可以通过保存节点的方式进行保存bag文件了。

Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机_第7张图片

感谢

传感器标定(1.单目相机的标定)_MendozaG的博客-CSDN博客_传感器标定

你可能感兴趣的:(相机,自动驾驶,人工智能,机器学习)