激光雷达和IMU联合标定包 lidar_IMU_calib 基于镭神-C16的扩展

      这段时间由于小导师让本人在无人车上跑通liv-sam算法,在外参标定过程挣扎了两周,终于搞定了,由于导师提供的雷达是镭神C16的,在市面上很少见镭神的雷达,在网上大部分博主都是使用的VLP-16类型的激光雷达,所以面临的的一个问题是现在开源的标定算法,就只有align-calib,哈工大的lidar-imu-calib,浙江大学的lidar-imu-calib但是在实现过程过,align-calib原本是只能标定里程计和lidar的虽然能进行代码改进标定激光雷达和imu外参但是精准度很差,哈工大的lidar-imu-calib只能标定旋转矩阵,他会输出一个Roll,Pitch,yaw角和一个旋转矩阵,但是没有平移向量的参数。最终选择了浙大的lidar-imu-calib进行标定。

一、问题描述

        此算法只支持VLP-16雷达但根据作者叙述应该很容易扩展,在经过查询后在github中有很多种雷达的改进,例如有速腾的,outser,360等都能找到,我把链接放到后面。但是基于镭神类型的标定却很少有,历经两周的挣扎终于可以进行标定了。在此过程中遇到的最大的问题就是点云格式的转换,在浙大的lidar-imu-calib中要求VLP-16激光雷达的点云格式必须是有序的话题为velodyne_packet,我查询了这种点云格式为XYZIT,而一般的点云格式如原始点云如pointcloud2,是XYZI格式,而镭神类型的激光雷达格式为XYZI或者是XYZIRT的点云类型,就需要把镭神-C16的点云格式转换为VLP-16的XYZIT类型的点云格式。

 https://github.com/APRIL-ZJU/lidar_IMU_calib.git   原始标定算法

https://github.com/wujiyan004/Lidar_IMU_Calibration.git  含有各种雷达种类的标定算法,可以适配FAST-lio算法。

镭神雷达驱动:https://github.com/wujiyan004/lslidar_ros.git

二、解决方法

      2.1修改镭神驱动

       将镭神驱动的相关代码修改,这里主要是修改驱动中的launch文件中的,point_cloud_type驱动中这个默认值是flase,原始代码中这个值如果是Flase则代表镭神驱动收集到的点云格式为XYZIRT类型的格式点云,如果是True点云类型就是XYZI类型的点云。如果是这里如果不确定可以通过以下命令来确认自己采集到的bag包是什么类型的点云

rosbag play 包名 /话题名    //播放bag包
rostopic echo 话题名/fields  //打印输出的参数类型

     2.2 录包

         打开对应雷达和imu的驱动,对雷达和imu的数据进行录制,这里注意录制的时候一定注意点云类型一定要是XYZI类型的点云,可以在录包之后检查一下包的数据格式。还要注意一个问题在录包的过程中一定要把所有约束都给约束到,不能只在平面运动,Roll,Pitch,yaw三个欧拉角一定要约束到,还有XYZ三个方向的移动,一定要有Z轴的运动。笔者最开始录包就在平面进行录制的结果发现标定结果根本不能用。具体录制方法可以参考

https://www.youtube.com/watch?v=2IX5LVTDkLc 

  2.3代码修改

       到这里就开始进行代码修改了这里主要参考这个小哥的文章激光雷达和IMU联合标定包 lidar_IMU_calib 基于RS-32的扩展_robosense 雷达使用浙大lidar-imu-calib联合标定工具代码修改-CSDN博客

