下面是一个使用C++编写的ROS2发布数据的示例代码:
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
class PublisherNode : public rclcpp::Node
{
public:
PublisherNode() : Node("publisher_node")
{
publisher_ = this->create_publisher<std_msgs::msg::String>("topic_name", 10);
timer_ = this->create_wall_timer(std::chrono::seconds(1), std::bind(&PublisherNode::publishData, this));
}
private:
void publishData()
{
auto message = std_msgs::msg::String();
message.data = "Hello, ROS2!";
publisher_->publish(message);
RCLCPP_INFO(this->get_logger(), "Published: '%s'", message.data.c_str());
}
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<PublisherNode>();
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
在上述示例中,我们创建了一个继承自rclcpp::Node
的自定义节点类PublisherNode
。在构造函数中,我们创建了一个消息发布器(publisher),以及一个定时器(timer)用于定期发布数据。
在publishData()
函数中,我们创建了一个名为message
的消息对象,并将需要发布的数据赋值给它。然后通过调用发布器的publish()
函数来发布该消息,并使用日志记录已发布的内容。
在main()
函数中,我们初始化ROS2节点,创建自定义节点对象,并使用spin()
函数来运行节点。最后,通过调用shutdown()
函数来关闭ROS2节点的运行。
请注意,你需要根据实际需求修改示例代码中的话题名称和消息类型。同时,确保已正确安装并设置好ROS2环境。
内容由零声教学AI助手提供,问题来源于学员提问