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

目录

  • 一、资源链接
  • 二、代码测试
    • 2.1安装依赖
    • 2.2代码下载和修改
      • 2.2.1 optimiser.h文件
      • 2.2.2 feature_extractor.h文件
    • 2.3编译代码
    • 2.4测试数据集
      • 2.4.1迭代计算
      • 2.4.2查看校准结果
  • 三、标定自己激光雷达和相机
    • 3.1修改代码
      • 3.1.1camera_info.yaml配置文件
      • 3.1.2params.yaml配置文件
      • 3.1.3cam_lidar_calibration.rviz配置文件
    • 3.2录制数据集
    • 3.3正式标定
      • 3.3.1开启程序
      • 3.3.2播放数据集bag
      • 3.3.3分割标定板点云
      • 3.3.4评估参数和重投影误差
  • 参考资料


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/20171.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux编辑神器vim的使用

目录 一、Vim的基本概念 二、Vim的基本操作 1、进入vim 2、正常模式切换至插入模式 3、插入模式切换至正常模式 4、正常模式切换至底行模式 5、退出Vim编辑器 三、Vim正常模式命令集 1、移动光标 2、删除文字 3、复制 4、替换 5、撤销 四、Vim底行模式命令集 1、列出行号 2、光…

Spring MVC:常用参数(注解)的使用和参数绑定的验证

Spring MVC&#xff1a;常用参数&#xff08;注解&#xff09;的使用和参数绑定的验证 一、学习资源二、基础源码三、实验结果3.1 Spring MVC常用参数Controller和RequestMappingRequestMappingRequestParamPathVariableCookie ValueRequestHeader 3.2 Spring MVC参数绑定3.2.1…

JavaScript实现贪吃蛇小游戏(网页单机版)

文章目录 项目地址项目介绍游戏开始游戏暂停游戏模式游戏死亡重新开始 结尾 今天使用 JavaScript 实现了一个网页版的贪吃蛇小游戏。 项目地址 Github: https://github.com/herenpeng/snakeGitee: https://gitee.com/herenpeng/snake线上体验&#xff1a;https://herenpeng.g…

在线未注册域名批量查询-域名注册批量查询

域名批量注册查询 域名批量注册查询是一种工具&#xff0c;可以帮助用户批量查询并注册多个域名。这种工具通常被域名管理者、品牌专家、互联网营销人员等使用。 以下是域名批量注册查询工具的优点&#xff1a; 提高效率&#xff1a;与手动单独注册域名相比&#xff0c;域名批…

计算机网络实验(ensp)-实验1:初识eNSP仿真软件

目录 实验报告&#xff1a; 实验操作 1.建立网络拓扑图并开启设备 2.配置路由器 1.输入命名&#xff1a;sys 从用户视图切换到系统视图 2.输入命名&#xff1a;sysname 姓名 修改路由器名字 3.输入命名&#xff1a;interface g0/0/0 进入端口视图g0…

如何学习web前端开发?这样学前端事半功倍,能救一个是一个!

非常理解想要自学前端的伙伴&#xff0c;因为好程序员的学员一开始也是自学插画的&#xff0c;很多同学&#xff0c;自学到最后真的非常枯燥乏味&#xff0c;且走了很多弯路。小源想着能帮一把是一把的原则&#xff0c;这两天整理了一份前端的高效学习路线&#xff0c;想学web前…

Redis 学习笔记

一、简介 1、纯内存操作&#xff08;理解成容量就是内容条&#xff09; 2、作为缓存使用&#xff08;因为内存条操作&#xff0c;比磁盘速度快&#xff09; 二、 常见命令 类型命令string set、get、mset、mget、setrange、getrange、 incr、decr、incrby、decrby、incrbyfl…

基于Python3的tkinter Text文本框加滚动条显示信息

用tkinter进行界面程序开发中&#xff0c;经常需要将信息展示到界面上&#xff0c;给用户及时的反馈和想要看到的结果。Text控件允许用户以不同的样式、属性来显示和编辑文本&#xff0c;它可以包含纯文本或者格式化文本&#xff0c;同时支持嵌入图片、显示超链接以及带有 CSS …

