簡體   English   中英

如何在幾個不同的時間訂閱ROS主題?

[英]How to subsribe to a ROS topic for several seperate times?

我有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()的問題。 誰能告訴我如何解決這個問題...非常感謝!

使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM