(附代码)视觉激光雷达信息融合与联合标定

news2024/9/21 2:33:12

目录

一、引言

福利:文末有chat-gpt纯分享,无魔法,无限制

二、联合标定转换关系

三、相机标定

四、联合标定

五、视觉与点云信息融合

5.1 image2points

5.2 points2image

六、总结


一、引言

最近在为车辆添加障碍物检测模块,障碍物检测可以使用激光雷达进行物体聚类,但是我们使用的是16线的velodyne,线数还是有些稀疏,对于较远的物体过于稀疏的线数聚类效果并不好,因此考虑使用视觉进行目标检测,然后投影到3D点云里面,获取障碍物位置,同时视觉还可以给出障碍物类别信息。

使用视觉进行目标检测,将检测结果2D bounding box坐标信息投影到点云里面获得3D bounding boxx坐标,这里面需要将摄像头和激光雷达进行联合标定,即获取二者坐标系的空间转换关系。

相关代码已经同步到我的github-smartcar

链接:https://github.com/sunmiaozju/smartcar

标定部分在detection/calibration文件夹, 信息融合部分在detection/camera_point_fusion

福利:文末有chat-gpt纯分享,无魔法,无限制

也有机器视觉全套学习资料分享哦

二、联合标定转换关系

联合标定的作用就是建立点云的point和图像pixel之间的对应关系,

需要获取相机与激光雷达外参,将点云3维坐标系下的点投影到相机3维坐标系下。

还需要通过相机标定获得相机内参,这个是把相机3维坐标系下的点投影到成像平面。具体如下所示:

图片

上图显示的就是联合标定得到的4×4转换矩阵的作用,将我们的3D点云转换到相机坐标系下面

图片

这幅图显示了相机坐标系和成像坐标系的关系,相机标定会得到相机内参矩阵和畸变系数,畸变系数可以消除相机凸透镜的畸变效应,相机内参的信息就可以想相机坐标下的3维点投影到2维的像素平面。相机标定的具体原理可以参考:https://zhuanlan.zhihu.com/p/24651968

三、相机标定

需要一个标定板,要硬质板或者泡沫的标定板,因为标定板的平面要保证是平的。标定板的文件可以到opencv官网下载。

首先做相机标定,相机标定模块在detection/calibration/camera_calibration

编译

 
cd your_rosworkspace_path/
catkin_make -DCATKIN_BLACKLIST_PACKAGES=ndt_mapping;static_map;ndt_localization

这里我们先不编译ndt_mapping;static_map;ndt_localization这三个软件包

如果出错,可以先编译消息文件,再编译全部文件:

 
catkin_make -DCATKIN_WHITELIST_PACKAGES=smartcar_msgs;yunle_msgs;smartcar_config_msgs
catkin_make -DCATKIN_WHITELIST_PACKAGES=“”

然后要修改detection/calibration/camera_calibration/nodes文件夹下面python文件的可执行权限:

 
sudo chmod a+x your_path/detection/calibration/camera_calibration/.

启动摄像头驱动节点

<param name="device_id" type="int" value="1" />
roslaunch cv_camera cv_camera_driver.launch

这里注意你自己的摄像头video_id,使用如下命令查看

 
ls /dev/video*

然后根据需要修改your_path/driver/cv_camera/launch/cv_camera_driver.launch里面的

 
<param name="device_id" type="int" value="1" />

新开一个终端,执行

 
rosrun calibration cameracalibrator.py --square 0.13 --size 8x6 image:=/cv_camera/image_raw

然后就可以进行标定了,弹出的界面如下所示:

图片

需要做的就是移动标定版,让右上角的四个条都变绿(我这里绿的是已经调好了,未调整是偏黄色)

x代表左右移动,y代表上下移动,size代表远近移动,skew代表倾斜侧角,可以上下倾,也可以左右倾。

只有四个尺度的信息都满足要求之后,右侧的calibration图标才会显示出来,这时候代表可以计算标定结果了,点击calibration,然后save,标定结果会保存在home文件夹下面。

四、联合标定

联合标定使用的是autoware的CalibrationTookit模块,代码在detection/calibration/calibration_camera_lidar文件夹下面

