怎么给octomap_server增加半径滤波器
发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,本篇内容介绍了"怎么给octomap_server增加半径滤波器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2024年10月06日怎么给octomap_server增加半径滤波器
本篇内容介绍了"怎么给octomap_server增加半径滤波器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、半径滤波器基本原理
放一张汇报用的 PPT 截图:
原理很简单就是判断一个点云周围(半径 R)有没有足够多(K)的邻居点,如果没有就删除这个点,否则就保留。
二、基本用法
我一般学习技术喜欢到官网看最原始的教程:Removing outliers using a Conditional or RadiusOutlier removal,这个教程介绍了半径滤波器(我不清楚中文名到底叫什么滤波器)的基本用法:
#include
#include
// 输入待滤波的原始点云指针
pcl::PointCloud::Ptr cloud (new pcl::PointCloud);
// 保存滤波后的点云指针
pcl::PointCloud::Ptr cloud_filtered (new pcl::PointCloud);
// 创建滤波器对象
pcl::RadiusOutlierRemoval outrem;
// 设置要滤波的点云
outrem.setInputCloud(cloud);
// 设置滤波半径
outrem.setRadiusSearch(0.8);
// 设置滤波最少近邻数
outrem.setMinNeighborsInRadius (2);
// 执行半径滤波
outrem.filter (*cloud_filtered);
如果第一次使用 PCL 的滤波器,可以把这个教程自己运行一遍,我之前运行过了,这次就不贴代码了,下面分享下我在实际项目中如果使用这个半径滤波器对我的 octomap_server 构建的八叉树地图进行滤波。
三、给我的地图滤波
3.1 定义半径滤波器参数
半径滤波器有 2 个参数:滤波半径和半径内部邻居数,注意数据类型
// 滤波半径
double m_outrem_radius;
// 半径内的邻居数
int m_outrem_neighbors;
在构造函数初始化列表中初始化:
OctomapServer::OctomapServer(const ros::NodeHandle private_nh_, const ros::NodeHandle &nh_)
: ...,
m_outrem_radius(-std::numeric_limits::max()),
m_outrem_neighbors(-std::numeric_limits::max()),
...
从 launch 中读取启动参数:
// add outrem filter
m_nh_private.param("outrem_radius", m_outrem_radius, m_outrem_radius);
m_nh_private.param("outrem_neighbors", m_outrem_neighbors, m_outrem_neighbors);
3.2 执行半径滤波
在 InsertPointCloudCallBack 函数的 PassThough 前执行半径滤波,即对每一帧点云在构建八叉树地图前进行滤波,主要是为了去掉单独的离群点:
// 对一帧 pc 点云进行半径滤波
pcl::RadiusOutlierRemoval outrem;
// 这里需要传递指针,因为我的 pc 不是指针,所以这里做了 makeShared
outrem.setInputCloud(pc.makeShared());
// 设置滤波半径,这里设置为 1m
outrem.setRadiusSearch(m_outrem_radius);
// 设置滤波近邻数,这里设置为 10 个
outrem.setMinNeighborsInRadius (m_outrem_neighbors);
// 执行滤波
outrem.filter(pc);
3.3 在 launch 中配置半径滤波器参数
这样以后就可以从 launch 中直接配置滤波器的参数了,不用每次修改再重新编译,这样调试起来非常方便。
3.4 滤波结果
这是原始地图,15cm 分辨率,红框内部有很多单个的点:
这是滤波后的效果,滤波半径 1m,近邻点 10 个:
"怎么给octomap_server增加半径滤波器"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
半径
滤波器
参数
地图
指针
原始
教程
近邻
邻居
内容
函数
原理
实际
更多
知识
这是
学习
运行
配置
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
清远数字软件开发优化价格
简单小学网络安全小报
宁夏联想服务器维修维保多少钱
网络技术常用词
网络安全一个utm够吗
笔记本电脑远程不到服务器
表格列里找出相同的数据库
网络安全法 第四十七条
wind数据库怎么用
网络安全动画小视频
软件开发应届毕业笔试
网络安全工程师招募
数据库中关闭窗体的代码
找网络技术人员追钱
昆明分布式服务器介绍
mysql数据库能否存文件
泰安crm软件开发
河南戴尔服务器维修维保多少钱
升级数字家庭管理平台服务器
高管夫妻关系数据库
监控综合管理服务器
境外用什么服务器好
清远佑航网络技术
晋城软件开发培训
数据库查询后字段自动转大写
数据库如何替换字段名称
根据网络安全法规定大众
肉鸡钻服务器
说明网络技术给人们带来什么举例
仓储管理系统数据库分工