鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    message_filter同步频率不同的传感器,不进回调

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    messagefilter 同步传感器
    2
    4
    665
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 29600845652
      澹澹灯蠨
      最后由 编辑

      想用message_filter同步两个传感器的消息,程序订阅同一节点时间戳肯定相同,没问题进回调了。但订阅频率不同的传感器,就有问题了,该怎么改?
      class MultiSubscriber : public rclcpp::Node
      {
      public:
      message_filters::Subscriber<sensor_msgs::msg::LaserScan> image_sub_; message_filters::Subscriber<sensor_msgs::msg::LaserScan> disparity_sub_;

      MultiSubscriber(const std::string& name)
      : Node(name)
      {
        image_sub_.subscribe(this, "scan", rmw_qos_profile_sensor_data);
        disparity_sub_.subscribe(this, "scan", rmw_qos_profile_sensor_data);
      
        typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::msg::LaserScan, sensor_msgs::msg::LaserScan> approximate_policy;
        static message_filters::Synchronizer<approximate_policy>syncApproximate(approximate_policy(100), disparity_sub_, image_sub_);
        syncApproximate.registerCallback(&MultiSubscriber::disparityCb,this);
      }
      private:
      void disparityCb(const sensor_msgs::msg::LaserScan::SharedPtr disparity_msg, const sensor_msgs::msg::LaserScan::SharedPtr color_msg)
      {
        cout << "Recieved" << endl;
      }
      

      };
      int main(int argc, char * argv[])
      {
      rclcpp::init(argc, argv);
      auto timestamp = std::make_shared<MultiSubscriber>("timestamp");
      rclcpp::spin(timestamp);
      rclcpp::shutdown();
      return 0;
      }

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @2960084565
        最后由 编辑

        @2960084565 建议检查时间参数,还有就是同步策略问题approximate_policy(100) 是否合适

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        29600845652 1 条回复 最后回复 回复 引用 0
        • 29600845652
          澹澹灯蠨 @小鱼
          最后由 编辑

          @小鱼 时间参数?检查msg->header.stamp消息时间戳?
          同步策略approximate近似同步感觉很适合,比严格同步条件要宽松很多,缓存队列也只是自认为10比较少才调得100

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @2960084565
            最后由 编辑

            @2960084565 在 message_filter同步频率不同的传感器,不进回调 中说:

            检查msg->header.stamp消息时间戳?

            是的,策略再放松,可能是你这两个话题的stamp差距太大

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            1 条回复 最后回复 回复 引用 0
            • 第一个帖子
              最后一个帖子
            皖ICP备16016415号-7
            Powered by NodeBB | 鱼香ROS