编译好代码之后,首先要启动摄像头和激光雷达的驱动节点

 

roslaunch cv_camera cv_camera_driver.launch

新终端

 

roslaunch velodyne_pointcloud VLP16_points.launch

然后驱动联合标定节点

 

roslaunch calibration_camera_lidar camera_lidar_calib.launch

启动之后可以看到UI界面,具体操作指南,可以参考文档:detection/calibration/calibration_camera_lidar/CalibrationToolkit_Manual.pdf 的2.3节

也可以参考链接:https://blog.csdn.net/AdamShan/article/details/81670732#commentBox

如何使用这个模块上面的链接已经说的很明白,这里简单说一下:

·首先左上角load之前标定的相机内参文件,导入相机内参

·调整点云的视角(操作方法参考上面链接),然后确保图像和点云都可以看到完整的白标定板,点击右上角的grab捕获单帧图片和点云

·在捕获单帧的点云上面,选取图片中对应标定板的位置,选取的是圆圈内的所有点,所包含的信息不仅仅只有点,还有平面法相量,标定的时候一定要确保法相量与平面是垂直的,因为开始我没有注意这个,结果后面验证的时候投影点在图片上显示不出,根本没有投影在图像范围内。

标定好之后,在右上角有一个project,可以查看标定的效果,一般来将,可以看到如下效果:

图片

左下角图片上的红线就是右下角点云红线投影到图片上的位置,下面这幅图片换一个角度,点同样投影上去,而且相对位置在点云和图片里面基本一致:

图片

这样的效果基本就是可以了,点击save,会将输出的外参文件保存在home文件夹下面。

五、视觉与点云信息融合

有了联合标定的外参文件,我们就可以进行信息融合了。

信息融合主要有两个模块:点云到图像 、 图像到点云

5.1 image2points

这部分代码在your_path/deteection/camera_point_fusion/packages/joint_pixel_pointcloud这个pkg下面

这部分代码实现的功能是建立将velodyne-16的点云投影到640×480的图像上面,如果点云投影的二维点在图像640×480范围内,那么就把这个三维激光雷达点的位置记下来,同时匹配图像上对应像素的颜色,变成pcl::XYZRGB点返回,并显示出来。

除此之外,这个模块还可以订阅目标检测信息,摄像头获取图像,经过目标检测模块之后,得到2维bounding box坐标,利用点云和图像像素的对应关系,得到3维bounding box信息,并在RVIZ中显示出来。

编译好代码之后,运行:

 

roslaunch joint_pixel_pointcloud joint_pixel_pointcloud.launch

同样,需要先运行摄像头驱动节点和velodyne驱动节点,还有目标检测节点,不过目标检测模块因为某些原因不能公开到github,你可以使用自己的目标检测模块,作为ROS节点添加到工作空间即可。

代码运行效果如下所示:

图片

这个就是图像像素所对应的点云,可以看到点云已经被加上了黑白的颜色,点云周边有一些比较淡的颜色,下面这幅图加深了颜色,同时显示出图像对应的点云在整个点云帧的位置:

图片

下面是目标检测的效果:

图片

图片

可以看到,图像上检测出来的物体,基本都在3D场景下对应出来了,其中,不同的颜色代表不同的物体类别。

不过,因为这个目标检测模型是针对于自动驾驶场景的,分类对象都是car,pedestrian,info signs等,而因为实验条件的原因我还没有来得及拿出去测试代码效果,就先在房间测试了一下,所以可以看到目标检测的框是有些没意义的东西,不过不影响验证信息融合效果。

这个节点可以便于我们进行障碍物检测,因为视觉信息进行障碍物检测是要优于低线数激光雷达聚类的,但是视觉信息识别物体虽然准,却没有距离信息,激光雷达可以提供距离信息,因此,视觉和激光雷达二者结合,就可以获得障碍物的距离、类别以及位置了

5.2 points2image

这个是把点云投影到图像上,具体运行基本同理我就不说了。

代码的具体效果如下所示:

图片

可以看到,点云基本是和图像是匹配的。

