ros名稱、命名空間和重映射

一 概論node

名稱就是代號,ros中的節點、話題和參數的名稱必須是惟一的,這很容易想到,若是你認識兩個叫同樣名字的人,單憑一個名字你是分辨不出來講的這我的究竟是誰,因此 ros中的名稱必須是惟一的。spa

可是,這個規定與現實不符啊,分明現實中就有這種狀況啊,因此咱們很容易想到兩種辦法code

1 把兩我的的名字前加點東西,如三班的A和四班的A(命名空間)blog

2 分別叫這兩我的的小名,或者綽號。(重映射)class

經過這種方式就能夠解決名字衝突的問題。軟件

ros中這兩種方式分別叫作命名空間和重映射。命名空間

二 命名空間方法

咱們在安裝軟件時,兩個軟件文件夾中可能都有readme.txt,咱們能夠經過/來限定命名空間im

/home/user1/readme.txt 
/home/user2/readme.txt

其中的命名空間就是/home/user1總結

這能夠在ros中寫爲

rosrun turtlesim turtlesim_node __ns:=/home/user1

注意是兩個"_"組成的"__",則用rostopic list輸出的節點爲

/home/user1/turtlesim


三 重映射

若是你不想起的名字和別人的名字相同,那麼你能夠經過重映射來改變本身的名字

如咱們想要兩個turtlesim包中的turtlesim_node節點,分別叫作A和B,咱們能夠採起下面的操做

rosrun turtlesim turtlesim_node __name:=A
rosrun turtlesim turtlesim_node __name:=B

這時再經過rosnode list 讀取節點名稱,咱們發現節點名稱變爲

/A
/B

也許機智的你想到,可不能夠直接

 
 
rosrun turtlesim turtlesim_node __name:=/home/user1/A

若是這樣能夠的話直接不就ok了嗎?

答案是不行的,這樣混淆了命名空間和名稱的概念,若是你這麼作,ros會提醒你:node names cannot contain /

因此有時必須把兩條指令組合起來使用

rosrun turtlesim turtlesim_node __name:=A __ns:=/home/user1

這時節點名爲

/home/user1/A

四 總結

ros中的名稱是惟一的,咱們有兩種方法能夠處理此問題命名空間(__ns:=)和重映射(__name:=),有時可能須要二者組合使用。

相關文章
相關標籤/搜索