文章目录
1.lidar_align功能包
一种寻找三维激光雷达与六自由度姿态传感器外部标定的简单方法,项目原链接下载。
注意:准确的结果需要高度非平面运动,这使得该技术不适用于校准安装在汽车上的传感器。
该方法利用了来自lidars的点云在校准正确时看起来更“清晰”的特性。它是这样做的:
1)设置激光雷达与位姿传感器之间的转换。
2)将pose与上述变换相结合,将所有激光雷达点融合成一个点云。
3)求出每一点与其最近邻点云之间的距离之和。
这个过程在一个优化过程中重复,这个优化过程试图找到最小化这个距离的转换。
1.1安装
1.安装 ROS Indigo, ROS Kinetic or ROS Melodic.
2.安装非线性优化依赖
sudo apt-get install libnlopt-dev
1.2输入里程记信息
imu或者gnss(也就是里程记)输入的是类似geometry_msgs::TransformStamped的消息类型,也就是我们关注的是积分后的平移量和旋转量。
最终的标定质量与转换源的质量和观测到的运动范围密切相关。为了确保准确的校准,数据集应该包含大量的旋转和平移。近似规划器的运动(例如,一辆汽车沿着街道行驶)不会在垂直于平面的方向上提供关于系统的任何信息,这将导致优化器在这个方向上给出不正确的估计。
1.3外参估计程序(Estimation proceedure)
对于大多数系统,可以在不调优参数的情况下运行节点。默认情况下执行两种优化,粗略的角度只进行全局优化,然后进行局部6自由度优化。
- 1.节点将从给定的ROS包中加载所有类型为“sensor_msgs/PointCloud2”的消息,用作激光雷达扫描处理。
- 2.姿态可以在与“geometry_msgs/TransformStamped”消息相同的包文件中给出,或者改成相应的话题处理也行,也可以在单独的CSV文件中给出,格式为Maplab
1.4 可视化结果
节点将在运行时输出其当前估计的转换。要查看此启动文件,必须在“”部分中设置“output=“screen”。有关示例,请参见给定的launch文件。
一旦优化完成,转换参数将被打印到控制台。示例输出如下:
Active Transformation Vector (x,y,z,rx,ry,rz) from the Pose Sensor Frame to the Lidar Frame:
[-0.0608575, -0.0758112, 0.27089, 0.00371254, 0.00872398, 1.60227]
Active Transformation Matrix from the Pose Sensor Frame to the Lidar Frame:
-0.0314953 -0.999473 0.0078319 -0.0608575
0.999499 -0.0314702 0.00330021 -0.0758112
-0.003052 0.00793192 0.999964 0.27089
0 0 0 1
Active Translation Vector (x,y,z) from the Pose Sensor Frame to the Lidar Frame:
[-0.0608575, -0.0758112, 0.27089]
Active Hamiltonen Quaternion (w,x,y,z) the Pose Sensor Frame to the Lidar Frame:
[0.69588, 0.00166397, 0.00391012, 0.718145]
Time offset that must be added to lidar timestamps in seconds:
0.00594481
ROS Static TF Publisher: <node pkg="tf" type="static_transform_publisher" name="pose_lidar_broadcaster" args="-0.0608575 -0.0758112 0.27089 0.00166397 0.00391012 0.718145 0.69588 POSE_FRAME LIDAR_FRAME 100" />
如果设置了路径,结果也将保存到文本文件中。作为评估对齐质量的一种方法,如果设置了所需的路径,用于对齐的所有点都将被投影到单个点云中,并保存为一层。
2.标定原理
2.标定显示
2.1外参显示
利用本程序标定lidar和gnss的外参,只需要更改loader.cpp中的话题类型函数,标定成功后得到如下外参文件: