cam_lidar_calibration标定速腾激光雷达和单目相机外参

12 篇文章 1 订阅


Windows 10(64bits) + VMware 16 Pro + Ubuntu 20.04 + Noetic
激光雷达:速腾聚创32线激光雷达 RS-LIDAR-32
单目相机:acA1920-40gc(GigE接口)


一、资源链接

代码:https://github.com/acfr/cam_lidar_calibration
论文:Optimising the selection of samples for robust lidar camera calibration
教程视频: youtube视频

二、代码测试

2.1安装依赖

sudo apt update && sudo apt-get install -y ros-noetic-pcl-conversions ros-noetic-pcl-ros ros-noetic-tf2-sensor-msgs
sudo apt install python3-pip   
pip3 install pandas scipy
sudo apt install ros-noetic-tf-conversions //如果缺少tf
sudo pip3 install -U catkin_tools  //如果报错“catkin:未找到命令”

2.2代码下载和修改

基本都是一些头文件问题,与opencv版本有关,对源码进行以下修改:

2.2.1 optimiser.h文件

修改
#include <opencv/cv.hpp> ————>  #include <opencv2/imgproc.hpp>
新增:
#include <opencv2/calib3d.hpp> 
#include <opencv2/core/core_c.h> 

2.2.2 feature_extractor.h文件

#include <opencv2/imgcodecs.hpp> 

2.3编译代码

注意:

  • 有博客教程用catkin_make编译,但是我有时会报以下错误:
  • 建议用catkin build编译
fatal error: cam_lidar_calibration/RunOptimiseAction.h: 没有那个文件或目录
   14 | #include <cam_lidar_calibration/RunOptimiseAction.h>

解决方法:

  • 删除build、devel文件夹,重新使用catkin build编译
mkdir -p cam_lidar_calibration_ws/src
cd cam_lidar_calibration_ws/src
git clone https://github.com/acfr/cam_lidar_calibration.git
cd ..
catkin build
source devel/setup.bash

2.4测试数据集

2.4.1迭代计算

测试作者提出的数据集,输入以下命令开始迭代计算

roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=true

输出标定结果csv文件到路径:/cam_lidar_calibration_ws/src/cam_lidar_calibration-master/data/vlp,内容如下:
在这里插入图片描述
images文件夹里是进行标定的图片,pcd文件夹里是点云

2.4.2查看校准结果

点云投影到图像上

roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_quickstart.csv" visualise:=true

在这里插入图片描述

三、标定自己激光雷达和相机

3.1修改代码

3.1.1camera_info.yaml配置文件

这个文件是相机内参,设置是否为鱼眼相机、像素宽和高、内参矩阵和失真系数。相机内参标定方法推荐采用ROS官方程序,camera_calibration
这里有个疑问:接收了camera_info话题,已经包含了相机内参,为什么还要有个文件设置内参?
答:再次检查camera_info,确保为正确的相机

distortion_model: "non-fisheye"
width: 1920
height: 1208
D: [-0.094019, 0.09411, -0.001433, 0.000995]
K: [1407.08388, 0.0, 959.1316, 0.0, 1406.07625, 599.30022, 0.0, 0.0, 1.0]

3.1.2params.yaml配置文件

这个文件配置标定程序接收的话题名称、点云选取初始范围和棋盘格参数
我采用了A2规格的标定板,生成棋盘格的matlab代码图片
生成camera_info话题的方式

# Topics
camera_topic: "/camera_raw"      	#格式为:sensor_msgs/Image
camera_info: "/camera_info"			#格式为:sensor_msgs/CameraInfo
lidar_topic: "/rslidar_points"		#格式为:sensor_msgs/PointCloud2

# Dynamic rqt_reconfigure default bounds,点云的选取的初始范围
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
  
# Properties of chessboard calibration target,棋盘格参数
chessboard:
  pattern_size:		#棋盘的内部顶点7*5
    height: 10
    width: 7  
  square_length: 50
  board_dimension:		# 底板规格
    width: 430
    height: 580
  translation_error:
    x: 2
    y: 0

3.1.3cam_lidar_calibration.rviz配置文件

在rviz里手动修改比较麻烦,可以之间改rviz文件

62   Image Topic: /camera_raw
156  Fixed Frame: rslidar

3.2录制数据集

