怎么给octomap_server增加半径滤波器
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇内容介绍了"怎么给octomap_server增加半径滤波器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2025年01月24日怎么给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安全错误
数据库的锁怎样保障安全
如何构建解磷功能基因数据库
软件开发调试工资
工业网络技术专业开设院校
服务器未系安全带
使用jsp链接数据库安全吗
mc服务器什么用处
中国知网数据库类型选择
高级网络安全系统测评师 工信部
plc的数据库名称
海光服务器系统安装
阳泉大屏互动触摸软件开发公司
巧克力解说跑酷服务器
网络安全基本常识简短
吞食天地服务器
江阴市公安局网络安全保卫大队
网络安全竞赛体系
云南有做软件开发的公司吗
数据库检查哪些项目
测绘软件开发招聘
服务器linux启动
查看ibm服务器型号
聚美优品 服务器
服务器安全平台
上海纵游网络技术有限公司方静
少儿软件开发培训
网络安全教育方案幼儿园
服务器管理员是干嘛得
服务器已经被禁用怎么办
网络安全周校园日主题班会
官网服务器503错误是什么情况