LoginSignup
6
7

More than 5 years have passed since last update.

サブスクライバ名とパブリッシャ名の最初のスラッシュの必要性について

Posted at

初めのスラッシュは必要なの?

ROSのパブリッシャーやサブスクライバーを作成する時に、
パブリッシャーなら、「どんな名前でパブリッシュするか」、
サブスクライバーなら、「何という名前のものをサブスクライブするのか」を必ず決めると思います。

コードで言うと

pub = rospy.Publisher("pub_name", Image, queue_size=1)
sub = rospy.Subscriber("sub_name", Image, img_cb)

の"pub_name"と"sub_name"にあたる部分です。

この時のパブリッシャ名やサブスクライバ名の頭にスラッシュが入ったり入らなかったりする場合があって、なんの意味があるのかな?と思っていました。
"/pub_name"
"pub_name"
"/sub_name"
"sub_name"  こんな感じです
入れても入れなくても動作が変わらないので、何のためなのか分からなかったのですが、つい最近判明しました。

結論

launchで呼び出して起動するときに、パブリッシャー名やサブスクライバ名にネームスペースをつけることができるのですが、これを反映させるかさせないか、と言うものでした。
スラッシュをつけたならば、ネームスペースが適用されません。
逆に、スラッシュをつけない場合のみ、ネームスペースが反映されます。

具体例

具体例を交えて説明しますと、

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') #node作成

    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()

と記述して、パブリッシャとサブスクライバを2つずつ作ります。

そして、launchファイルで

hoge.launch
<launch>
    <group ns="namespace">
        <node pkg="tttest" name="new_name" type="hoge.py" />
    </group>
</launch>

としたものを記述し、
ネームスペースをnamespace、ノード名をnew_nameとして起動するようにします。そしてこれを

roslaunch test hoge.launch

で起動します。
なんという名前をパブリッシュ、サブスクライブしているか確認するために、

rosnode info /namespace/new_name

と実行して確認してみると、

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]

となっています(一部抜粋)。
スラッシュをつけたものは、hoge.pyで設定した名前そのままになっており、
スラッシュをつけないものは、hoge.launchで設定したネームスペースが頭についていることが分かります。

ずっと疑問に思っていたものが分かってすっきりしました。
同じように疑問に思っている人の疑問が晴れたなら幸いです。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7