Basler相机内参标定及Basler相机和Livox-avia激光雷达联合标定

本次相机内参标定及相机-激光雷达联合标定采用的数据为同一批。数据采集系统:ubuntu-20.04,ROS-noetic。

前期准备

  1. 关于系统安装以及ROS环境配置,在这里不写出具体步骤,可查阅其他相关回答,不同的ubuntu系统版本也可进行相关操作。

  1. 利用ROS-neotic启动basler相机和Livox-avia激光雷达。本次试验中相机、激光雷达的供电以及数据连接均以usb数据线的形式。其相机和雷达固定如下:

其中相机连上usb,输入相关指令即可开启,激光雷达需要设置相应网络ip以后才能被系统识别到。

数据采集

利用相机采集不同位置下的标定板图像,保持标定板在相机事业和激光雷达视野中的完整性,尽量不要太靠边,边缘可能会导致相机畸变误差较大。在运行launch文件之前,最好先将终端的root的权限打开,否则会导致一些launch命令由于权限原因无法正常运行,打开root权限后需要重新配置启动环境。

  1. 开启一个终端,配置ros启动环境后输入roscore。

  1. 启动激光雷达。另外打开一个终端,配置好setup.bash后输入:


roslaunch livox_lidar_rviz.launch

此指令将打开配置好livox激光雷达话题信息的rviz,正常情况下可以看到激光雷达的扫描点云。

  1. 启动相机。另外打开一个终端,配置好setup.bash环境后输入:


roslaunch pylon_camera pylon_camera_node.launch
#or
rosrun pylon_camera pylon_camera_node

在以及打开的rviz中点击add--by topic--image,如下图(由于自己没截图,在其他回答中复制个图过来,内容一样):

,这个时候在左下角会出现相机拍摄的画面。

  1. 再开启一个终端,输入rqt(若没安装则需要安装),目的是方便保存图像。开启rqt后,选择话题信息后,相机拍摄的画面即可在新的窗口打开,如下图,并且可随意保存格式,只需自己修改保存时的名称后缀,由于livox官方给出的标定教程里是用的bmp图片格式,这里我们保存bmp格式。

  1. 将相机-激光雷达固定,只移动标定板,然后保存一张该位置的图像命名为0.bmp,新开终端,输入指令录制十秒左右点云包,配置启动环境后输入:


rosbag record /livox/lidar

,差不多十秒以后用快捷键ctrl+C结束。然后移动标定板,不同位置总共20个素材左右即可,即从0-19。

执行第4步之前,关闭指令3的终端操作,改成


roslaunch livox_ros_driver livox_lidar_msg.launch

,若不改,则记录的点云包无法转化成相应pcd格式文件。

  1. 新建一个文件夹,命名为data,在里面再创建两个文件夹用以保存图片文件和点云bag包文件

采集的图像如下:

  1. 关于点云bag包文件,我们需要将其转化为pcd文件,在livox中找到pcdTransfer.launch文件,修改需要转格式的点云包名称和所在地址,修改其中的保存地址,将地址改为自己创建的data文件地址,打开新终端,配置livox启动环境setup.bash后输入:


roslaunch camera_lidar_calibration pcdTransfer.launch

转化完成以后文件自动保存在data新建的文件夹中,打开一张点云pcd文件如下:

相机标定

本次教程相机内参标定在matlab中进行,也可利用ros完成标定,教程详见livox_camera_lidar_calibration/README_cn.md at master · Livox-SDK/livox_camera_lidar_calibration (github.com)

  1. 打开matlab,选择APP,找到下方的camera calibration并打开,导入采集的bmp照片,根据自己标定板棋盘格信息填入参数,例如我的标定板棋盘格单个格子边长为10mm,就输入10。

  1. 点击calibrate标定,稍等片刻即可标定完成,然后输出标定参数。

  1. 在工作区间可以输入以下指令查看内参矩阵(编写内参文件时需要将该矩阵转秩):


calibrationSession.CameraParameters.IntrinsicMatrix

输入以下指令查看径向畸变:


calibrationSession.CameraParameters.RadialDistortion

,切向畸变默认为0。

联合标定

方式一:利用livox提供的标定工具包livox_camera_lidar_calibration

  1. 前提条件是安装了livox-ros-driver,见官方安装教程,其中对于官方教程中不明确的我在下面指出,帮助大家节省时间:

