请用ROS2 python语言写一段代码,能够生成两个节点,一个发送数据,一个模拟延时条件下接收数据
时间: 2024-10-14 14:08:42 浏览: 24
在ROS2中,Python语言常用于编写节点(Node)。下面是一个简单的示例,展示了如何创建两个节点:一个`Publisher`节点负责发布数据,另一个`Subscriber`节点则模拟延迟接收数据。我们将使用`rclpy`库,这是官方推荐的ROS 2 Python客户端库。
```python
# 导入必要的ROS2库
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
# 发布者节点类
class PublisherNode(Node):
def __init__(self):
super().__init__('publisher_node')
self.publisher_ = self.create_publisher(String, 'topic_name', 10) # 创建发布者,主题名可以自定义
self.timer = self.create_timer(1, self.publish_data) # 每隔1秒触发事件
def publish_data(self):
msg = String(data='Hello from Publisher') # 创建消息
self.publisher_.publish(msg)
self.get_logger().info(f"Published message: {msg.data}")
# 订阅者节点类
class SubscriberNode(Node):
def __init__(self):
super().__init__('subscriber_node')
self.subscription = self.create_subscription(
String,
'topic_name', # 使用相同的主题名
self.callback,
10)
def callback(self, msg):
rclpy.time.sleep(2) # 模拟延迟2秒处理消息
self.get_logger().info(f"Received message: {msg.data}")
# 主函数运行节点
def main(args=None):
rclpy.init(args=args)
publisher_node = PublisherNode()
subscriber_node = SubscriberNode()
rclpy.spin(publisher_node) # 运行发布者节点
rclpy.shutdown() # 关闭节点时自动停止所有定时器和订阅
if __name__ == '__main__':
main()
```
在这个例子中,`topic_name`需要替换为你想要使用的实际主题名称。`SubscriberNode`会在收到消息后睡眠2秒,模拟了接收数据的延迟。
阅读全文