Die Art und Weise, wie Python Themen in ROS akzeptiert

Es gibt zwei Möglichkeiten für Python, Themen zu akzeptieren, aber im Vergleich zu C++ verfügt es nur über rospy.spin() und nicht über ros::spinOnce, sodass Sie besonders darauf achten müssen, es in einer Schleife zu verarbeiten. Informationen zu rospy.spin() und ros::spinOnce wurden im vorherigen Artikel ausführlich erläutert.

1. Die erste Methode: rospy.Subscriber

Die erste Methode ähnelt C++ und ruft die Rückruffunktion zur Verarbeitung auf. Da jedoch nur rospy.spin() zum Aufrufen der Rückruffunktion verwendet wird, blockiert das Programm die Rückruffunktion, empfängt ein Datenelement und ruft es einmal auf . Wenn der Code bei Verwendung von rospy.spin() ausgeführt wird, wird alles in der Rückruffunktion blockiert und nicht weiter ausgeführt.

#建立节点
rospy.init_node('listener', anonymous=True)
#订阅话题
rospy.Subscriber('/receiver', receiver_data, callback)
#调用回调函数,并阻塞,直到程序结束
rospy.spin()

2. Die zweite Methode: rospy.wait_for_message

Diese Methode erfordert keinen Knoten oder eine Rückruffunktion. Sie ähnelt einer Funktion, die darauf wartet, dass ein Thema eine Nachricht veröffentlicht. Wenn eine Nachricht empfangen wird, gibt sie Daten zurück und führt weiterhin das folgende Programm aus. Im Vergleich zum ersten nennen wir es Halbblockierung. Wenn das empfangene Thema keine Nachricht veröffentlicht, wartet es ewig, aber nach dem Empfang einer Nachricht ist das Warten vorbei und das nachfolgende Programm wird weiter ausgeführt.

msg2 = rospy.wait_for_message('/receiver', receiver_data, timeout=None)

Supongo que te gusta

Origin blog.csdn.net/weixin_62705892/article/details/127930225
Recomendado
Clasificación