Python实现Subscriber

Subscriber创建流程

1. 设置环境和编码

1
2
#!/usr/bin/env python
#coding:utf-8

2. 创建节点

1
rospy.init_node(nodeName)

3. 创建订阅者

1
2
rospy.Subscriber(topicName, String, topicCallback)
rospy.spin()

4. 实现订阅回调

1
2
def topicCallback(msg):
    print msg

完整示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python
# coding:utf-8

import rospy
from std_msgs.msg import String


def topicCallback(msg):
    print msg


if __name__ == '__main__':
    nodeName = "pysubscriber"
    topicName = "pytopic"

    # 初始化节点
    rospy.init_node(nodeName)

    # 创建订阅者
    rospy.Subscriber(topicName, String, topicCallback)

    # 阻塞线程
    rospy.spin()

调试订阅者

调试Subscriber主要是查看是否能收到数据,也就是提供一个发布的调试工具。ROS提供了命令行工具和图形化工具进行调试。

1. 通过自己编写的publisher进行调试

1
rosrun demo_topic pypublisher.py

2. 通过rostopic工具进行调试

查询主题所需要的数据类型

1
rostopic type pytopic

模拟发布数据

1
rostopic pub pytopic std_msgs/String hello -r 10

:::tip

rostopic pub是模拟发布数据的命令

cpptopic是将数据发送到那个主题,根据自己实际调试的主题来写。

std_msgs/String是这个主题所需要的数据类型,我们是通过rostopic type cpptopic进行查询出来的。

hello是发送的数据,根据自己的调试需求来写。

-r 指的是发送频率

:::

3. 通过rqt_publisher工具进行调试

通过命令启动rqt_publisher工具

1
rosrun rqt_publisher rqt_publisher