本次相机内参标定及相机-激光雷达联合标定采用的数据为同一批。数据采集系统: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

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

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

  1. autoware1.14安装相机和激光雷达联合标定工具

    autoware1.14安装相机和激光雷达联合标定工具 参考博客 安装autoware1.14 autoware 1.10.0版本中的标定工具箱单独编译安装 1.安装nlopt 2.安装标定工具箱 3 ...

  2. 单目针孔相机与激光雷达联合标定

    1 针孔相机各坐标系与激光雷达坐标系的介绍 1.1 像素坐标系 像素坐标系是选择在图像的左上角位置作为原点的,单位为pixel,(大概是由于在图像转换为矩阵进行索引时,全为正值更方便吧?) 图像坐标系 ...

  3. HoloLens2 初入——从Lut表中求解相机内参

    文章目录 HoloLens2 初入--从Lut表中求解相机内参 引言 HoloLens2 的相机们 基本条件 解畸变 ----------------------------------------- ...

  4. ZED2跑ORB-SLAM3+双目相机、IMU联合标定+显卡驱动与cuda/cudnn安装

    一.引言 同样是项目需求,需要利用视觉惯性导航做一些开发,所以第一步先做些算法的测试–仿真与实物测验,通过仿真的测试结果,最终是决定使用ORB-SLAM3来完成任务,当然了,Vins-fusion作为 ...

  5. 双目相机 -- IMU联合标定

    声明:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅!!! 目录 **声明**:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅! ...

  6. ubuntu18.04 使用calibration_camera_lidar 实现激光雷达和相机联合标定

    Autoware1.10以上的软件都需要单独安装这个calibration标定工具箱 1.nlopt安装 新开一个终端: git clone git://github.com/stevengj/nlo ...

  7. opencv 通过标定摄像头测量物体大小_视觉激光雷达信息融合与联合标定

    点击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编者按 最近在为车辆添加障碍物检测模块,障碍物检测可以使用激光雷达 ...

  8. form:errors path 不显示出错信息_视觉激光雷达信息融合与联合标定

    一.引言 最近在为车辆添加障碍物检测模块,障碍物检测可以使用激光雷达进行物体聚类,但是我们使用的是16线的velodyne,线数还是有些稀疏,对于较远的物体过于稀疏的线数聚类效果并不好,因此考虑使用视 ...

  9. 视觉激光雷达信息融合与联合标定

    作者丨Coulson@知乎 来源丨https://zhuanlan.zhihu.com/p/55825255 编辑丨3D视觉工坊 一.引言 最近在为车辆添加障碍物检测模块,障碍物检测可以使用激光雷达进 ...

最新文章

  1. 如何判断 Linux 是否运行在虚拟机上
  2. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
  3. 游标sql server_SQL Server游标教程
  4. python基础之字符编码、文件处理
  5. unique去除重复的向量_Matlab如何剔除矩阵中重复列向量
  6. 如何手动从Exchange2007/1010边缘/集线器传输服务器卸载ScanMail for Exchange(SMEX10.0)程序...
  7. 大学计算机信息技术实验与测试教程第2版,大学信息技术实验指导
  8. pandaboard 安装_pandaboard---文件系统的建立(4)
  9. 电视机顶盒搜台原理和方法简析
  10. 精益生产管理专家——安岷老师
  11. 2014第六届云计算大会参会体会和个…
  12. 飞猪官方揭秘双11爆款产品打造攻略:1个数据银行+5大设计方法论
  13. Default changeset implementation allows only one operation
  14. 如何通过反向代理实现伪装IP?
  15. 孩子学python_小孩子的内心世界
  16. python文本自动伪原创_Python调用有道智云文本翻译API接口实现“智能”伪原创
  17. 177本名著浓缩成了177句话 http://sns.linuxpk.com/space-57013-do-blog-id-16689.html
  18. MP3文件的切割和合并
  19. Rare-Variant Association Analysis | 罕见变异的关联分析
  20. H5移动端开发基础(三)自定义滚动条、实战-音悦台

热门文章

  1. ubuntu16安装python3.6
  2. 合肥-NIO蔚来汽车JAVA开发
  3. Java获取客户端请求电脑IP,操作系统等等各种信息
  4. 我们国家进5年攻防比赛情况汇总
  5. PrefixSpan算法详解+举例实现+代码
  6. Arthas阿尔萨斯的使用安装详细教程
  7. Altium常用快捷键
  8. 已知有十六支男子足球队参加2008北京奥运会,写一个程序分组,每组四队
  9. javaScript常用语法(持续更新)
  10. 用4种方法完成计算机的关闭,在Win10中的4种自动关闭的方法 | MOS86