一.同时订阅处理10个以上的自定义消息类型的话题
1.自定义消息类型
如下格式自定义消息类型,保证有std_msgs/Header header部分,因为添加了std_msgs依赖,需要将原有的编译文件删除后重新编译
float64 x
float64 y
float64 fixed_pose
std_msgs/Header header
2.特化 ros::message_traits::TimeStamp
#include "自定义数据类型.h"
#include <ros/message_traits.h>
#include <ros/time.h>template<>
struct ros::message_traits::TimeStamp<自定义数据类型> {
static ros::Time value(const 自定义数据类型& msg) {
return msg.header.stamp; // 返回 header.stamp 作为时间戳
}
};
将其作为头文件添加到需要使用的文件中
3.同步处理
typedef message_filters::sync_policies::ApproximateTime<自定义数据类型, 自定义数据类型, 自定义数据类型,自定义数据类型, 自定义数据类型, 自定义数据类型,
自定义数据类型> SyncPolicyA;std::shared_ptr<message_filters::Synchronizer<SyncPolicyA>> sync_a_;
sync_a_ = std::make_shared<message_filters::Synchronizer<SyncPolicyA>>(SyncPolicyA(10),
*sub_a_[0], *sub_a_[1], *sub_a_[2], *sub_a_[3], *sub_a_[4],*sub_a_[5], *sub_a_[6] );//注意此处参数不能超过9个sync_a_->registerCallback(绑定回调,this,_1,_2,...)//此处参数也不能好超过9个