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

    创建双订阅者,为什么没有进入回调函数

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2话题 ros2多话题订阅
    2
    2
    296
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 5107211675
      十一。
      最后由 编辑

      class sync_node : public rclcpp::Node
      {

      public:
      // 构造函数,有一个参数为节点名称
      sync_node(const std::string &name = "sync_node") : Node(name)
      {

          command_subscribe_1 = this->create_subscription<sensor_msgs::msg::Image>("/azure_kinect_node/color", 5, std::bind(&sync_node::command_callback_1, this, std::placeholders::_1));
          command_subscribe_2 = this->create_subscription<sensor_msgs::msg::Image>("/color/image_raw", 5, std::bind(&sync_node::command_callback_2, this, std::placeholders::_1));
          cout << "启动成功1" << endl;
      }
      

      private:
      // 声明一个订阅者
      rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr command_subscribe_1;
      rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr command_subscribe_2;

      void command_callback_1(const sensor_msgs::msg::Image::SharedPtr msg)
      {
          cout << "启动成功2" << endl;
          cloud_sub_ptr_1->new_data_.push_back(*msg);
          cloud_sub_ptr_1->ParseData(Image_data_buff_);
          if (Image_data_buff_.size() == 0)
              cout << "八嘎,错啦" << endl;
          double Image_time = Image_data_buff_.front().header.stamp.sec;
          bool valid_img = interpolation.SyncData(unsynced_Image_, Image_data_buff_cha, Image_time);
          // 如果任意传感器没有插值,剔除该数据,找下一个数据做融合
          static bool sensor_inited = false;
          if (!sensor_inited)
          {
              if (!valid_img)
              {
                  Image_data_buff_.pop_front();
                  // return false;
              }
              sensor_inited = true;
          }
      }
      void command_callback_2(const sensor_msgs::msg::Image::SharedPtr msg)
      {
          cout << "启动成功3" << endl;
          cloud_sub_ptr_2->new_data_.push_back(*msg);
          cloud_sub_ptr_2->ParseData(unsynced_Image_);
      }
      
      std::deque<sensor_msgs::msg::Image> Image_data_buff_;
      std::deque<sensor_msgs::msg::Image> Image_data_buff_cha;
      std::deque<sensor_msgs::msg::Image> unsynced_Image_;
      ImageSubscriber *cloud_sub_ptr_1;
      ImageSubscriber *cloud_sub_ptr_2;
      ImageData interpolation;
      

      };

      int main(int argc, char **argv)
      {
      rclcpp::init(argc, argv); // ros2的c++库
      /创建一个新的ROS 2节点,并将其分配给一个名为node的智能指针变量/
      auto node = std::make_shared<sync_node>();

      /* 运行节点,并检测退出信号*/
      rclcpp::spin(node);
      rclcpp::shutdown();
      return 0;
      

      }
      这是我的代码,
      终端:ros2 run img_sync sync_node
      启动成功1
      回调函数没有进什么原因

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

        @510721167 测试过单个可以进吗?如果单个可以,尝试用多线程执行器配合callbackgroup修改

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

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