ROS學習筆記(十一) 多台計算機之間的網路通訊

2021-08-07 17:30:09 字數 2123 閱讀 4571

做多機械人實驗的時候經常需要多台計算機之間進行通訊,如果是只有一台主機自然是沒有問題的,但如果是有多台計算機在同乙個區域網下,任何檢視或者訂閱其他計算機的話題就很關鍵了。

如果只是簡單地視覺化某些資料或者單次執行某個程式,比如rviz,那麼可以簡單在終端下修改位址即可(通過ifconfig檢視)

export ros_master_uri=

export ros_hostname=192.168.0.101

其中ros_master_uri是從機(待觀測)的ip,ros_hostname寫的是主機(顯示)的ip。

之後就可以在主機下檢視從機的話題或者執行rviz視覺化資料了。但是這樣有個問題,很多時候我們不僅想觀測從機的資料,更多是想在乙個區域網內的機械人互相訂閱對方發布的話題,那麼怎麼來實現這個功能呢?當然如果每次都手動修改終端的ip也是一種方法,但顯然我們不希望這麼麻煩。其實上面就是乙個簡化版,關鍵是我們要有乙個主機來執行roscore,之後從機都在主機核程式下執行就可以互相看見其他機械人發布的話題了。而且通過修改系統檔案,可以將主機名與ip繫結,避免每次都重複輸入一長串ip。

兩台裝有ros的筆記本,並知道他們的ip位址和主機名。(如果是虛擬機器將其改為橋接模式即可)

主機名:hostname

對於有線連線的,在eth0中尋找ip位址,如果是無線連線,則在wlan0中尋找ip位址。

如果不修改hosts檔案直接去ping對方,即使連線在同乙個區域網之下也無法解析對方的主機名,因此我們需要修改hosts檔案將兩台電腦的ip位址和主機名繫結在一起。

而且修改需要同時在兩台機器上完成。

因為hosts檔案具有讀寫保護,我們需要超級許可權,利用vim或者gedit編輯

sudo gedit /etc/hosts
開啟hosts檔案之後,前面已經有了兩行我們無需改變,在它之後新增上當前主機和從機的ip位址和主機名。ipv6配置根據需要,可以不用。

如果你想讓從機之間也能互相ping通,那麼對應的也需要在從機上修改該檔案。

修改完之後,在兩台電腦上輸入以下指令完成網路重啟

sudo /etc/init.d/networking restart

首先在兩台電腦上安裝chrony包,用於實現同步

sudo apt-get install chrony

之後再兩台電腦上進行ssh的安裝

sudo apt-get install openssh-server

安裝完之後,確認伺服器是否已經啟動

ps -e|grep ssh

如果只有ssh-agent,那ssh-server還沒有啟動,需要/etc/init.d/ssh start,如果看到sshd那說明ssh-server已經啟動了。

接下來就可以進行通訊了

ssh [主機名]

ping [另一台機器]

反過來也可以,這樣就實現了兩台機器的簡單通訊。

配置完成後在主機執行roscore,利用ssh 登陸從機(直接在從機上執行節點也可以),此時從機間的節點和話題是互相可見的。

另外,遠端登陸其實也可以有圖形介面的,下述兩句指令分別表示不開啟圖形介面和開啟圖形介面

ssh nvidia@r1

ssh -x nvidia@r1

最後一步就是一開始我們做的那樣,不過為了貫徹懶人思想,我們把他寫道~/.bashrc中。把所有從機的master都改為主機,hostname寫從機名即可

export ros_hostname=192.168.1.104

export ros_master_uri=

bingo!

注意,當這樣配置之後所有節點啟動時必須具有不同的名稱,否則會發生衝突,建議寫成launch檔案利用group namespace啟動。

ROS之多台計算機之間的網路通訊

官網和白巧克力亦唯心博主大大已經寫的很詳細啦,我是想補充一點,因為我在執行export ros master uri http hostname 11311之後,執行rosrun my image transport my publisher 0的時候,發現總是報找不到master的錯。問了師兄才知...

計算機匯流排學習筆記

計算機匯流排學習筆記 功能 內匯流排 cpu晶元內部資料傳輸。區域性匯流排 在功能部件內部,晶元之間的資料傳輸 系統匯流排 插電板或系統功能部件之間傳輸資料。外匯流排 時序 同步匯流排,非同步匯流排 格式 並行格式,序列格式 方向 單向匯流排,雙向匯流排 兩種計算機系統五大部件間連線方式 分散連線 ...

《計算機概論》學習筆記

2.個人計算機架構與介面裝置 3.資料表達方式 4.軟體程式執行 輸入單元 輸出單元 cpu內部控制單元 算術邏輯單元 記憶體 根據cpu內部的微指令集的設計理念不同分類兩種主要cpu種類 精簡指令集risc 常見的risc cpu應用有 複雜指令集cisc 主機板 儲存裝置 顯示裝置 網路裝置 c...