订阅多个话题并对其进行同步处理

本小节针对在ROS节点中需要订阅两个及两个以上的话题时,需要保持对这两个话题数据的同步,且需要同时接收数据一起处理然后当做参数传入到另一个函数中;

研究背景:realsenseT265 和 realsense D435 都有IMU数据,但是这两个传感器都将imu的数据拆开进行发布了,区分了线加速度和角加速,而在有一些场合我们需要合并使用;

  • 详细的代码如下:

    #include <message_filters/subscriber.h>
    #include <message_filters/synchronizer.h>
    #include <message_filters/sync_policies/approximate_time.h>
    #include <boost/thread/thread.hpp> using namespace message_filters; void imu_callback(const sensor_msgs::ImuConstPtr &imu_msg_accel, const sensor_msgs::ImuConstPtr &imu_msg_gyro)
    {
    double t = imu_msg_accel->header.stamp.toSec();
    double dx = imu_msg_accel->linear_acceleration.x;
    double dy = imu_msg_accel->linear_acceleration.y;
    double dz = imu_msg_accel->linear_acceleration.z;
    double rx = imu_msg_gyro->angular_velocity.x;
    double ry = imu_msg_gyro->angular_velocity.y;
    double rz = imu_msg_gyro->angular_velocity.z;
    Vector3d gyr(rx, ry, rz);
    Vector3d acc(dx, dy, dz);
    /**
    处理函数 ......
    */
    } int main(int argc, char** argv)
    {
    // 需要用message_filter容器对两个话题的数据发布进行初始化,这里不能指定回调函数
    message_filters::Subscriber<sensor_msgs::Imu> sub_imu_accel(n,IMU_TOPIC_ACCEL,2000,ros::TransportHints().tcpNoDelay());
    message_filters::Subscriber<sensor_msgs::Imu> sub_imu_gyro(n,IMU_TOPIC_GYRO,2000,ros::TransportHints().tcpNoDelay()); // 将两个话题的数据进行同步
    typedef sync_policies::ApproximateTime<sensor_msgs::Imu, sensor_msgs::Imu> syncPolicy;
    Synchronizer<syncPolicy> sync(syncPolicy(10), sub_imu_accel, sub_imu_gyro);
    // 指定一个回调函数,就可以实现两个话题数据的同步获取
    sync.registerCallback(boost::bind(&imu_callback, _1, _2)); ros::spin();
    return 0;
    }

最新文章

  1. 《Note --- Unreal 4 --- B project --- Second UV issue》
  2. 使用angular中ng-repeat , track by的用处
  3. cordova加载层、进度条、文件选择插件
  4. Accessibility应用之focus篇
  5. UDP异步通信
  6. [模板]tarjan求强连通分量
  7. 常用的PC/SC接口函数
  8. Curl的毫秒超时的一个”Bug”
  9. Prism简介
  10. IOS-QQ登陆之苹果程序流程
  11. (转)eclipse报错及解决说明 &quot;XX cannot be resolved to a type &quot;
  12. 《数据库MySQL》
  13. Forward团队-爬虫豆瓣top250项目-模块开发过程
  14. bash编程-grep
  15. 前端 HTML body标签相关内容 常用标签 超链接标签 a标签
  16. facebook api之Access Tokens
  17. English trip M1 - PC7 Can I Borrow Your Ping-Pong? Teacher:Patrick
  18. 开发框架-Web-.Net:NFine
  19. 【转】oracle &amp; 和 &#39; 特殊字符处理 ( like &#39;GAC/&amp;_%&#39; escape &#39;&amp;&#39;; 这里面的 / 居然将&amp; 转义了 为什么?)
  20. Nodejs AES加密

热门文章

  1. 同步架构OR异步架构
  2. 【Unity系统知识】关于SendMessage的用法
  3. appium报错及解决方案
  4. django-2-目录结构
  5. Cocos2d-x之Vector&lt;T&gt;
  6. leetcode.分治.241为运算表达式设计优先级-Java
  7. smb.conf免密登录文件
  8. 最小,独立,可分发的跨平台Web服务器
  9. ArcGis基础——相接面制造指定距离的分隔带
  10. Adapter的实现