ros2 C++ 面向对象编程 b0_sub = new message_filters::Subscriber<sensor_msgs::msg::CompressedImage>(this->create_sub_node(), "/image_raw_com0/compressed",1);怎么用
时间: 2024-04-17 08:25:05 浏览: 93
很抱歉,我之前给出的回答有误。在ROS2中,我们不需要使用`new`操作符来创建`message_filters::Subscriber`对象。请忽略我之前给出的代码。
在ROS2中,我们使用`create_subscription`方法来创建一个订阅器。这是一个正确的示例:
```cpp
#include <rclcpp/rclcpp.hpp>
#include <sensor_msgs/msg/compressed_image.hpp>
class MyNode : public rclcpp::Node
{
public:
MyNode() : Node("my_node")
{
b0_sub = create_subscription<sensor_msgs::msg::CompressedImage>(
"/image_raw_com0/compressed",
1,
std::bind(&MyNode::callback, this, std::placeholders::_1)
);
}
void callback(const sensor_msgs::msg::CompressedImage::SharedPtr msg)
{
// 处理接收到的压缩图像消息
}
private:
rclcpp::Subscription<sensor_msgs::msg::CompressedImage>::SharedPtr b0_sub;
};
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
auto node = std::make_shared<MyNode>();
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
```
在这个例子中,我们创建了一个名为`MyNode`的类,继承自`rclcpp::Node`类。在构造函数中,我们使用`create_subscription`方法创建了一个订阅器,并指定了要订阅的主题、队列长度和回调函数。在回调函数中,您可以处理接收到的压缩图像消息。
请注意,我们使用`rclcpp::spin`来使节点保持运行状态,并使用`rclcpp::shutdown`来正确关闭节点。
希望这次能为您解答清楚。如果您还有任何疑问,请随时提问。
阅读全文