Beim Erstellen eines ROS-Herausgebers oder Abonnenten Wenn Sie ein Verlag sind, "Welchen Namen möchten Sie veröffentlichen?" Wenn Sie ein Abonnent sind, werden Sie definitiv entscheiden, was Sie abonnieren möchten.
In Code
pub = rospy.Publisher("pub_name", Image, queue_size=1)
sub = rospy.Subscriber("sub_name", Image, img_cb)
Dies ist der Teil, der "pub_name" und "sub_name" von entspricht.
Zu diesem Zeitpunkt können der Name des Herausgebers und des Abonnenten am Anfang einen Schrägstrich haben oder nicht. Was bedeutet das? Ich dachte. "/pub_name" "pub_name" "/sub_name" "sub_name" Es sieht so aus Ich wusste nicht, wofür es war, weil sich das Verhalten nicht mit oder ohne ändert, aber es stellte sich erst kürzlich heraus.
Beim Aufrufen und Starten mit Start ist es möglich, dem Herausgeber- und Abonnentennamen einen Namespace hinzuzufügen, aber ich wurde gefragt, ob ich dies widerspiegeln soll oder nicht. Wenn Sie einen Schrägstrich hinzufügen, wird der Namespace nicht angewendet. Im Gegenteil, der Namespace wird nur angezeigt, wenn der Schrägstrich nicht hinzugefügt wird.
Um mit einem konkreten Beispiel zu erklären,
hoge.py
#!/usr/bin/env python
#coding: utf-8
import rospy
from sensor_msgs.msg import Image
def img1_cb(a):
print "1"
def img2_cb(b):
print "2"
if __name__ == '__main__':
rospy.init_node('hoge') #Knotenerstellung
pub1 = rospy.Publisher('/pub_name1', Image, queue_size=1)
pub2 = rospy.Publisher('pub_name2', Image, queue_size=1)
sub1 = rospy.Subscriber("/sub_name1", Image, img1_cb)
sub2 = rospy.Subscriber("sub_name2", Image, img2_cb)
while not rospy.is_shutdown():
rospy.spin()
So erstellen Sie zwei Publisher und zwei Abonnenten.
Und in der Startdatei
hoge.launch
<launch>
<group ns="namespace">
<node pkg="tttest" name="new_name" type="hoge.py" />
</group>
</launch>
Beschreibe was war Beginnen Sie mit dem Namespace als Namespace und dem Knotennamen als new_name. Und das
roslaunch test hoge.launch
Beginnen mit. Um zu sehen, welchen Namen Sie veröffentlichen und abonnieren
rosnode info /namespace/new_name
Und überprüfe es,
Node [/name_space/new_name]
Publications:
* /pub_name1 [sensor_msgs/Image]
* /rosout [rosgraph_msgs/Log]
* /name_space/pub_name2 [sensor_msgs/Image]
Subscriptions:
* /name_space/sub_name2 [unknown type]
*
* /sub_name1 [unknown type]
(Teilauszug). Der mit dem Schrägstrich ist der gleiche wie der in hoge.py festgelegte Name. Wenn Sie keinen Schrägstrich hinzufügen, sehen Sie, dass sich der in hoge.launch festgelegte Namespace im Kopf befindet.
Es war erfrischend zu verstehen, was ich mich schon lange gefragt hatte. Ich hoffe, dass die Fragen derer, die sich ähnlich wundern, geklärt werden.