在这位前辈的基础上主要针对了RS-32的扩展主要是修改了代码中/include/utils下dataset_reader.h文件和vlp_common.h文件在这些文件中最主要是是修改vlp_common.h这个文件,这位前辈是用的第二个unpack_scan函数,作者进行了函数重载,有两个unpack_scan函数第一个是将velodyne_msgs::VelodyneScan类型点云转化为TPointCloud(就是xyzit)类型点云,第二个unpack_scan函数就比较简单了,它是将PointCloud2格式点云转换为XYZIT格式点云,这一部分当初有点困扰我的是:使用pcl::fromROSMsg()函数将PointCloud2格式点云转换为XYZI格式点云后,点云变为无序的了,这位前辈进行了改进改的很好能直接用,在这里注意的是这个前辈是用了一个结构体进行函数的重载,所以一定要在雷达的驱动中去找参数,这个找参数的过程中是相当痛苦的,他有很多参数,有的在雷达驱动中有,有的在雷达驱动中没有只能查阅用户手册,但是后来发现有些参数不改也是可以实现标定的。具体的参数笔者把搜索到的放在下图中。

  

 

### 回答1: 这个问题翻译成中文是:b'lidar_imu_calib标定过程'。 回答:lidar_imu_calib是指激光雷达惯性测量单元(IMU)之间的标定过程,通过该过程可以解决激光雷达IMU在安装中的相对姿态时间同步问题。该过程需要收集一些基准数据,例如IMU的加速度计陀螺仪数据,以及激光雷达的点云数据。然后将这些数据引入标定算法中,得到激光雷达IMU之间的相对位姿时间偏差,最后将它们纠正并同步,从而使系统达到更高的精度。 ### 回答2: Lidar_imu_calib是一种激光雷达惯性测量单元的联合标定方法。它旨在从激光雷达的数据惯性传感器的数据中获取相机、激光雷达车辆的位姿(即位置姿态)信息。 lidar_imu_calib标定过程可以分为以下几步: 1.采集数据:首先需要采集车辆在各种不同的姿态运动条件下的数据,括车速变化、车辆俯仰横滚角变化等。同时,需要记录激光雷达惯性传感器的输出数据。 2.匹配点云IMU数据:利用系统时间戳进行点云数据IMU数据的对齐,通过坐标系变换将两者的数据进行匹配。 3.计算位姿:根据匹配后的数据,计算车辆的位姿,括车辆位置姿态(即旋转角度),这是通过解决非线性优化问题来完成的。 4.评估误差:标定结果需要进行评估,通过比较计算出的车辆真实姿态标定结果之间的差异来确定标定的准确性。 5.优化标定结果:根据评估结果进行标定结果的优化,即根据误差来调整标定结果,以提高标定准确性。 总之,lidar_imu_calib标定激光雷达与惯性测量单元联合标定的方法,通过匹配点云IMU数据,计算位姿,评估误差优化标定结果等步骤,得到车辆的位姿信息,从而提高自动驾驶车辆的安全性性能。 ### 回答3: Lidar_imu_calib是一种遥感设备,由激光雷达惯性测量单元(IMU)组成,它的目的是3D空间中的可视化地图构建。Lidar可以测量环境中物体的位置形状,而IMU可以测量设备的位置运动状态。因此,Lidar_imu_calib的精度准确性对于它的应用非常重要。为此,在使用Lidar_imu_calib之前,必须进行标定Lidar_imu_calib标定过程试图确定几何姿态转换矩阵,这个矩阵用于将LidarIMU测量结果在同一个坐标系下进行配置。其中,几何变换矩阵被用来纠正从LidarIMU获得的点云数据中发生的误差,姿态变换矩阵则用于纠正导致视角变化的角度问题。 标定过程的首要步骤是采集数据,LidarIMU的原始数据以及因为设备不同而引起的差异。通过在一定时间内在多个场景下对数据进行采集,可以获得更加丰富的数据,并确保标定能够在多种条件下表示准确。 数据采集之后,接下来需要进行数据处理。主要是通过使用非线性最小二乘法以最小化两个矩阵的几何姿态误差。 这个过程需要大量的计算能力优秀的算法以最大化标定的准确度。最终的标定参数是由几何姿态矩阵的组合产生的,并被应用到Lidar_imu_calib设备以及期望的应用程序中。 总之,Lidar_imu_calib标定是一项复杂的过程,它需要充分的数据采集、数据处理优秀的算法来确保标定结果的准确性精度。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值