ROS 分布式通信
ROS是一種分布式軟件框架,節點之間通過松耦合的方式進行組合。
如何實現分布式多機通信
(1)設置IP地址,確保底層鏈路的聯通
在 ubuntu 下輸入如下指令,查詢 ubuntu 的ip地址:
ifconfig在樹莓派的終端中輸入如下指令
sudo vi /etc/hostsUbuntu vi文本編輯器使用方法:https://blog.csdn.net/qq_44989881/article/details/115870950
在 hosts 文件中添加ubuntu的ip地址和名稱
測試配置的地址是否聯通
ping [配置的計算機名稱]例如:
ping ubuntu在 樹莓派 下輸入如下指令,查詢 樹莓派 的ip地址:
ifconfig然后在樹莓派的終端中輸入如下指令
sudo gedit /etc/hosts添加樹莓派的ip地址 和名稱
測試配置的地址是否聯通
ping [配置的計算機名稱]例如:
ping huike做完以上操作,如果雙向網絡暢通,說明底層網絡通信已經沒有問題,主機與樹莓派之間的網絡已經聯通。
設置ROS_MASTER_URI
接下來是如何實現分布式多機通信
(2)在從機端設置ROS_MASTER_URI,讓從機找到ROS Master
主機端 ubuntu 啟動ROS Master 與海龜仿真節點
roscore然后在樹莓派編輯 .bashrc 文件 設置ROS Master的位置
vi .bashrc在 .bashrc 文件最后一行添加以下代碼中的任意一個。
export ROS_MASTER_URI=http://ubuntu:11311 #(當前終端有效) export ROS_HOSTNAME=ubuntu或在終端中輸入,以下指令在所有終端都有效。
echo "export ROS_MASTER_URI=http://hcx-pc:11311">> ~/.bzshrc echo "export ROS_HOSTNAME=ubuntu">> ~/.bzshrc注:ROS Master 默認的端口號為:11311
從機終端輸入:
source ~/.bashrc source /etc/init.d/networking注意:當設置從機 ROS_MASTER_URI 為主機(不為從機本機)后,從機上是不能運行 roscore 的。
主機 ubuntu 啟動海龜節點
rosrun turtlesim turtlesim_node
在從機樹莓派上輸入:
若能成功顯示話題名,則說明成功。
查看具體的節點信息
rosnode info /rosout問題解決
注意:在使用樹莓派ping 虛擬機中的 ubuntu ping不通的情況下,顯示如下:
如果 ping 不通則關閉 ubuntu 的防火墻或者更改VMware網絡連接模式,就可以ping通。以下是解決 ping 不通的方法。
如果linux虛擬機可以ping通樹莓派,樹莓派無法ping通虛擬機
更改VMware網絡連接模式
-
將VMware的網絡連接模式修改為 橋接模式
-
查看是否安裝 VMware Bridge Protocol
查看當前防火墻狀態
在Ubuntu中 我們使用以下命令查看當前防火墻狀態。
sudo ufw status- inactive狀態是防火墻關閉狀態
- active是防火墻開啟狀態。
開啟防火墻
在Ubuntu中 使用以下命令來開啟防火墻
sudo ufw enable開啟后,查看當前防火墻狀態
sudo ufw status開啟防火墻后的狀態為active,說明防火墻開啟成功。
關閉防火墻
在Ubuntu中 使用以下命令來關閉防火墻。
sudo ufw disable關閉后,查看當前防火墻狀態
sudo ufw status如果是顯示的狀態位 inactive 說明防火墻已經關閉掉了。
完成以上操作,可以使樹莓派ping 通設置的 ubuntu 的 IP 地址
總結
- 上一篇: ROS系统 动作编程
- 下一篇: OpenCV AprilTags 识别