这个节点的作用是可以帮助我们进行红绿灯识别或者其他info_sign识别。因为进行红绿灯检测最好是可以获取红绿灯在图像上的位置,即ROI,然后再进行识别会容易很多。我们可以在事先建立好的场景语义地图中,加入红绿灯的位置,这样车辆到达该位置的时候就可以立刻找到红绿灯在图像上的ROI,这样会优化info sign的检测。具体如下所示:

图片

六、总结

本文主要介绍了关于视觉和激光雷达进行信息融合相关内容,包括相机标定,摄像头与激光雷达联合标定,信息融合节点等等

利用激光雷达和视觉信息融合,我们可以结合二者的优点优化障碍物检测或交通标志的识别,以及优化其他相关任务等等。

充电君会在第一时间给你带来最新、最全面的解读,别忘了三联一波哦。

                                               

 

 关注公众号:资源充电吧
回复:Chat GPT
充电君发你:免费畅享使用中文版哦
点击小卡片关注下,回复:IT

想要的资料全都有 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨&#xff0c;在1995年出版的《未来之路》一书中&#xff0c;提及“物物互联”。1998年麻省理工学院提出&#xff0c;当时被称作EPC系统的物联网构想。2005年11月&#xff0c;国际电信联盟发布《ITU互联网…

Nginx源码安装

文章目录 Nginx源码安装注安装pcre库安装openssl库创建用户及用户组安装编译环境解压文件检测环境重要目录检查配置服务启动脚本查看效果&#xff1a; Nginx源码安装 注 本实验基于RHEL73.10.0-327.el7.x86_64&#xff0c;尽量使用RHEL7或CentOS7。 安装pcre库 安装 pere 库…

(自控原理)线性系统的根轨迹法

目录 一、根轨迹法的基本概念 1、根轨迹概念 2、根轨迹方程 二、根轨迹绘制的基本法则 1、绘制根轨迹基本法则 三、系统性能的分析 1、闭环零点与时间响应 一、根轨迹法的基本概念 1、根轨迹概念 三大分析矫正方法&#xff1a;时域法、复域法(根轨迹法)、频域法 2、根…

【网络】数据链路层

目录 一、以太网 二、以太网帧格式 三、 MTU 1、MTU概念 2、 MTU对IP协议的影响 3、MTU对UDP协议的影响 4、 MTU对于TCP协议的影响 四、MAC地址 五、 ARP协议 1、ARP协议的作用 2、ARP协议的工作流程 3、ARP数据报的格式 4、中间人 数据链路层解决的&#xff0c;是…

mysql使用SUBSTRING_INDEX拆分字符串,获取省、市、县和详细现住址

mysql使用SUBSTRING_INDEX拆分字符串&#xff0c;获取省、市、县和详细现住址 一、如何把"江西-上饶市-广丰县-大南镇古村村张家82号"拆分为省、市、县和详细现住址二、mysql的解决办法 一、如何把"江西-上饶市-广丰县-大南镇古村村张家82号"拆分为省、市、…

基于 Redux + TypeScript 实现强类型检查和对 Json 的数据清理

基于 Redux TypeScript 实现强类型检查和对 Json 的数据清理 突然像是打通了任督二脉一样就用了 generics 搞定了之前一直用 any 实现的类型…… 关于 Redux 的部分&#xff0c;这里不多赘述&#xff0c;基本的实现都在这里&#xff1a;Redux Toolkit 调用 API 的四种方式 和…

路桥隧施工管理平台(BIM+实景+GIS)

引言 中科图新公路工程BIMGIS可视化项目管理平台是一种高效的项目管理工具&#xff0c;通过将BIM技术与3DGIS技术融合&#xff0c;实现了宏观地理信息与微观工程模型的集成显示。 该平台为项目管理提供了直观、准确的三维工程虚拟环境&#xff0c;对主要三维空间对象&#xff…

【Java】springboot框架 粮油质量溯源MES生产加工管理系统源码

粮油质量溯源MES生产加工管理系统源码&#xff0c;实现一物一码&#xff0c;全程追溯&#xff0c;正向追踪&#xff0c;逆向溯源。技术架构&#xff1a;spring bootmybatiseasyuimysql 。 粮油生产质量追溯系统实现种植主体、种植基地、生产计划、压榨、精炼、包装、销售、物料…

