双激光联合标定

双激光联合标定

参考资料

@深蓝学院 多激光雷达外参⾃动化标定算法及代码实例 原文代码

使用场景

两个激光雷达, 有一个已经知道精确坐标, 或只是想获取两个雷达之间的相对关系

修改

首先改的就是支持2d与3d雷达的联合匹配, 这里采用的是一个点云滤波, 将3d点云在z轴某个特定范围内的点云进行收集并投影

// 创建一个滤波器, 将3d点云中特定范围内的数据进行收集, child_filtered_cloud存放的就是在in_paraent_cloud这个点云中, z轴数据在 min_z_value_到max_z_value_之间的点云
pcl::PassThrough<PointT> pass;
pass.setInputCloud(in_parent_cloud);
pass.setFilterFieldName("z");
pass.setFilterLimits(min_z_value_, max_z_value_);
pass.filter(*child_filtered_cloud);

// 将这个点云投影到平面上
for (const auto& point : child_filtered_cloud->points) {
    processed_cloud->points.push_back(PointT(point.x, point.y, 0));
}

其次在里面添加了另外两种点云匹配的算法, ICP和GICP

具体实现可以去代码仓库拉取, 使用说明可以看README.md

源码地址 https://github.com/SmileJayjhx/multi_lidar_calibrator

双激光联合标定_第1张图片
运行成功后就有这样的界面, 包是随便录的, 效果不是很好, 后面会把测试用的bag放进代码中去

在控制台会输出不同算法输出的变换关系
双激光联合标定_第2张图片
暂时没解决的问题就是无法根据特定坐标系进行z轴点云的过滤, 添加上去以后莫名其妙就会导致点云丢失, 从而ICP和GICP无法收敛, 如果有大佬遇到过这种问题, 也希望给点建议, 谢谢!

你可能感兴趣的:(机器人,标定,激光雷达)