当前位置:网站首页>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介绍”)
边栏推荐
- Chapter 3 of hands on deep learning - (1) linear regression is realized from scratch_ Learning thinking and exercise answers
- 【Leetcode】14. 最长公共前缀
- ThreadLocal
- 博客主题 “Text“ 夏日清新特别版
- Ocio V2 reverse LUT
- 移动应用性能工具探索之路
- Seven charts, learn to do valuable business analysis
- 亚马逊云科技 Community Builder 申请窗口开启
- 剑指 Offer 25. 合并两个排序的链表
- Just a coincidence? The mysterious technology of apple ios16 is even consistent with the products of Chinese enterprises five years ago!
猜你喜欢
![[error record] error -32000 received from application: there are no running service protocol](/img/6c/66099650de46cac88b805e6cfb90b9.jpg)
[error record] error -32000 received from application: there are no running service protocol

Blog theme "text" summer fresh Special Edition

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

871. 最低加油次数

Atcoder beginer contest 169 (B, C, D unique decomposition, e mathematical analysis f (DP))

相信自己,这次一把搞定JVM面试

深度之眼(二)——矩阵及其基本运算

【Leetcode】14. 最長公共前綴

Does digicert SSL certificate support Chinese domain name application?

AP and F107 data sources and processing
随机推荐
js删除字符串中的子串
Cell: Tsinghua Chenggong group revealed an odor of skin flora. Volatiles promote flavivirus to infect the host and attract mosquitoes
【Leetcode】14. 最长公共前缀
Connect Porsche and 3PL EDI cases
[fluent] dart data type map type (create map set | initialize map set | traverse map set)
One year is worth ten years
Briefly introduce the use of base64encoder
The impact of telecommuting on all aspects of our experience | community essay solicitation
关于我
MOSFET器件手册关键参数解读
linux安装postgresql + patroni 集群问题
[error record] error -32000 received from application: there are no running service protocol
Atcoder beginer contest 169 (B, C, D unique decomposition, e mathematical analysis f (DP))
Interpretation of key parameters in MOSFET device manual
智能垃圾桶(五)——点亮OLED
Fuyuan medicine is listed on the Shanghai Stock Exchange: the market value is 10.5 billion, and Hu Baifan is worth more than 4billion
Talk about an experience of job hopping and being rejected
Ap和F107数据来源及处理
IP地址转换地址段
The beginning of life