使用Synchronizer类时间同步三个消息

参考:https://answers.ros.org/question/60903/timesynchronizer-callback-problem/

 需要包含以下三个头文件:

#include<message_filters/synchronizer.h>

#include<message_filters/subscriber.h>

#include<message_filters/sync_policies/approximate_time.h>

 以一个激光雷达消息和两个图像话题消息为例:

class MultiFusion{
private:
    ros::NodeHandle private_node_;
    ros::NodeHandle nh;
    message_filters::Subscriber<sensor_msgs::Image> leftCamera_sub_;
    message_filters::Subscriber<sensor_msgs::Image> rightCamera_sub_;
    message_filters::Subscriber<livox_ros_driver2::CustomMsg> lidar_sub_;

public:
    MultiFusion();
    ~MultiFusion();

    void callback( const livox_ros_driver2::CustomMsgConstPtr& cloud_msg,
                                const sensor_msgs::ImageConstPtr& leftImage_msg,
                                const sensor_msgs::ImageConstPtr& rightImage_msg);
};

MultiFusion::MultiFusion() : private_node_("~") {

    leftCamera_sub_.subscribe(nh, "/zed/zed_node/left_raw/image_raw_color", 120);
    rightCamera_sub_.subscribe(nh, "/zed/zed_node/right_raw/image_raw_color", 120);
    lidar_sub_.subscribe(nh, "/livox/lidar", 40);
    typedef message_filters::sync_policies::ApproximateTime<livox_ros_driver2::CustomMsg, sensor_msgs::Image, sensor_msgs::Image> MySyncPolicy;
    message_filters::Synchronizer<MySyncPolicy> sync(MySyncPolicy(40), lidar_sub_, leftCamera_sub_, rightCamera_sub_);
    sync.registerCallback(boost::bind(&MultiFusion::callback, this, _1, _2, _3));

    ros::spin();

}

MultiFusion::callback是多传感器融合的回调函数,下面测试了时间同步的结果:

void MultiFusion::callback( const livox_ros_driver2::CustomMsgConstPtr& cloud_msg,
                            const sensor_msgs::ImageConstPtr& leftImage_msg,
                            const sensor_msgs::ImageConstPtr& rightImage_msg){
    //激光雷达、视觉融合回调函数
    cout << fixed << setprecision(16);
    cout << "lidar_time" <<cloud_msg->header.stamp.toSec() << endl;
    cout << "leftImage_time" << leftImage_msg->header.stamp.toSec() << endl;
    cout << "rightImage_time" << rightImage_msg->header.stamp.toSec() << endl;
    cout << "process add\n";
}

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值