任务描述: 使用 Python 和 C++ 分别实现一个简单的 ROS 2 节点,启动时向控制台输出“你好”信 息。该节点会每隔 2 秒发送一次问候信息,模拟一个简单的发布者节点。
时间: 2024-10-21 14:17:47 浏览: 25
ROS2-Python-Node:基本ROS2节点,以便发布和订阅点云数据
在ROS 2中,Python和C++都支持作为节点编写,这里我会分别给出两个语言的简单示例如何实现。
**Python 示例(使用`rclpy`库):**
```python
# 导入必要的ROS库
import rclpy
from rclpy.node import Node
from rclpy.time import Time
class GreetingNode(Node):
def __init__(self):
super().__init__('greeting_node')
self.publisher_ = self.create_publisher(str, 'hello_topic', 10) # 创建发布者
def greet(self):
msg = "你好" # 准备消息
self.get_logger().info(msg) # 输出到控制台
self.publisher_.publish(msg) # 发布消息
self.create_timer(2, self.greet, oneshot=False) # 每隔2秒再次运行
def main(args=None):
rclpy.init(args=args)
node = GreetingNode() # 创建节点实例
try:
rclpy.spin(node) # 运行循环直到程序退出
except KeyboardInterrupt:
pass
finally:
node.destroy_node() # 销毁节点
rclpy.shutdown()
if __name__ == '__main__':
main()
```
**C++ 示例(使用`rcpputils`库):**
```cpp
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
class GreetingNode : public rclcpp::Node {
public:
GreetingNode(const std::string& node_name)
: Node(node_name),
publisher_(this->create_publisher<std_msgs::msg::String>("hello_topic", 10)) // 创建发布者
{}
private:
void run_greeting() {
auto now = this->get_clock()->now();
auto message = std_msgs::msg::String("你好"); // 准备消息
this->get_logger().info(message); // 输出到控制台
publisher_->publish(message); // 发布消息
this->add_timer(std::chrono::seconds(2), this->run_greeting); // 每隔2秒再次运行
}
rclcpp::Publisher<std_msgs::msg::String> publisher_;
};
int main(int argc, char * argv[]) {
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared<GreetingNode>("greeting_node"); // 创建节点实例
rclcpp::spin(node);
return 0;
}
```
阅读全文