Bei der Verwendung von ROS wollte ich Messdaten als Thema von dem Knoten abonnieren, der als Abonnent fungiert, aber ich hatte Probleme, weil ich keine Möglichkeit fand, Abonnenten und Publisher in einem Programm zu schreiben. (Es besteht eine hohe Wahrscheinlichkeit, dass die Google-Suchleistung gering ist.) Ich werde es zusammenfassen, um das Verständnis von ROS zu vertiefen. Ich habe gerade erst damit begonnen, und ich denke, es könnte falsch sein. Wenn Sie damit vertraut sind, weisen Sie bitte darauf hin. informativ.
Middleware, die Bibliotheken und Tools zur Unterstützung der Erstellung von Roboteranwendungen bereitstellt. Insbesondere wird die Kommunikation zwischen Robotern einfacher.
In ROS werden die mit dem ROS-Netzwerk verbundenen ausführbaren Dateien als "Knoten" bezeichnet, und Nachrichten, die als "Themen" bezeichnet werden, werden zwischen den Knoten ausgetauscht. Der Knoten, der die Nachricht übermittelt, wird als Publisher bezeichnet, und der Knoten, der die Nachricht empfängt, wird als Abonnent bezeichnet.
talker.py
#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import String #Importieren Sie den zu verwendenden Datentyp
def talker():
#Publisher erstellen('Themenname',Schimmel,Größe)
pub = rospy.Publisher('chatter', String, queue_size=10)
#Knotennamen deklarieren
rospy.init_node('talker', anonymous=True)
#Deklarieren Sie den Zyklus der Schleife
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
#Geben Sie die zu veröffentlichenden Daten ein
hello_str = "hello world %s" % rospy.get_time()
#Zeigen Sie die Daten an, die im Terminal veröffentlicht werden sollen
rospy.loginfo(hello_str)
#Daten veröffentlichen
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
Zitiert aus dem Schreiben eines einfachen Herausgebers und Abonnenten (Python), ergänzende Erklärung
listener.py
#!/usr/bin/env python
import rospy
from std_msgs.msg import String #Importieren Sie den zu verwendenden Datentyp
def callback(data):
#Zeigen Sie die empfangenen Daten im Terminal an
#Daten sind Daten.In Daten empfangen
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
#Knotennamen deklarieren
rospy.init_node('listener', anonymous=True)
#Abonnenten erstellen('Themenname',Schimmel,Rückruffunktion)
rospy.Subscriber("chatter", String, callback)
#Rufen Sie die Rückruffunktion weiter auf
rospy.spin()
if __name__ == '__main__':
listener()
Zitiert aus dem Schreiben eines einfachen Herausgebers und Abonnenten (Python), ergänzende Erklärung
Nur weil ich rospy.spin () nicht verwende (weil es im Standby-Status der Rückruffunktion stoppt), habe ich das Gefühl, dass ich sie nur zusammengeklebt habe, aber ich habe mir darüber ungefähr zwei Tage lang Sorgen gemacht. Lol.
controller.py
#!/usr/bin/env python
# coding: utf-8
import rospy
from std_msgs.msg import String
def callback(data):
#Zeigen Sie die empfangenen Daten im Terminal an
#Daten sind Daten.In Daten empfangen
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def controller():
#Knotennamen deklarieren
rospy.init_node('controller', anonymous=True)
#Erstellen Sie einen Abonnenten. Laden Sie das Thema.
sub = rospy.Subscriber('listener', String, callback)
#Publisher erstellen('Themenname',Schimmel,Größe)
pub = rospy.Publisher('talker', String, queue_size=1)
#Schleifenperiode.
rate = rospy.Rate(10)
while not rospy.is_shutdown():
#Geben Sie die zu veröffentlichenden Daten ein
hello_str = "hello world %s" % rospy.get_time()
#Zeigen Sie die Daten an, die im Terminal veröffentlicht werden sollen
rospy.loginfo(hello_str)
#Daten veröffentlichen
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
controller()
except rospy.ROSInitException:
pass
Recommended Posts