如何多次订阅一个ROS主题?
我有一个包含5个位置的列表,机器人需要去这些位置。对于每个位置,我希望订阅一个主题,以获取传感器数据,并在rviz中添加一个标记。以下是我的代码:
def addMarkerCallback(msg):
draw_functions = DrawFunctions('visualisation_marker')
if msg.data:
draw_functions.draw_rviz_sphere(0.02)
else:
print 'no data'
rospy.init_node("sensor_marker", anonymous = True)
for item in scanlist:
moveit_cmd.go(item, wait=True)
sub1 = rospy.Subscriber('sensor/right', SensorData, addMarkerCallback)
rospy.spin()
print 'go finished'
但是当我运行代码时,问题是循环总是停留在第一次迭代,所以机器人无法去扫描列表中的其他位置。我猜这可能是rospy.spin()的问题。有人能告诉我该怎么解决这个问题吗...非常感谢!
1 个回答
0
使用rospy.spin()意味着程序会在这个地方停下来,不会继续往下执行。它是被ROS故意放在一个循环里。
短期内,最简单的解决办法是把rospy.spin()移出你的循环,像这样:
for item in scanlist:
moveit_cmd.go(item, wait=True)
sub1 = rospy.Subscriber('sensor/right', SensorData, addMarkerCallback)
print 'go finished'
rospy.spin()
从长远来看,想想你到底想要做什么。在大多数情况下,结合发布和订阅的方式是最好的选择。可以再看看ROS的Python教程,特别是发布者的例子。
http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(python)