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


一 概論

名稱就是代號,ros中的節點、話題和參數的名稱必須是唯一的,這很容易想到,如果你認識兩個叫一樣名字的人,單憑一個名字你是分辨不出來說的這個人到底是誰,所以 ros中的名稱必須是唯一的。

但是,這個規定與現實不符啊,分明現實中就有這種情況啊,所以我們很容易想到兩種辦法

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

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

通過這種方式就可以解決名字沖突的問題。

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

二 命名空間

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

/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:=),有時可能需要兩者組合使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM