Ros实现话题的发布与订阅
时间: 2024-03-02 22:28:37 浏览: 153
在ROS中,话题是一种消息传输机制,用于在不同节点之间传递数据。话题的发布者会向话题发送消息,而订阅者则会接收并处理这些消息。
下面是一个简单的例子,演示如何在ROS中实现话题的发布与订阅:
1. 创建一个ROS包和一个节点:
```
$ mkdir my_package
$ cd my_package
$ catkin_create_pkg my_node rospy
$ cd my_node/src
$ touch publisher.py subscriber.py
$ chmod +x publisher.py subscriber.py
```
2. 在 `publisher.py` 文件中编写发布者节点的代码:
```python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('my_topic', String, queue_size=10)
rospy.init_node('publisher', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "Hello ROS %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
```
上述代码创建了一个名为 `my_topic` 的话题,并向该话题发布了一个字符串消息。
3. 在 `subscriber.py` 文件中编写订阅者节点的代码:
```python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
rospy.init_node('subscriber', anonymous=True)
rospy.Subscriber("my_topic", String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
```
上述代码创建了一个名为 `my_topic` 的话题,并订阅该话题的消息。每当收到消息时,回调函数 `callback` 就会被调用。
4. 运行节点:
在新终端中打开ROS环境
```
$ roscore
```
在 `publisher.py` 的终端中运行发布者节点:
```
$ rosrun my_node publisher.py
```
在 `subscriber.py` 的终端中运行订阅者节点:
```
$ rosrun my_node subscriber.py
```
这样,你就成功地实现了ROS中的话题发布与订阅机制。你可以在其他节点中也使用相同的话题来进行通信。
阅读全文