实测ubuntu20.04机械式激光雷达与相机联合标定

描述

 

安装功能包

 

 

实测 ubuntu20.04 本地安装

 

安装步骤如下:

 

下载功能包

 

git clone -c http.sslverify=false https://gitlab.acfr.usyd.edu.au/its/cam_lidar_calibration.git

 

成功提示:

 

 

激光雷达

 

 

安装依赖:

 

sudo apt update && sudo apt-get install -y ros-noetic-pcl-conversions ros-noetic-pcl-ros ros-noetic-tf2-sensor-msgs

 

成功提示:

 

 

激光雷达

 

 

安装pandas 和 scipy

 

pip install pandas scipy

 

将功能包拷入ros的工作空间,然后编译

 

catkin_make

 

不出意外会报错误

 

 

激光雷达

 

 

仍然是 ubuntu20.04 opencv 的 版本问题

 

错位解决办法:

 

打开include文件夹下的 optimise.h文件


将第10行

 

#include <opencv/cv.hpp>

改为

 

#include <opencv2/opencv.hpp>

 

再次编译报错:

 

 

激光雷达

 

 

CV_REDUCE_SUM 这个变量没定义,opencv3到opencv4切换带来的错误

 

在 optimise.h文件中加入下面的包含文件

 

#include<opencv2/core/core_c.h>

 

 

激光雷达

 

 

编译通过

 

 

 

功能包测试

 

 

作者在功能包中放了测试数据,提供测试

 

roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=true

 

该程序根据cam_lidar_calibration/data/vlp/文件夹下的pose.csv标定,在该文件夹生成一个标定camera和lidar外参文件

 

终端输出

 

 

激光雷达

 

 

每一行则是迭代后的结果

 

终端输出这个的时候

 

激光雷达

 

表示迭代完了

 

然后获取评估校准结果


终端输出

 

 

激光雷达

 

 

生成一个雷达投射到图片上的图片

 

 

激光雷达

 

 

 

 

利用功能包标定激光雷达和相机

 

 

设置参数

 

主要修改

cam_lidar_calibration/cfg/camera_info.yaml和

params.yaml

 

cam_lidar_calibration/cfg/camera_info.yaml 文件设置如下:

 

distortion_model: "non-fisheye"width: 1440height: 1080D: [-0.106460,0.103712,-0.000019,0.003994]K: [1213.343583,0.0,744.150520,0.0,1217.236982,586.154363,0.0,0.0,1]

 

设置是:

 

  • 否为鱼眼相机

  • 像素宽和高

  • 内参矩阵

  • 失真系数

     

相机的内参标定方法可以参考这篇博客:

 

params.yaml 文件设置如下:

 

# Topicscamera_topic: "/camera_array/cam0/image_raw"camera_info: "/camera_array/cam0/camera_info"lidar_topic: "/velodyne_points"

 

分别是:

 

  • 相机消息名称

  • 相机信息

  • 激光雷达消息名称

     

feature_extraction:  x_min: -10.0  x_max: 10.0  y_min: -8.0  y_max: 8.0  z_min: -5.0  z_max: 5.0

 

点云的选取范围,用默认的就是,之后可以在线调

 

chessboard:  pattern_size:    height: 14    width: 9    square_length: 11  board_dimension:    width: 390    height: 596  translation_error:    x: 0    y: 0

 

标定棋盘的相关参数
和背板的相关参数
距离都是mm为单位

 

启动相机和激光雷达

 

启动相机

 

roslaunch spinnaker_sdk_camera_driver acquisition.launch

 

启动激光雷达

 

roslaunch velodyne_pointcloud VLP16_points.launch

 

启动功能包

 

开启程序采集表定数据,运行命令:

 

roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false

 

会出现RVIZ和rqt_reconfigure窗口,在RVIZ中panels->display修改相机的话题和激光雷达点云对应的frame_id。

 

调整rqt_reconfigure /feature_extraction的xyz最大值最小值以使得标定板的点云和周围环境分开,使其仅显示棋盘。

 

如果棋盘没有完全隔离,可能会影响棋盘的平面拟合,还会导致棋盘尺寸误差较大。下图是过滤点云前后效果:

 

激光雷达



在过滤周围环境点云后,在rviz中点击Capture sample采集样本,会出线绿色框代表根据点云拟合出来的标定板平面

 

激光雷达



终端会打印出来添加的样本信息

 

 

激光雷达

 

 

最好采集10个样本以上,再点击rviz中的optimise进行标定,在优化过程中将会在cam_lidar_calibration/data生成当前时间日期的文件夹,存放采集的图像、点云pcd、位姿,标定后camer和lidar外参文件。

 

终端输出开始校准:

 

 

激光雷达

 

 

校准结束后输出:

 

 

激光雷达

 

 

评估参数和重投影误差:

 

roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/2022-09-06_14-48-42/calibration_2022-09-06_15-13-07.csv" visualise:=true

 

注意这里默认加载第16个图像,如果没有那么大的标定样本,要修改launch文件中的加载序列

 

出现重投影效果图像


终端出现标定参数和重投影误差

审核编辑 :李倩  


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分