数据集录制建议:

  • 按照不同的位姿分别录制,这个程序支持后台换rosbag
  • 要求点云和图像的时间戳接近,程序的执行是通过ROS时间同步机制进入回调函数的
  • /rslidar_points符合点云格式要求,可以进入回调函数
  • 论文里录制的位姿数量为:50

3.3正式标定

3.3.1开启程序

运行命令:

source devel/setup.bash
roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false

会出现RVIZ和rqt_reconfigure窗口

3.3.2播放数据集bag

推荐使用循环播放的方式,采集很短的原始数据就可以,避免下一步分割标定板点云时,还没分割好就播放完了,同时,可以避免采集长时间数据导致bag文件过大。

rosbag play -l filename.bag

3.3.3分割标定板点云

分别调整rqt_reconfigure /feature_extraction的xyz坐标最大值最小值,使区域内仅有棋盘格点云,然后点击窗口左下角的capture sample,如果分割效果或点云扫描效果不佳,会影响RANSAC拟合平面,而在终端里报错,如下两种,都是因为RANSAC拟合不好:
报错1:

[pcl::SampleConsensusModel::getSamples] Can not select 0 unique points out of 1!
[pcl::RandomSampleConsensus::computeModel] No samples could be selected!
[pcl::RandomSampleConsensus::computeModel] RANSAC found no model.
[pcl::SACSegmentation::segment] Error segmenting the model! No solution found.
[ERROR] [1683812483.061709716]: RANSAC unsuccessful, discarding sample - Need more lidar points on board

报错2:

[ERROR] [1683812611.096828779]: Plane fitting error, LiDAR board dimensions incorrect; discarding sample - try capturing again

在这里插入图片描述

位姿数量足够多时,再点击rviz中的optimise进行优化求解,最终结果保存到“cam_lidar_calibration/data/日期时间” 路径下,包括采集的图像、点云pcd、位姿。计算完成后,rviz里还是显示optimising,而且三个图标是灰色,看终端里显示了“end”就表示计算完成了,可以放心关闭程序,查看结果了。
我采集了50组数据,但是只有20组数据能提取出绿色框(标定板)和蓝色箭头(平面法向量)。
在这里插入图片描述

3.3.4评估参数和重投影误差

输入以下指令进行重投影,弹出点云投影到图像的效果,终端里显示误差

roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/2023-05-13_08-59-09/calibration_2023-05-13_10-13-18.csv" visualise:=true

请添加图片描述

参考资料

官方教程
激光雷达和相机联合标定之cam_lidar_calibration
【学习总结】激光雷达与相机外参标定:代码(cam_lidar_calibration)
cam_lidar_calibration相机与激光雷达标定在ros noetic 中编译
相机雷达联合标定cam_lidar_calibration

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
为了联合标定激光雷达和IMU的外参,你可以使用由瑞士苏黎世联邦理工大学自动驾驶实验室开发的lidar_align标定工具。下面是操作步骤: 1. 首先,你需要在终端中创建一个目录并进入该目录: ``` mkdir -p lidar_align/src cd lidar_align/src ``` 2. 然后,你需要使用git命令将lidar_align工具下载并安装到该目录中: ``` git clone https://github.com/ethz-asl/lidar_align.git ``` 这将会下载lidar_align的源代码并将其保存在lidar_align/src目录中。 3. 安装完成后,你可以按照你的需求修改lidar_align的参数配置文件。你可以根据实际情况调整激光雷达和IMU之间的变换参数。一般来说,在匹配算法中,姿态比位置更重要,因此将位置设置为0通常是一个常见的做法。 4. 最后,你可以使用lidar_align工具运行标定程序,该程序会计算出激光雷达和IMU之间的外参变换矩阵。你可以根据具体的使用需求将标定结果应用到你的SLAM算法中。 总结一下,你可以使用lidar_align标定工具来联合标定激光雷达和IMU的外参。首先,你需要下载并安装lidar_align工具。然后,根据实际情况调整参数配置文件。最后,运行标定程序获取激光雷达和IMU之间的外参变换矩阵。这样,你就可以将标定结果应用到你的SLAM算法中了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用lidar_align联合标定lidar与imu的外参](https://blog.csdn.net/weixin_53073284/article/details/123337885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [lidar_imu_calib:自动校准3D激光雷达和IMU外在性](https://download.csdn.net/download/weixin_42106765/16292160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可见一班

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值