ROS 电脑通信准备
参考链接:http://wiki.ros.org/cn/ROS/Tutorials/MultipleMachines 主要介绍ROS节点在多机器上运行的配置
一、由于ROS底层是基于TCP/IP的,所以如果希望节点运行在不同的机器上,就需要设置好机器之间的网络连接。
1、查看网络配置:查看电脑的ip和主机名hostname 命令:ifconfig ; hostname
注:只要在同一个局域网下就能进行通信。可以是同一个无线路由器下的两台电脑,也可以有其中一台电脑通过有线连接无线路由器,另一台连接其无线。
2、修改/etc/hosts文件
目的是将ip与两台电脑的hostname绑定,两台电脑之间通过hostname就可以找到对方。修改之后,ping ip和ping hostname都可以找到对方的信息。
将本机ip和本机hostname都添加进/etc/hosts 两个之间是tab键,不是空格
如: 192.168.0.50 sl-desktop
将另外的机器的ip和对应的hostname添加进/etc/hosts
如: 192.168.0.85 sl-thinkpad-x201i
修改完之后,重启网络: sudo /etc/init.d/networking restart
注:该文件下还有127开头的回环测试ip不用修改
二、实现电脑之间的通信
3、两台电脑上装上chrony包,实现时间同步sudo apt-get install chrony
配置方法参见:http://www.cnblogs.com/wzy5223/p/5345378.html
4、在两台电脑上安装ssh服务器
sudo apt-get install openssh-server
ps aux| grep ssh 查看sshd守护进程是否启动
如果没有启动,调用sudo /etc/init.d/ssh start启动他
5、检查网络连通
ping -c4 hostname #发送4个封装包
sl@sl-desktop:~$ ping -c4 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.029 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.033 ms
--- localhost ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.028/0.031/0.034/0.002 ms
三、多机测试实验,采用listener和talker节点
6. 两台电脑的连网情况
192.168.0.50 sl-desktop
192.168.0.85 sl-thinkpad-x201i
配置文件:sl-desktop中 /etc/hosts
127.0.0.1 localhost
127.0.1.1 sl-desktop
192.168.0.50 sl-desktop #台式机的ip\thosts
192.168.0.85 sl-thinkpad-x201i #笔记本的ip\thosts
# 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
sl-thinkpad-x201i中 /etc/hosts
127.0.0.1 localhost
127.0.1.1 sl-thinkpad-x201i
192.168.0.50 sl-desktop
192.168.0.85 sl-thinkpad-x201i
# 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
7.台式机连接到笔记本
$ ssh sl@sl-thinkpad-x201i #输入密码,登陆进笔记本的系统
8.在台式机sl-desktop端
开启一个终端,输入roscore 启动主节点
9.在笔记本sl-thinkpad-x201i端
$export ROS_MASTER_URI=http://sl-desktop:11311 #使笔记本识别ROS主节点运行的机器IP:port
$rosrun rospy_tutorials listener #启动rospy_tutorials程序包的listener节点
10.在台式机端sl-desktop
开启一个终端,输入
$rosrun m_pkg listener #也可以是ros系统自带的/roscpp_tutorials/listener 或/rospy_tutorials/listener
开启另一个终端,输入
$rosrun m_pkg talker #也可以是ros系统自带的/roscpp_tutorials/talker 或/rospy_tutorials/talker
此时,在台式机端的talker节点不断地发送消息:
sl@sl-desktop:~/m_ros_ws$ rosrun roscpp_tutorials talker
[ INFO] [1468647284.621422803]: hello world 0
[ INFO] [1468647284.721507150]: hello world 1
[ INFO] [1468647284.821481159]: hello world 2
[ INFO] [1468647284.921490613]: hello world 3
[ INFO] [1468647285.021490583]: hello world 4
[ INFO] [1468647285.121480628]: hello world 5
[ INFO] [1468647285.221478280]: hello world 6
[ INFO] [1468647285.321491770]: hello world 7
[ INFO] [1468647285.421494102]: hello world 8
[ INFO] [1468647285.521490956]: hello world 9
[ INFO] [1468647285.621495987]: hello world 10
在台式机另一终端的m_pkg/listener节点收到消息:
sl@sl-desktop:~$ rosrun m_pkg listener[ INFO] [1468647141.267843843]: I heard: [hello world 3]
[ INFO] [1468647141.367775039]: I heard: [hello world 4]
[ INFO] [1468647141.467773422]: I heard: [hello world 5]
[ INFO] [1468647141.567728851]: I heard: [hello world 6]
[ INFO] [1468647141.667776271]: I heard: [hello world 7]
[ INFO] [1468647141.767750576]: I heard: [hello world 8]
[ INFO] [1468647141.867797181]: I heard: [hello world 9]
[ INFO] [1468647141.967771322]: I heard: [hello world 10]
[ INFO] [1468647142.067683258]: I heard: [hello world 11]
[ INFO] [1468647142.167728250]: I heard: [hello world 12]
在笔记本的rospy_tutorials/listener节点也收到消息:
sl@sl-thinkpad-x201i:~$ rosrun rospy_tutorials listener
[INFO] [WallTime: 1468647594.039604] /listener_4656_1468647584896I heard hello world 12
[INFO] [WallTime: 1468647594.139758] /listener_4656_1468647584896I heard hello world 13
[INFO] [WallTime: 1468647594.239264] /listener_4656_1468647584896I heard hello world 14
[INFO] [WallTime: 1468647594.339432] /listener_4656_1468647584896I heard hello world 15
[INFO] [WallTime: 1468647594.441040] /listener_4656_1468647584896I heard hello world 16
[INFO] [WallTime: 1468647594.543232] /listener_4656_1468647584896I heard hello world 17
[INFO] [WallTime: 1468647594.639349] /listener_4656_1468647584896I heard hello world 18
注意:这里在笔记本上的节点接收到消息有延迟,从12个开始的.