這個問題一般出現的場合有幾種,需要用乙份驅動程式開啟多個相同的感測器,或者不同計算機通過協作,可能有節點和話題的名稱產生衝突。
對於這種情況,ros給出了很簡便的解決方案,要做的只是採用launch檔案啟動節點,在launch檔案中使用名字空間,將乙個節點用兩個同的節點名稱來啟動。例如我們有乙個gps感測器的驅動程式節點,節點名稱為gps_driver,如果我們需要啟動乙個gps感測器時,我們只需要寫這樣乙個啟動檔案
ns="rtk"
pkg="gps_driver"
type="gps_driver"
name="gps_driver">
name="port"
value="/dev/ttys0" />
node>
ns="garmin"
pkg="gps_driver"
type="gps_driver"
name="gps_driver">
name="port"
value="/dev/ttys1" />
node>
launch>
這樣,使用同乙份驅動程式,通過配置兩個不同的串列埠,就能夠啟動兩個不同的gps感測器。執行上面的launch檔案,啟動的兩個gps_driver將被冠上』ns』指定的名字空間,使用命令rosnode list可以看到
rtk/gps_driver
garmin/gps_driver
需要注意的是,這樣的方式啟動節點後,該節點發布的話題也將被加上名字空間,因此可能會導致有的接收節點無法接收正確的話題訊息,可以使用remap訊息名稱的方式來解決。例如,rtk gps原先的話題名字為/fix,加上名字空間變為/rtk/fix,有個名為「process_rtk_gps」的需要接收rtk gps的定位資訊,但是該程式源**中接收的話題為/fix,這時候我們不需重新修改和編譯將該程式,只要在啟動該檔案時remap訊息名稱即可,例如
pkg="process_rtk_gps"
type="process_rtk_gps"
name="process_rtk_gps">
from="rtk/fix"
to="/fix"/>
node>
launch>
這個問題一般在這兩種情況下出現,一是直接從其他計算機上拷貝的程式包放在本地計算機上編譯時,二是對於本地已經寫好的程式修改了msg檔案,不起作用的意思是原本正常使用的msg檔案失效了,就算重新編譯,源程式也無法正確使用新編譯的msg檔案,例如原先有個程式節點發布了自定義訊息my_msg,後來更改了my_msg.msg裡的內容,重新編譯後,該節點發布的my_msg使用命令rostopic echo 就無法輸出了。
這中情況的解決方案是,注釋掉cmakelist.txt中生成可執行檔案的部分,先編譯msg檔案,再將源程式編譯成可執行檔案。
ROS學習 (十一)常見問題及解決方案
這個問題一般出現的場合有幾種,需要用乙份驅動程式開啟多個相同的感測器,或者不同計算機通過協作,可能有節點和話題的名稱產生衝突。對於這種情況,ros給出了很簡便的解決方案,要做的只是採用launch檔案啟動節點,在launch檔案中使用名字空間,將乙個節點用兩個同的節點名稱來啟動。例如我們有乙個gps...
vs qt qgis環境搭建常見問題及解決方案
1.warning c4003 max 巨集的實參不足 解決方案 屬性 c c 預處理器 預處理器定義,加上nominmax即可 警告 c4819 該檔案包含不能在當前 頁 936 中表示的字元。請將該檔案儲存為 unicode 格式以防止資料丟失 1 找出警告的檔案,然後在該檔案的開始處加入下面的...
linux 常見問題及解決
平時開發中需要連線到虛擬機器linux centos 進行,期間有些常見問題,在此記錄備忘 1 ssh連線突然變慢,在centos中ping一些常見 也特別慢 分析 估計dns解析有問題,檢視vm中的 etc resolv.conf 與本機dns差異,發現第乙個備用dns不同。ping 第乙個nam...