ROS2节点通信的代码实现
时间: 2023-09-14 07:02:42 浏览: 111
在ROS2中,节点之间的通信可以通过发布者(Publisher)和订阅者(Subscriber)来实现。具体的实现步骤如下:
1. 创建节点
首先,需要创建节点并且初始化ROS2系统,代码如下:
```python
import rclpy
rclpy.init()
node = rclpy.create_node('my_node')
```
2. 创建发布者
接下来,需要创建一个发布者对象并且指定发布的主题名称、消息类型等信息,代码如下:
```python
from std_msgs.msg import String
publisher = node.create_publisher(String, 'my_topic', 10)
```
其中,String是消息类型,'my_topic'是发布的主题名称,10是队列的大小。
3. 发布消息
发布消息时,需要构造一个消息对象并且调用发布者对象的publish()方法,代码如下:
```python
msg = String()
msg.data = 'Hello, World!'
publisher.publish(msg)
```
这里构造了一个String类型的消息,将其data属性设置为'Hello, World!',然后调用publish()方法将消息发布出去。
4. 创建订阅者
创建订阅者的代码与创建发布者类似,需要指定订阅的主题名称、消息类型等信息,代码如下:
```python
subscriber = node.create_subscription(String, 'my_topic', callback, 10)
```
其中,callback是当订阅到消息时要执行的回调函数,10是队列的大小。
5. 定义回调函数
回调函数的作用是处理订阅到的消息,代码如下:
```python
def callback(msg):
print('I heard: [%s]' % msg.data)
```
这里的回调函数将订阅到的消息打印出来。
6. 运行节点
最后,需要调用rclpy.spin()方法来运行节点,代码如下:
```python
rclpy.spin(node)
```
完整的代码如下:
```python
import rclpy
from std_msgs.msg import String
def callback(msg):
print('I heard: [%s]' % msg.data)
def main(args=None):
rclpy.init(args=args)
node = rclpy.create_node('my_node')
publisher = node.create_publisher(String, 'my_topic', 10)
subscriber = node.create_subscription(String, 'my_topic', callback, 10)
msg = String()
msg.data = 'Hello, World!'
publisher.publish(msg)
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
```
这个例子中创建了一个节点,同时创建了一个发布者和一个订阅者,发布了一条消息,然后运行节点并且等待订阅到消息。当订阅到消息时,会执行回调函数并且打印消息内容。
阅读全文