有斜率限制地进行点云数据直线提取

需求:

       通过2D激光雷达提取机器人到右侧墙面的距离

使用场景:

         一台沿墙工作的机器人需要通过到右侧墙面的距离做横向控制

方案描述:

        对雷达数据做角度滤波,只提取机器人右侧的点云数据做拟合

方案不足:

        在离右墙不同距离下的点云角度范围不一样,角度滤波适应性不强

方案思考:

       问: 什么是不变的?

        答:角度在一定误差范围内是“不变”的

方案改进一:

        限制角度地拟合直线;

方案改进一实现:

        实现工具:

                pcl::ransac;  pcl::ExtractIndices;

        方案流程:

                1、角度滤波

                2、ransac提取

ransac.setDistanceThreshold(0.01);
ransac.setMaxIterations(1000);
ransac.setNumberOfThreads(50);
ransac.computeModel();

std::vector<int> inliers;
ransac.getInliers(inliers);
ransac.getModelCoefficients(coef);

                3、计算coef[3]/coef[4],如果不是需要的角度范围则利用ExtractIndices将已经用于直线拟合的点去除

indices_.reset(new pcl::PointIndices());
indices_->indices = inliers;
extract_.setInputCloud(origin_cloud_);
extract_.setIndices(indices_);
extract_.setNegative(true);
extract_.filter(*origin_cloud_);

               4、剩下的点云数据进行递归再次进行拟合直到满足斜率或者点云不足以进行拟合,效果图如下(视角动了一下,别介意,上图黄色点云为提取的直线对应的是下图右上角的点云)

k= 1.0

k=-1.0

另外:蹲一个更好的解决方案

另外:蹲一个更好的解决方案

另外:蹲一个更好的解决方案

ps:经过点云滤波后数据不是很多了,博主没有对递归次数进行限制,只对拟合出直线的点云数量做了限制,有需要的小伙伴根据需求改进;

       

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
利用激光雷达(lidar)进行点云直线提取是一种常见的三维物体建模和环境感知技术。点云是由激光雷达扫描周围环境得到的离散点的集合,它可以提供可靠的细节信息,便于进行直线提取点云直线提取的目标是从点云中找到属于直线的点,让我们能够更好地理解和分析场景。这个过程通常包括以下几个步骤: 1. 数据预处理:首先,我们需要对原始点云数据进行预处理。这包括去除离群点、降采样以减少数据量和噪声,以及将点云投影到二维平面上简化处理。 2. 点云分割:接着,我们使用分割算法点云分成多个子集,每个子集代表一个可能的直线。常见的分割算法包括RANSAC和基于区域生长的方法。 3. 直线拟合:对于每个子集,我们使用最小二乘法或其他拟合算法拟合出最佳直线模型。这些模型由直线参数如斜率、截距等表示。 4. 直线过滤:由于点云数据中可能存在噪声或其他非直线特征,我们需要应用一些过滤技术来排除不符合我们设定的直线模型的点。 5. 直线提取和可视化:最后,我们根据拟合好的直线模型,将属于直线的点从原始点云提取出来,并进行可视化展示。 点云直线提取在多个领域有着广泛应用,例如机器人感知、无人驾驶、三维建模等。利用激光雷达进行直线提取能够提供精确和可靠的环境信息,为我们进一步的目标检测、路径规划等任务提供有价值的数据基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值