以下是一个使用C++编写的基于ROS 2的节点示例,持续接收某个topic并进行处理后发布出去:
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
class MyNode : public rclcpp::Node
{
public:
MyNode() : Node("my_node")
{
subscriber_ = create_subscription<std_msgs::msg::String>(
"input_topic", std::bind(&MyNode::callback, this, std::placeholders::_1));
publisher_ = create_publisher<std_msgs::msg::String>("output_topic");
timer_ = create_wall_timer(std::chrono::milliseconds(100), std::bind(&MyNode::timerCallback, this));
}
private:
void callback(const std_msgs::msg::String::SharedPtr msg)
{
// 在这里进行消息处理
// 这里只是将收到的消息原样发布到输出话题上
publisher_->publish(*msg);
}
void timerCallback()
{
// 在定时器回调中执行其他操作,如果需要的话
}
private:
rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscriber_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
auto node = std:make_shared<MyNode>();
rclcpp:spin(node);
rclcpp:shutdown();
return 0;
}
以上代码创建了一个名为”MyNode”的自定义节点,在构造函数中创建了订阅器(subscriber)和发布器(publisher),分别用于接收输入话题(input_topic)和发布输出话题(output_topic)。在回调函数(callback)中,对收到的消息进行处理,并将处理后的消息发布出去。
此外,还创建了一个定时器(timer),可以在定时器回调函数(timerCallback)中执行其他操作(可选)。
请根据实际需求修改代码,并确保已正确安装和配置ROS 2环境,包括C++编译环境以及相关ROS 2依赖项。
内容由零声教学AI助手提供,问题来源于学员提问