智能物流千人俱乐部---正式开启!

经过半年的筹备&#xff0c;【研习社智能物流千人俱乐部】今天起正式对外开放。 会员可以直接互相对接联系。 目前已经有100多家各行业代表&#xff08;用户、甲方&#xff09;加入了千人俱乐部。 行业精英主要来自供应链管理、食品、金融供应链、铁路、精密制造、商超电商、电…

实战:k8s里通过argoCD部署jenkins-2023.7.24(测试成功)

实战&#xff1a;k8s里通过argoCD部署jenkins-2023.7.24(测试成功) 目录 实验环境 操作系统&#xff1a; CentOS8 Linux &#xff08;我本次用centos7.6&#xff09; 内存资源&#xff1a;32GB &#xff08;自己nuc机器32G内存&#xff09; 实验软件版本&#xff1a; 工具名…

MySQL 与MongoDB区别

一、什么是MongoDB呢 ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一…

【高危】Apache NiFi 远程资源检索功能存在命令注入漏洞

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具。 Apache NiFi 1.23.0之前版本中包含使用 HTTP URL 进行远程资源检索的 Processors 和 Controller Services&#xff0c;但是未限制普通身份用户配置此功能。经过身份验证的攻击者可配置恶意的外部资源引用地址&…

现场直击!飞凌嵌入式亮相第13届配电技术应用论坛

2023年8月3日&#xff0c;第十三届配电技术应用论坛在杭州开幕&#xff0c;飞凌嵌入式携多款重量级产品及热门方案亮相本届论坛&#xff0c;展位号A49。 飞凌嵌入式作为专注嵌入式核心控制系统研发、设计和生产的高新技术企业&#xff0c;与来自全国各地的行业伙伴共同分享市场…

打破思维定势,头脑风暴必备的3个模板!

在日常工作和生活中&#xff0c;我们常常陷入思维定势&#xff0c;无法找到新的解决方案或创意。而头脑风暴的好处在于它能够打破这种思维定势&#xff0c;激活我们的创造力和想象力&#xff0c;找到新的思路和解决问题的方法。 借由多人参与的头脑风暴&#xff0c;我们可以集思…

[IDEA]使用idea比较两个jar包的差异

除了一些小工具外&#xff0c;idea自带了jar包比较的功能。 把需要比对的jar包放到任意目录下&#xff0c;然后选中两个需要比较的jar包&#xff0c;右键&#xff0c;选择Compare Archives&#xff0c;然后就可以比较了。 这次疏忽了&#xff0c;每次打包前需要commit界面看一下…

数制与码制

用0和1可以组成二进制数表示是数量的大小&#xff0c;也可以表示对立的两种逻辑状态。数字系统中常用二进制数来表示数值。 在微处理器、计算机和数据通信中&#xff0c;采用十六进制。任意一种格式的数可以在十六、二和十进制之间相互转换。 二进制数有加、减、乘、除四种运算…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL&#xff08;数据查询语句&#xff09;3 DML&#xff08;数据操纵语句&#xff09;4 DDL&#xff08;数据定义语句&#xff09;5 DCL&#xff08;数据控制语句&#xff09;6 TCL&#xff08;事务控制语句&#xff09; 1 SQL语句简介…

【数据结构】二叉树 链式结构的相关问题

本篇文章来详细介绍一下二叉树链式结构经常使用的相关函数&#xff0c;以及相关的的OJ题。 目录 1.前置说明 2.二叉树的遍历 2.1 前序、中序以及后序遍历 2.2 层次遍历 3.节点个数相关函数实现 3.1 二叉树节点个数 3.2 二叉树叶子节点个数 3.3 二叉树第k层节点个数 3…

Crack:CAD Exchanger SDK 3.20 Web Toolkit 应用

在CAD Exchanger SDK 版本 3.20.0中&#xff0c;我们在 Web Toolkit 中包含了绘图、BIM 和 MCAD 查看器的示例&#xff0c;以展示如何使用每个工具可视化数据。这些查看器具有显示不同类型数据的特定功能&#xff0c;允许用户根据自己的需求单独使用它们。我们将继续增强每个查…