ROS下分布式控制的节点配置
参考:https://blog.csdn.net/heyijia0327/article/details/42065293
白巧克力亦唯心
一、两台电脑通信前的准备工作:
1.首先查看两台电脑各自的ip信息和主机名hostname:
查看ip:在终端中输入下面的命令
- ifconfig
台式机是有线连接的,在eth0这一栏里找到你的ip地址,笔记本是通过wifi连接的,在wlan0一栏找到笔记本端的ip地址.
查看两电脑各自的主机名,在终端中输入:
- hostname
我台式机上的得到的结果如下:
台式机主机名为:hyjlab-virtual-machine,其实主机名hostname就是终端的标题栏上 @后面的那串字符,如上图。
2.修改/etc文件夹下的hosts文件:
修改hosts文件的目的是将两电脑的ip和主机名绑定,两台电脑之间通过hostname就能找到对方。没有这一步的时候,你直接去ping 对方主机名时,结果是无法解析对方主机名。
这里以修改台式机上的hosts文件为例,笔记本上也要相同操作。由于电脑上的 hosts文件是只读文件,直接修改后是保存不了的。因此先用root方式对该文件属性进行修改。
第一种方式(推荐):
使用常用的gedit 修改,只是在gedit前面加上gksu,如:
- gksu gedit /etc/hosts
第二种方式,通过vim:
在终端里输入:
- sudo chmod a+w /etc/hosts
- vim /etc/hosts
如果提示没有vim命令,先sudo apt-get install vim 装一下vim
打开hosts后,你看到hosts文件内开头已经有了两行,我们从第三行开始插入你刚刚查到的两台电脑的ip地址和主机名hostname,形式如下:
- your_ip your_hostname
中间用tab键隔开,不是空格。LZ的台式机的hostname为:hyjlab-virtual-machine。笔记本为:hyj-F83VF。
如下图所示:
输入完以后,按下退出ESC键,然后按下 “ : ” 键,输入wq! 回车就行了,如下图:
修改完以后,在两台电脑上都输入下列命令重启以下网络:
- sudo /etc/init.d/networking restart
二、实现两台电脑间通信:
1.在两台电脑上装上chrony包,用于实现同步:
- sudo apt-get install chrony
2. 在两台电脑上都进行ssh服务器的安装
关于SSH命令可以参考下Ubuntu环境下SSH的安装及使用,这里只管使用,不细谈SSH本身。
首先在终端中输入下面的命令,安装SSH服务器,SSH的客服端Ubuntu自带已经安装好了:
- sudo apt-get install openssh-server
安装完以后,确认服务器是否已经启动:
- ps -e|grep ssh
首先进行基本的ping操作,下面用desktop_hostname代表台式机的主机名,用laptop_hostname代表笔记本上的主机名:
第一步先检查台式机去ping 笔记本,看通信是否正常,输入:
- ssh desktop_hostname
- ping laptop_hostname
第二步,反过来从笔记本去ping台式机:
- ssh laptop_hostname
- ping desktop_hostname
三、修改.bashrc开机启动文件
在两台电脑上都使用下面的命令来编辑.bashrc文件:gedit ~/.bashrc在台式机这边在bashrc文件的最后添加:
- export ROS_HOSTNAME=desktop_hostname
- export ROS_MASTER_URI=http://laptop_hostname:11311
- export ROS_HOSTNAME=laptop_hostname
- export ROS_MASTER_URI=http://laptop_hostname:11311
在台式机处打开一个terminal,输入ssh [email protected]回车
会提示输入密码,输入机器人的开机登录密码即可
发现terminal处字体变为[email protected]说明已经登录robot的电脑了。
完成之后如果发现问题,在台式机上无法通过密码登录机器人,查询后需要修改以下文件:
参考:https://blog.csdn.net/qq_33179208/article/details/59108678
http://jingyan.baidu.com/article/e6c8503c724ebae54f1a18cd.html
sudo gedit /etc/ssh/sshd_config文件,
将PermitRootLogin 的值改为yes
将PermitEmptyPasswords为 no
保存关闭,重启server
sudo /etc/init.d/networking restart
还要主要以下几点:
1、利用roslaunch启动机器人的节点时候,launch文件中不能包含x -term的窗口,否则节点无法运行。
2、rviz需要在台式机的权限下进行,即terminal中显示为[email protected],而不是[email protected] 。