【纳什博弈、ADMM】基于纳什博弈和交替方向乘子法的多微网主体能源共享研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Spring 注解之@RestController与@Controller的区别

目录 1&#xff1a;介绍 2&#xff1a;区别 3&#xff1a;总体来说 4&#xff1a;社区地址 1&#xff1a;介绍 RestController 和 Controller 是 Spring MVC 中常用的两个注解&#xff0c;它们都可以用于定义一个控制器类。 2&#xff1a;区别 返回值类型不同&#xff1a;…

使用插件快速生成代码

使用插件快速生成代码 咋们常说&#xff0c;授人以鱼不如授人以渔&#xff0c;在这里给大家提供一些技巧性的东西&#xff0c;方便一些新手同学可以快速上手&#xff0c;同时&#xff0c;也提高我们的开发兴趣与开发热情&#xff01; 主要讲什么呢&#xff0c;我们来学一学如何…

让AI来告诉你什么叫幽灵堵车

使用环境参考 CocosCreator v3.7.2 ChatGPT 正文 什么是幽灵堵车 堵车&#xff0c;大家都不陌生&#xff01; 堵车时我就思维发散&#xff0c;用 CocosCreator 模拟下堵车应该挺好玩&#xff0c;网上总说高速上最前面如果有个龟速的车&#xff0c;后面能堵车堵个两三公里。…

文本三剑客之sed

sed 一.概念 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要么存储一个命令文本文件中。二.工作流程 读取: sed从输入…

【论文阅读】MINOTAUR: Multi-task Video Grounding From Multimodal Queries

背景动机 细粒度的视频理解已经成为增强现实(AR)和机器人应用开发的关键能力。为了达到这种级别的视频理解&#xff0c;智能体(例如虚拟助手)必须具备识别和推理视频中捕获的事件和对象的能力&#xff0c;处理一系列视觉任务&#xff0c;如活动检测、对象检索和(空间)时间基础…

ChatGPT教程(终极版)

纯小白关于ChatGPT入门&#xff0c;你看我这篇文章就够了。 如果你已经用上了ChatGPT&#xff0c;更要恭喜你挖到宝藏&#xff0c;后面的高级技巧一定能让你有收获。 文章包含以下内容&#xff1a; 一、ChatGPT是啥&#xff1f;有什么用&#xff1b; 二、ChatGPT如何注册&…

jetson nx 用windows远程连接

VNC Viewer远程连接 一、jetson nx配置vnc 1、安装客户端 sudo apt-get install xrdp vnc4server xbase-clients2、进入nano/nx桌面&#xff0c;打开“Setting–>Desktop sharing”&#xff0c;没反应&#xff0c;据说是bug&#xff0c;我试过nano和nx都一样。首先输入下…

【c语言】组件化打包—静态库

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

IoT -- 解读物联网四层架构

本文以物联网四层架构为基础&#xff0c;从物联网产品设计的角度来解读每层架构的功能以及主要内容&#xff0c;旨在为物联网产品设计以及实现思路感兴趣的物联网产品或研发人员有些帮助。 通过互联网&#xff0c;人和人之间可以传递和交流信息。物联网&#xff0c;IoT&#x…

网络安全:Hydra 端口爆破工具.(九头蛇)

网络安全&#xff1a;Hydra 端口爆破工具.&#xff08;九头蛇&#xff09; Hydra 也叫九头蛇&#xff0c;是一款开源的暴力PJ工具&#xff0c;集成在kali当中。可以对多种服务的账号和密码进行爆破&#xff0c;包括 Web 登录、数据库、SSH、FTP 等服务. 目录&#xff1a; 网络…

调用api实现ChatGPT接口余额查询

在ChatGPT官网可以查询接口使用额度&#xff0c;但是官方并没有提供相应的API给开发者调用。我们可以通过破解的方式找到它的API。方法如下&#xff1a; 1. 使用Chrome浏览器打开https://platform.openai.com/account/usage 2. 打开开发者工具&#xff0c;然后刷新网页&#xf…