紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
创建双订阅者,为什么没有进入回调函数
-
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
回调函数没有进什么原因 -
@510721167 测试过单个可以进吗?如果单个可以,尝试用多线程执行器配合callbackgroup修改