lidar_camera_calibration项目——激光雷达和相机联合标定

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanghm1995/article/details/87802656

作为无人驾驶中常用的传感器,激光雷达和相机都有自己特有的优势,然而它们也各有缺点和不足,现在主流的感知算法都向传感器融合方法靠拢,这就涉及到不同传感器之间的标定问题,本博文主要针对一个开源项目讲解激光雷达和相机之间的外参标定,即如何通过实验的方法得到激光雷达和相机之间的旋转平移矩阵。

项目地址https://github.com/ankitdhall/lidar_camera_calibration
项目描述:该功能包用来找到激光雷达和相机之间的旋转平移变换,该包使用aruco_ros和一个稍微修改的aruco_mapping包为依赖,lidar_camera_calibration/pointcloud_fusion可以用来融合点云和两个双目相机的信息,两个双目相机都和激光雷达进行过外参标定。
在使用该包之前,需要先做好相机内参标定,因为需要一些相机内参参数的一些信息。

项目截图:

lidar_camera_calibration ROS包配置过程记录

依赖配置:

1、先将整个Github包clone下来,放在已经建好的ROS工作空间下,clone完成后生成文件夹lidar_camera_calibration;
2、将文件夹lidar_camera_calibration下的dependencies路径下的两个目录aruco_mapping和aruco_ros拷贝到ROS工作空间的src路径下;
准备编译:由于各个包之间有依赖关系,必须按以下顺序安装
3、先编译aruco_ros包

catkin_make -DCATKIN_WHITELIST_PACKAGES="aruco_ros"

4、再编译lidar_camera_calibration包

catkin_make -DCATKIN_WHITELIST_PACKAGES="lidar_camera_calibration"

此时可能会报错,缺少velodyne_msgs包,需要安装参考以下网站:
http://wiki.ros.org/velodyne/Tutorials/Getting Started with the HDL-32E

安装过程:

项目依赖velodyne ROS包,需要下载安装:

sudo apt-get install ros-kinetic-velodyne

5、再次编译lidar_camera_calibration

catkin_make -DCATKIN_WHITELIST_PACKAGES="lidar_camera_calibration"

6、编译aruco_mapping

catkin_make -DCATKIN_WHITELIST_PACKAGES="aruco_mapping"

运行过程

编译通过后,通过find_transform.launch文件启动所需节点和设置节点参数。
在运行launch文件之前,需要修改launch文件中的部分内容:
1、launch文件中默认将ArUco mapping节点注释掉了,可能需要启动该节点,并修改其中的重映射命令使得获取正确的相机图片话题:

 <remap from="/image_raw" to="/frontNear/left/image_raw"/>

修改相机标定文件路径参数(.ini格式文件),aruco标记的个数,标记尺寸(单位为米)
**注:**图片话题消息类型为sensor_msgs/Image类型
aruco mapping用来在图像中找到aruco marker,并发布6DOF的位姿.
http://wiki.ros.org/aruco_mapping
2. lidar_camera_calibration_rt话题是由aruco_mapping包发送出来的,包含了利用aruco marker计算出来的旋转平移矩阵数据
启动标定节点前,需要保证aruco标记能够在相机画面内可见,并且需要使这些标记的ID号从左到右按升序排列,运行过程第一次需要手动标记line-segments
标记过程:
每块板上都有四个线段,需要从左到右依次标记每个板上的直线段;此处对于每个板上的直线标记是在该线段的周围绘制一个四边形,每次点击一个点,并按下键盘确认,得到四个点之后就得到了包围一根直线的一个四边形,按这个方法把一个板上的直线从左上按顺时针依次标记。
标记完所有的直线段之后,就得到了最终的变换矩阵,中间值存储在conf/points.txt
points.txt文件

扫描二维码关注公众号,回复: 5249840 查看本文章

输出: 3x1的平移矩阵和3x3的旋转矩阵,设置迭代多少次,就有多少个这样的矩阵生成。通过对n次迭代生成的平移矩阵求平均,即可得到最终的平移矩阵,通过对n个旋转矩阵转换成四元数,然后求平均,即可得到最终的旋转矩阵,从而得到最终的标定矩阵。

程序解析

注: 该部分由于自己时间有限,暂时还没有完全写完,有空继续更新。
lidar_camera_calibration/conf目录包含了许多用来完成相机和雷达标定过程的配置文件

**注意:**其中的cloud_intensity_threshold用来滤除反射强度低于该值的点云,如果发现标定板上点云太少,可能需要修改该值试一下;
use_camera_info_topic用来表示是否使用相机消息的话题来获得相机的标定参数,否则从该config文件中读取标定参数,默认从文件读取;
相机投影矩阵对应的是CameraInfo中的矩阵K,表示的是将相机坐标系下的三维点,对应到像素坐标系下的位置。

标定计算过程由Find_RT.h文件完成;

猜你喜欢

转载自blog.csdn.net/zhanghm1995/article/details/87802656
今日推荐