1、环境
PC系统:Ubuntu16.04+ROS kinect
工控机NUC系统:Ubuntu16.04+ROS kinect
前提:PC和树莓派在同一局域网下;也就是都连同一个WIFI(路由器生成的那种,或者手机热点,校园网不行),或者PC连了WIFI、用根网线把树莓派和PC连起来也可以。
2、目的、作用
ssh通信:目的是通过电脑端访问树莓派,实现两者之间的文件互传、远程其他操作。
为了方便,在一台电脑可以操作两个终端。
多机分布式通信:当机器人运行后,在PC上控制、监控机器人。
为了分担树莓派的工作压力,而且ROS机器人控制,建图、导航反映在远端PC也更为人性化。
如果是在工控机端作为roscore启动的,那pc端就相当于一个节点,在发布消息,工控机在订阅pc端的消息,反之亦然.
3、SSH通信
ssh程序分为有客户端程序openssh-client和服务端程序openssh-server。
3.1 为两台电脑安装ssh服务(工控机端可操作情况):
sudo apt-get install openssh-server
pc端操作:
sudo apt-get install openssh-client
查看开启之:
sudo ps -e |grep ssh
如下则已经开启:
如果没开启,则:
sudo service ssh start
3.3 查看IP,不用理会我的计算机名字哈,图片的跟文字的不太一样,看懂就行,改成自己的
1.先找两台机子的IP地址,终端输入
ifconfig
-
如果电脑连接的时有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;
-
如果电脑连接的是无线,则 wlan0 部分的 inet addr 后就是 IP 地址。
2.分别了解了之后,需要在两台机子上的/etc/hosts文件加入对方的IP地址和对应的计算机名字
举例如下:
在工控机上终端操作,或者远程操工控机(计算机名为nuc):
sudo gedit /etc/hosts
这里的笔记本(计算机名为 pc )的IP地址是192.168.1.48,其实连到局域网的时候不是这个,因为编辑博客,所以连的是外网。假设就是上面的那个。
然后加上这段:
192.168.1.48 pc
127.0.0.1 localhost
127.0.1.1 pc
192.168.1.48 pc
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
工控机的就不放了,差不多。
最好ping一下,看看通信是否正常:
在工控机上:
3.4.设置ROS_MASTER_URI
在ROS网络中,指定其中一台设备作为ROS master主机,那么该主机将负责运行roscore进程,其他设备必须配置ROS_MASTER_URI环境变量来指向该master主机。对于所有的设备都必须要设置的是ROS_HOSTNAME变量,这个ROS_HOSTNAME变量就是我们上面得到的zeroconf主机名。
接下来我们分别修改台式机和树莓派的home目录下的.bashrc文件,在其中增加如下框中配置,在这里我们把树莓派作为ROS master主机,所以ROS_MASTER_URI指向的是自己robot.local。我们又设置了台式机的ROS_MASTER_URI也指向robot.local,这就说明我们需要把台式机作为ROS的一个从节点设备,当然如果想修改台式机为master主机,树莓派为从节点设备的话只需要将各自的ROS_MASTER_URI中的robot.local修改为pc机的主机名pc即可。
这里是借鉴:http://www.corvin.cn/635.html因为讲得比较详细
后面的测试内容参考 http://www.corvin.cn/635.html 即可.
本次教程参考的文章: