相机和激光雷达的外参标定 - 无标定板版本

embedded/2025/1/11 12:38:08/

1. 实现的效果

通过本软件实现求解相机和LiDAR的外参,即2个传感器之间的三维平移[x, y, z]和三维旋转[roll, pitch, yaw]。完成标定后,可将点云投影到图像,效果图如下:

本软件的优势:(1)无需特制的标定板(2)开箱即用,无需繁琐的开发环境配置(3)标定速度快,只需手工选择6个点对,即可完成标定。

2. 运行前准备

(1)相机内参

可使用opencv或者matlab进行标定;一般相机厂家也会提供,可联系厂家获取。

相机矩阵格式为:

\begin{bmatrix} fx& 0& cx\\ 0& fy& cy\\ 0& 0&1 \end{bmatrix}​ 

镜头畸变格式为:

​ [k1, k2, p1, p2, k3, k4, k5, k6]

k3k4k5k6​这几个参数如果没有,可以不提供。

在本程序中,存在camera_config.json的配置文件,相机内参在里面修改,如下图所示:

{"camera_matrix": [ //相机矩阵[1189.8516705838,0.0,958.9487412898],[0.0,1189.8896522849,538.5150082596],[0,0,1]],"distortion_coefficients": [ //镜头畸变4.2219264042,1.0156623421,9.72633e-05,9.40934e-05,-0.0139758468,4.6602774064,2.6717043123,0.0850373937],"tvec":[0,0,0], //初始[x, y, z]平移,单位:米,默认全为0"rvec":[0,0,0] //初始[roll, pitch, yaw]旋转,单位:度,默认全为0
}

(2)数据准备

采集多组图像和点云,图像保存为png格式;点云保存为pcd格式注意每组图片和点云的文件名必须完全一致,如下图蓝框和红框所示。另外,camera_config.json文件必须和这些数据在同一个文件夹下,否则程序会出错。

pcd采用ASCII码格式存储,如下图所示,每个点包含[x y z intensity ring timestamp]6个元素,其中,[x y z]是必须有的,其他元素如果没有,用0填充。另外文件头的WIDTH和POINTS均设置为该pcd文件包含的总点数。

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity ring timestamp
SIZE 4 4 4 4 2 8
TYPE F F F F U F
COUNT 1 1 1 1 1 1
WIDTH 144000
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 144000
DATA ascii

(3)数据采集注意事项

标记物要选取角点明显的物体,比如下图中的黄色纸箱子。纸箱子排放尽量做到左右远近,均匀分布。可以一次性排放多个箱子。

标记物除了纸箱子,也可以在淘宝上买指引牌,如下图所示,建议买大一些的。

3. 软件操作

3.1 点击“设置数据路径”按钮,选择数据文件夹

3.2 正常加载点云和图片

 3.3 各区域操作

区域

操作

功能

图像区域

鼠标滚轮

放大/缩小图片

ctrl+鼠标左键

在图像上加点

ctrl+鼠标右键

删除上一个点

鼠标右键

弹出菜单,保存数据或删除上一个点

鼠标中键并移动鼠标

平移图像

点云区域

ctrl+鼠标左键

在点云上加点(必须选中点云,点击空白区域无效)

ctrl+鼠标右键

删除上一个点

鼠标滚轮

放大/缩小

按住鼠标左键并移动

旋转视角

按住鼠标中键并移动

平移视角

↑↓←→按键

旋转视角

- 键

选中点尺寸变小

+ 键

选中点尺寸变大

数据列表区

鼠标左键

切换图片

3.4 在图像中选点

注意点:必须选择明显的角点,如果角点不够,可以如下图所示放纸箱子,然后点击纸箱子的角点,如0和1号。另外也可以选择建筑物的角点,如2号。

3.5 在点云中选点

注意点:点云中的点序号是P0、P1这样的格式,P0对应图像中的0号点,其他依次类推。必须做到图像和点云中的点数量、位置、编号完全对应,否则标定会失败。在点云中可以旋转平移视角,帮助选择到正确位置的点。

3.6 执行标注

注意点:点云和图像中的点对必须大于等于6,才能进行标注;如果当前帧不够6对,切换到下一帧数据,继续选点,所有帧上选择的点对之和超过6即可。

点击“执行标定”,如果一切正常的话,会输出重投影误差,超过10可以认为标定不成功;但小于10也并不能保证标定成功。需要进一步将点云投影到图像上进行检查。

3.7 点云投影到图像

如下图所示,点击“在图像上显示点云”,即可看到可视化。

如果出现下图所示,点云和图像错乱的现象,这个是由于图像和点云的重叠FOV没有设置对,重复下图中1,2两个步骤进行调整。

这里的样例相机水平视角是100°,所以调整到100°左右,如下图所示位置,即可正确显示。

4. 软件下载链接

链接: https://pan.baidu.com/s/1BH_ic4uw4OGDFMVmo9Z4OQ?pwd=uqm7 提取码: uqm7 


http://www.ppmy.cn/embedded/153006.html

相关文章

spring task使用

Spring Task 简介 Spring Task 是 Spring 框架原生自带的任务调度框架,它犹如一把瑞士军刀,为开发者提供了丰富多样的功能,助力轻松创建和管理定时任务。相较于其他一些第三方任务调度框架,Spring Task 最大的优势在于其与 Sprin…

大语言模型训练的数据集从哪里来?

继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业,再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText,该数据集大概40GB,由OpenAI创建,主要内…

ffmpeg-avio实战:打开本地文件或者网络直播流dome

使用ffmpeg打开打开本地文件或者网络直播流的一个小dome。流程产靠ffmpeg4.x系列的解码流程-CSDN博客 #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavformat/avio.h> #include <libavutil/file.h> #include &l…

算能AI计算服务器SE5设备树的二次修改实操

目录 1.大纲 2.实操 2.下载对应文件包 3.解包启动文件 4.修改对应的设备树 5.重启后 教程链接&#xff1a;https://github.com/sophgo/sophon-tools/tree/main/source/pmemory_edit 1.大纲 2.实操 2.1 选择串口&#xff0c;波特率115200&#xff0c;重启设备&#xff0…

MDX语言的网络编程

MDX语言的网络编程 引言 MDX&#xff08;Multidimensional Expressions&#xff09;是一种多维表达式语言&#xff0c;广泛应用于数据分析和数据挖掘环境中。虽然MDX的主要目的是进行多维数据的查询和分析&#xff0c;但它在网络编程中也有其独特的应用场景。本文将探讨MDX在…

Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩

Redis 作为高性能的内存数据库&#xff0c;广泛应用于缓存场景。然而&#xff0c;在实际使用中&#xff0c;可能会遇到三大经典问题&#xff1a;缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决&#xff0c;可能会导致系统性能下降甚至崩溃。 1. 缓存穿透 问题描述 …

利用Java爬取1688商品详情API接口:技术与应用指南

引言 1688作为中国领先的B2B电子商务平台&#xff0c;拥有海量的商品信息。对于商家和市场研究人员来说&#xff0c;能够从1688获取商品详情信息&#xff0c;对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序&#xff0c;以合法、高效的方式获取…

Mac Mini 最优雅的备份方式:使用极空间实现自动整机备份

Mac Mini 最优雅的备份方式&#xff1a;使用极空间实现自动整机备份 哈喽小伙伴们好&#xff0c;我是Stark-C~ 目前Mac mini M4到手已经一个多月&#xff0c;处理器性能大幅提升&#xff0c;内存也是破天荒的翻倍升级&#xff0c;再加上国补之后3500左右的价格&#xff0c;真…