当前位置:网站首页>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介绍”)
边栏推荐
- Blog theme "text" summer fresh Special Edition
- 几行代码搞定RPC服务注册和发现
- 871. Minimum refueling times
- 什么是敏捷开发流程
- Exploration of mobile application performance tools
- 深度之眼(三)——矩阵的行列式
- [shutter] dart data type (dynamic data type)
- OpenHarmony如何启动远程设备的FA
- 详细介绍scrollIntoView()方法属性
- Deep learning image data automatic annotation [easy to understand]
猜你喜欢

剑指 Offer 27. 二叉树的镜像

对接保时捷及3PL EDI案例

Jiuxian's IPO was terminated: Sequoia and Dongfang Fuhai were shareholders who had planned to raise 1billion yuan

你想要的宏基因组-微生物组知识全在这(2022.7)

【征文活动】亲爱的开发者,RT-Thread社区喊你投稿啦

Seven charts, learn to do valuable business analysis

Sword finger offer 21 Adjust the array order so that odd numbers precede even numbers

Chapter 3 of hands on deep learning - (1) linear regression is realized from scratch_ Learning thinking and exercise answers

The macrogenome microbiome knowledge you want is all here (2022.7)

Does digicert SSL certificate support Chinese domain name application?
随机推荐
一年顶十年
你想要的宏基因组-微生物组知识全在这(2022.7)
2022 interview questions
2、 Expansion of mock platform
剑指 Offer 26. 树的子结构
Nexus Introduction and Xiaobai use idea Packaging and Upload to Nexus 3 private service detailed tutoriel
Chapter 3 of hands on deep learning - (1) linear regression is realized from scratch_ Learning thinking and exercise answers
871. Minimum refueling times
简单介绍BASE64Encoder的使用
【征文活动】亲爱的开发者,RT-Thread社区喊你投稿啦
Exploration of mobile application performance tools
ssb门限_SSB调制「建议收藏」
[fluent] dart data type map type (create map set | initialize map set | traverse map set)
OpenHarmony如何启动远程设备的FA
QWebEngineView崩溃及替代方案
Idea2021.1 installation tutorial
What is the difference between JSP and servlet?
Listing of chaozhuo Aviation Technology Co., Ltd.: raising 900million yuan, with a market value of more than 6billion yuan, becoming the first science and technology innovation board enterprise in Xia
The poor family once again gave birth to a noble son: Jiangxi poor county got the provincial number one, what did you do right?
Amazon cloud technology community builder application window opens