当前位置:网站首页>ROS知识点——消息过滤器 ( message_filters)
ROS知识点——消息过滤器 ( message_filters)
2022-07-02 14:49:00 【Jerry_Sea】
参考:
1)时间同步器
https://blog.csdn.net/u012700322/article/details/51784412
https://blog.csdn.net/fana8010/article/details/23880067(这篇文章是上一篇的原文)
2)基于策略的同步器
https://blog.csdn.net/muyiyushan/article/details/118418040(官网翻译,第7部分)
http://wiki.ros.org/message_filters#Policy-Based_Synchronizer_.5BROS_1.1.2B-.5D(官网,第7部分)
以下是针对参考1)中的第一篇内容:
bug1:3.1 连接
两句等价成一句,但为什么要分开成两句呢?因为只使用一句只能读取一个输入传给回调函数,所以需要使用两句,先用一句分开将多个数据封装好,然后再用一句将多个数据传给回调函数。
boost bind
bug2:4 时间一致器
The TimeSynchronizer filter synchronizes incoming channels by the timestamps contained in their headers
PointCloud2ROS点云数据消息结构:header里面有个stamp,比较不同数据源的stamp来进行时间同步。
以下是针对参考2)中的解释:
bug3:对“自己”代码的理解
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::PointCloud2, sensor_msgs::PointCloud2> SyncPolicyT;
//定义策略,message_filters::sync_policies::ApproximateTime策略使用一个基于时间戳的自适应算法匹配消息,匹配两个点云
void DualLidarCalib::start()
{
// 订阅器 sub and pub
parent_cloud_sub_ = new message_filters::Subscriber<sensor_msgs::PointCloud2>(nh_, parent_cloud_topic_, 10);
child_cloud_sub_ = new message_filters::Subscriber<sensor_msgs::PointCloud2>(nh_, child_cloud_topic_, 10);
//点云同步器 ApproximateTime takes a queue size as its constructor argument, hence MySyncPolicy(100)
cloud_synchronizer_ = new message_filters::Synchronizer<SyncPolicyT>(SyncPolicyT(100), *parent_cloud_sub_, *child_cloud_sub_);
//调用回调函数
cloud_synchronizer_->registerCallback(boost::bind(&DualLidarCalib::cloudCallback, this, _1, _2));
//registerCallback()输入为const boost::shared_ptr<M const>&
}
void DualLidarCalib::cloudCallback(const sensor_msgs::PointCloud2::ConstPtr& in_parent_cloud_msg,
const sensor_msgs::PointCloud2::ConstPtr& in_child_cloud_msg)
{
...
}
boost::bind()理解:
1)https://blog.csdn.net/holyjw/article/details/89883363(只用看“1. 通过functions和function pointers使用bind”)
2)https://blog.csdn.net/bj318318/article/details/116200356(只用看“1介绍”)
边栏推荐
- 【Leetcode】14. 最长公共前缀
- Weili holdings listed on the Hong Kong Stock Exchange: with a market value of HK $500million, it contributed an IPO to Hubei
- Usage of sprintf() function in C language
- Configure ARP table entry restrictions and port security based on the interface (restrict users' private access to fool switches or illegal host access)
- Nexus简介及小白使用IDEA打包上传到Nexus3私服详细教程
- Exploration of mobile application performance tools
- 【Leetcode】13. Roman numeral to integer
- 社交元宇宙平台Soul冲刺港股:年营收12.8亿 腾讯是股东
- ETH数据集下载及相关问题
- 七张图,学会做有价值的经营分析
猜你喜欢

Win10系统使用pip安装juypter notebook过程记录(安装在系统盘以外的盘)

Connect Porsche and 3PL EDI cases

畅玩集团冲刺港股:年营收2.89亿 刘辉有53.46%投票权

【Leetcode】14. Longest Common Prefix

The poor family once again gave birth to a noble son: Jiangxi poor county got the provincial number one, what did you do right?

伟立控股港交所上市:市值5亿港元 为湖北贡献一个IPO

Sword finger offer 26 Substructure of tree

In MySQL and Oracle, the boundary and range of between and precautions when querying the date

TCP拥塞控制详解 | 2. 背景

Notice on holding a salon for young editors of scientific and Technological Journals -- the abilities and promotion strategies that young editors should have in the new era
随机推荐
【Leetcode】14. Longest Common Prefix
Method of C language self defining function
几行代码搞定RPC服务注册和发现
Linux Installation PostgreSQL + Patroni cluster problem
Dgraph: large scale dynamic graph dataset
One year is worth ten years
TCP拥塞控制详解 | 2. 背景
Flutter: 动作反馈
class和getClass()的区别
Role and function of uboot
What if the default browser cannot be set?
【Leetcode】13. 罗马数字转整数
Leetcode question brushing record | 933_ Recent requests
二、mock平台的扩展
Domestic relatively good OJ platform [easy to understand]
Learning Weekly - total issue 60 - 25th week of 2022
Ap和F107数据来源及处理
JS delete substring in string
The impact of telecommuting on all aspects of our experience | community essay solicitation
如何与博格华纳BorgWarner通过EDI传输业务数据?