如何分几次订阅ROS主题?

时间:2014-08-25 21:28:46

标签: python ros subscriber

我有一个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 :(得分:0)

使用rospy.spin()意味着python不会超过那个点,它会被一个循环中的ROS(故意)抓住。

最简单的短期解决方案是将你的rospy.spin()移出你的for循环, 像这样:

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)

相关问题