livox_camera_lidar_calibration/README_cn.md at master · Livox-SDK/livox_camera_lidar_calibration (github.com)

  1. 其中依赖项ceres-solver,由于我安装的ubuntu版本为20.04,ros版本为neotic,和官方教程版本不一致,安装最新版本的ceres-solver后无法正常安装标定工具包,因此我安装了稳定版如下:

  1. 上面采样时创建了文件夹data,在data文件夹内新建文件夹parameters,在该文件夹内创建文本文档intrinsic.txt,将相机内参数据写入,如下:

上面矩阵为matlab标定后的矩阵的转置,下面前两位时径向畸变,后面三个一般默认为0。

  1. 获得照片中标定板的四个角点,用功能包 cornerPhoto.launch,记得修改launch文件中的照片路径,每次打开一张新照片需要修改launch文件中的照片编号,然后重新启动launch文件,命令如下:


roslaunch camera_lidar_calibration cornerPhoto.launch

移动鼠标即可看到像素坐标信息,如下:

neotic版本的ros使用该功能包后可能无法显示坐标信息,需要用其他的方式找到棋盘格角点坐标,我用的是matlab中的图像查看器:

从左上角逆时针,依次记录下照片角点信息。记录完毕后选中显示的图片按任意键,进入坐标输入流程。把记录下的四个坐标”x y”按顺序输入,x和y中间要有空格(比如: “635 487”),输入完成后输入”0 0”即可结束输入流程(如下图例所示)。程序会算出四个更精确的float类型坐标显示出来,并保存在data/corner_photo.txt中。然后按任意键结束整个流程,图像角点信息输入以后会自行创建文件。(其中按任意键的时候关闭终端的输入功能,在终端外点击一下即可。)

更改cornerPhoto.launch文件中的照片路径,重复上述流程,直至获得所有照片的角点坐标。

  1. 获取点云角点。上面已经将点云bag包转化为pcd格式,所以现在只需要使用pcl_viewer打开PCD文件,按住shift+左键点击即可获得对应的点坐标,可能会很小需要将点云放大,其坐标会在终端显示,注意取点顺序,京可能精确,否则会导致标定误差较大。点云角点信息需要自行记录,并保存在data/corner_photo.txt中,与图像角点文件不同的是,点云角点文件需要自己创建并录入,其格式和图像角点文件一样:

  1. 外参计算节点会读取data/corner_photo.txt和data/corner_lidar.txt中的标定数据来计算外参,数据需要保存成特定的格式才能被外参计算节点正确读取。参考以下格式,每行数据只有超过10个字母程序才会将其读取为计算的参数,比如下图用来编号的1234,lidar0和0.bmp这些标题不会被读取为计算参数。程序读到空行就会停止读取参数开始计算,所以保存时不要空行,并且保证点云角点不空行的部分数量和图片角点不空行的数量一致!否则会导致计算错误。

  1. 计算前在getExt1.launch文件中配置好外参初值 [注 8],输入指令开始计算外参:


roslaunch camera_lidar_calibration getExt1.launch

终端中可以看到每次迭代运算的cost,外参结果以齐次矩阵的格式保存 data/parameters/extrinsic.txt下。

方式二:利用matlab标定工具lidar_camera_calibration

  1. 本次matlab版本为R2022a。在matlab中打开该功能,将照片文件夹和点云文件夹导入,其中square size是棋盘格单个格边长,下面padding是棋盘格四个边的留白部分,根据自己标定板数据填入,Matlab会自动导入数据并计算相机内参。

  1. 系统默认的数据格式可能会使得点云中标定板的特征无法识别,这个时候需要修改一下检测数据的最大公差,并且自行框选点云中标定板的部分:

  1. 修改顺序如下:

  1. 依次将所有点云中的标定板特征全部选中,不要遗漏,然后apply:

  1. 等待特征识别,去除识别不对的点云,然后点击开始标定,导出标定结果到工作区间,标定完毕。

  1. 效果如下:

点云投影和彩色点云

  1. 投影。在projectCloud.launch文件中配置点云和照片的路径后,运行指令,将rosbag中一定数量(可在launch文件中修改数量)的点投影到照片上并且保存成新的照片。


roslaunch camera_lidar_calibration colorLidar.launch
  1. 在colorLidar.launch文件中配置点云和照片的路径,运行指令,可以在rviz中检查着色的效果。


roslaunch camera_lidar_calibration colorLidar.launch

我这个由于相机焦距太大,导致相机视野很小,所以出现这种效果,标定效果其实还凑合。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卓沅best

点个赞也是鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值