相机与激光雷达标定:gazebo仿真livox_camera_lidar_calibration---标定数据采集与处理

简介: ROS功能包:**livox_camera_lidar_calibration**提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。

前言

ROS功能包:livox_camera_lidar_calibration提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。

在前一篇中链接:相机与激光雷达标定:gazebo仿真livox_camera_lidar_calibration---标定数据采集与处理

最终得到了两个标定数据的文件 :

  • corner_lidar.txt
  • corner_photo.txt

这个两个数据的每行对应着同一个角点.

在这里插入图片描述
有了这么多组的同名点像素和三维坐标位置,下面就可以通过优化的思想,去求解两个传感器的外参了.

本篇博客主要介绍外参的标定计算,与结果验证

外参计算

外参计算节点会读取之前得到的data/corner_photo.txt和data/corner_lidar.txt中的标定数据来计算外参,数据需要保存成特定的格式才能被外参计算节点正确读取。

程序读取数据的时候,设置是这样的:
每行数据只有超过10个字母程序才会将其读取为计算的参数,所以上面的数据中用来编号的1 2 3 4 和标题,test0 test1 是不会被读的.
程序读到空行就会停止读取参数开始计算,所以保存时不要空行。

计算前在getExt1.launch文件中配置好外参初值(程序中的默认初值是根据Livox激光雷达自身坐标系,雷达和相机的相对位置设置的,要根据情况进行修改。如果初值差的很大可能会导致不好的优化结果。)

<?xml version="1.0" encoding="UTF-8"?>
<launch>
  
    <rosparam param="init_value">  [0.0, -1.0, 0.0, 0.2,
                                    0.0, 0.0, -1.0, 0.0,
                                    1.0, 0.0, 0.0,  0.0] </rosparam>  <!-- init value of roatation matrix(3*3 on the left) and the translation(3*1 vector on the right) -->

    <param name="intrinsic_path"    value="$(find camera_lidar_calibration)/data/parameters/intrinsic.txt" />  <!-- intrinsic file -->
    <param name="extrinsic_path"    value="$(find camera_lidar_calibration)/data/parameters/extrinsic.txt" />  <!-- extrinsic file -->
    <param name="input_lidar_path"  value="$(find camera_lidar_calibration)/data/corner_lidar.txt" />  <!-- get the lidar corner data -->
    <param name="input_photo_path"  value="$(find camera_lidar_calibration)/data/corner_photo.txt" />  <!-- get the photo corner data -->
    <param name="error_threshold"    type="int" value="12" />  <!-- the threshold of the reprojection error -->

    <node pkg="camera_lidar_calibration" name="getExt1" type="getExt1" output="screen"></node>

</launch>

输入指令开始计算外参

roslaunch camera_lidar_calibration getExt1.launch

终端会打印出ceres的迭代过程
在这里插入图片描述
可以从终端看到
初始的cost 是 3.496e4,优化后为5.749e1

同时优化相机内参和外参

getExt1节点只优化外参,而getExt2节点在计算的时候会将一开始计算的内参作为初值和外参一起优化。输入指令程序会得到一个新的内参和外参,并用新的参数来进行重投影验证。

roslaunch camera_lidar_calibration getExt2.launch

一般使用getExt1节点即可,如果在外参初值验证过,并且异常值已经剔除后,优化还是有较大的残差,那么可以使用getExt2试一试。使用的前提需要保证标定数据量较大,并且要充分验证结果。

如果经过验证getExt2计算的结果确实更好,那么把新的内参更新在data/parameters/intrinsic.txt中。

结果验证

获得外参后我们可以用两个常见的应用看一下融合的效果。第一个是将点云投影到照片上,第二个是点云的着色

在相机和livox雷达前方放一个大的物体,看下最后的效果
我是在前面放了一个房子,照片如下图:
在这里插入图片描述
点云如下图:
在这里插入图片描述

投影点云到照片

优化前的图片:
在这里插入图片描述
优化后的图片:
在这里插入图片描述
右上角可以看出优化效果

点云着色

下面是点云着色优化前后的对比

优化前的点云:
在这里插入图片描述

优化后的点云:
在这里插入图片描述
看房顶的左边,效果是很明显的.

相关文章
小红书无限私信群发工具,小红书私信脚本插件,导入ID关注收藏评论留言
这是一款针对小红书平台开发的私信群发软件,可突破官方私信数量限制。通过这款插件,用户能够自由发送超过官方限制数量的私信
|
机器学习/深度学习 索引 Python
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
本文解释了NumPy中`argmax`函数的`axis`参数在不同维度数组中的应用,并通过代码示例展示了如何使用`axis=0`、`axis=1`和`axis=-1`来找到数组中最大值的索引。
1424 0
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
|
10月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
246 12
|
12月前
|
人工智能 供应链 大数据
数字化技术核心环节及其在供应链的应用
数字化技术核心环节包括云计算、大数据、区块链、人工智能和移动互联网。这些技术相互作用,共同构建了数字化技术生态系统,推动经济社会发展。其中,云计算提供算力支持,大数据提供信息资源,区块链构建信任机制,移动互联网连接一切。区块链在供应链领域的应用尤为突出,通过数据共享、可追溯性和智能合约等特性,解决了供应链中的信息孤岛、数据真实性和业务效率等问题,提升了供应链的整体协同和管理效率。
|
传感器 机器人 API
NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用
NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用
旋转矩阵与欧拉角的相互转换
旋转矩阵与欧拉角的相互转换
593 0
|
机器学习/深度学习 PyTorch 调度
PyTorch进阶:模型保存与加载,以及断点续训技巧
【4月更文挑战第17天】本文介绍了PyTorch中模型的保存与加载,以及断点续训技巧。使用`torch.save`和`torch.load`可保存和加载模型权重和状态字典。保存模型时,可选择仅保存轻量级的状态字典或整个模型对象。加载时,需确保模型结构与保存时一致。断点续训需保存训练状态,包括epoch、batch index、optimizer和scheduler状态。中断后,加载这些状态以恢复训练,节省时间和资源。
1421 0
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | 融合改进篇 | CCFM + Dyhead完美融合突破极限涨点 (全网独家首发)
YOLOv5改进 | 融合改进篇 | CCFM + Dyhead完美融合突破极限涨点 (全网独家首发)
834 0
|
网络协议 网络安全 开发者
掌握Python网络编程:从TCP到UDP
掌握Python网络编程:从TCP到UDP
217 0
相机和livox激光雷达外参标定:在gazebo中搭建仿真场景
前两篇介绍了相机和livox激光雷达外参标定:ROS功能包的livox_camera_lidar_calibration 和使用方法. 具体链接: - [链接1](https://www.guyuehome.com/38522) - [链接2](https://www.guyuehome.com/38524) 本篇在gazebo中搭建可以模拟产生livox_camera_lidar_calibration功能包需要的数据的仿真场景.
相机和livox激光雷达外参标定:在gazebo中搭建仿真场景