ROS學習---遠程啓動ROS節點

遠程啓動ROS節點

#1 環境

Ubuntu 16.04 

機器配置 :

pc-master 192.168.3.230 本地
pc-slave2 192.168.3.232 遠程

前提條件:

  1. 可以在兩臺機器上實現單機的ROS發佈和訂閱
  2. 兩臺機器可以免密登錄

#2 需求

  • 在實際應用中, 不同的功能會放在不同的服務器上
  • 需要訂閱不同服務器上的topic

#3 驗證前提條件

#3.1 驗證免密登錄

在這裏插入圖片描述


在這裏插入圖片描述

兩臺服務器可以相互免密登錄

具體免密登錄教程 : https://blog.csdn.net/Coxhuang/article/details/106971890

#3.2 驗證單機ros發佈訂閱

這裏以pc-slave2服務器爲例(因爲後面要遠程啓動的也是pc-slave2上的節點)

talker :

在這裏插入圖片描述


listener :

在這裏插入圖片描述

#4 開始

**接下來, 我們要在pc-master服務區上啓動遠程服務器pc-slave2的talker節點 **

#4.1 配置

#4.1.1 pc-master

sudo vim /etc/hosts

在/etc/hosts文件中添加一下內容 :

192.168.3.230   pc-master
192.168.3.232   pc-slave2

sudo vim ~/.bashrc

在~/.bashrc中添加一下內容 :

export ROS_IP="192.168.3.230"
export ROS_HOSTNAME=pc-master
export ROS_MASTER_URI=http://pc-master:11311
export ROSLAUNCH_SSH_UNKNOWN=1

#4.1.2 pc-slave2

sudo vim /etc/hosts

在/etc/hosts文件中添加一下內容 :

192.168.3.230   pc-master
192.168.3.232   pc-slave2

sudo vim ~/.bashrc

在~/.bashrc中添加一下內容 :

export ROS_HOSTNAME=pc-slave2
export ROS_MASTER_URI=http://pc-master:11311
export ROSLAUNCH_SSH_UNKNOWN=1

sudo vim /opt/ros/kinetic/trunk_evn.sh

新增trunk_evn.sh文件

#!/bin/sh
export ROS_IP=192.168.3.232
export ROS_HOSTNAME=pc-slave2
. /home/trunk/work/test/testworkspace/devel/setup.sh
exec "$@"

sudo chmod 777 trunk_evn.sh

#4.2 本地主機腳本

在本地pc-master的package中編寫launch腳本

vim /home/trunk/work/test/testworkspace/src/testpackage/launch/test.launch

<launch>
    <machine name="pc-slave2" address="192.168.3.232" user="trunk" env-loader="/opt/ros/kinetic/trunk_evn.sh"></machine>
    <node machine="pc-slave2" name="talker" pkg="testpackage" type="talker.py" output="screen" ></node>
</launch>

#4.3 啓動

roslaunch testpackage test.launch

#5 報錯

#5.1 not found in known_hosts

... logging to /home/trunk/.ros/log/84cf4482-b84f-11ea-9d63-000c297ff566/roslaunch-pc-master-3868.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://pc-master:32881/
remote[192.168.3.232-0] starting roslaunch
remote[192.168.3.232-0]: creating ssh connection to 192.168.3.232:22, user[trunk]
/usr/lib/python2.7/dist-packages/Crypto/Cipher/blockalgo.py:141: FutureWarning: CTR mode needs counter parameter, not IV
  self._cipher = factory.new(key, *args, **kwargs)
remote[192.168.3.232-0]: failed to launch on pc-slave2:

Unable to establish ssh connection to [[email protected]:22]: Server u'192.168.3.232' not found in known_hosts

解決思路 :

  • 看日誌

在這裏插入圖片描述

在這裏插入圖片描述

根據日誌報錯的提示來修改python底層源碼,沒有效果,日誌顯示, ros依然是運行在python2.7上,試着將ros運行在Python3上

  1. 把系統默認Python替換成Python3
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
  1. 安裝ros的編譯基礎軟件包
sudo apt-get install python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential
sudo pip3 install catkin_pkg
  1. 安裝軟件包依賴
rosdep install --from-paths src --ignore-src --rosdistro kinetic -y
sudo apt-get install libtbb-dev python3-pyqt5
sudo pip3 install empy numpy defusedxml netifaces
# 修復 16.04 libboost_python3找不到的問題
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py35.so /usr/lib/x86_64-linux-gnu/libboost_python3.so
  1. 完美解決

在這裏插入圖片描述

#5.2 TypeError: ‘NoneType’ object is not callable

修改Python底層代碼

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章