概述
本文要解决的是通过ROS节点实现局域网中不同计算机之间的通信问题。
ROS设计的灵魂就在于其分布式计算。一个优秀的节点不需要考虑在哪台机器上运行,它允许实时分配计算量以最大化的利用系统资源。在多个机器人上使用ROS是一件很简单的事,你只需要记住一下几点:
- 你只需要一个master,只要在一个机器上运行它就可以了。
- 所有节点都必须通过配置 ROS_MASTER_URI连接到同一个master。
准备工作
1.在Terminal中输入下列命令查看ip地址:
ifconfig
我笔记本得到的结果如下:
2.在Terminal中输入下列命令查看主机名称:
hostname
通过上述两个步骤,查得两个主机的信息如下:
主机A IP地址:192.168.1.100 hostname: shiqi
主机B IP地址:192.168.1.116 hosename:shiqi-ThinkPad-PC
3.修改/etc文件夹下的hosts文件:
修改hosts文件的目的是将两电脑的ip和主机名绑定,两台电脑之间通过hostname就能找到对方。没有这一步的时候,你直接去ping 对方主机名时,结果是无法解析对方主机名。
sudo apt-get install gksu
gksu gedit /etc/hosts
打开hosts后,你看到hosts文件内开头已经有了两行,我们从第三行开始插入你刚刚查到的两台电脑的ip地址和主机名hostname,中间用tab键隔开,不是空格,如下图所示:
修改完以后,在两台电脑上都输入下列命令重启以下网络:
sudo /etc/init.d/networking restart
4.在两台电脑上安装chrony包,用于实现同步
sudo apt-get install chrony
5.在两台电脑上安装ssh服务器(Ubuntu自带ssh客户端,不需要安装)
sudo apt-get install openssh-server
安装完之后,确认服务器是否已经启动:
ps -e|grep ssh
如果只有ssh-agent,那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了,如下图所示:
6.网络连接测试
利用hostname代替ip地址,用主机A去ping主机B,测试网络连接情况:
ssh shiqi
ping shiqi-ThinkPad-E70
如下图所示代表网路连接成功,反过来用主机Bping主机A测试一下:
7.修改.bashrc.文件,在文件末尾添加环境变量
主机A
gedit ~/.bashrc
export ROS_HOSTNAME=shiqi
export ROS_MASTER_URI=http://shiqi:11311
主机B
gedit ~/.bashrc
export ROS_HOSTNAME=shiqi-ThinkPad-PC
export ROS_MASTER_URI=http://shiqi:11311
ROS运行时必须知道有哪些机器在运行,因此需要知道每一台机器的名字,通过设置ROS_HOSTNAME变量来完成;
必须告诉每个主机的master节点在哪,也就是现在是哪台机器在运行roscore,将ROS_MASTER_URI都指向运行roscore的主机名(本文在主机A上运行roscore)
遥控小海龟测试
(1)在主机A上运行roscore
roscore
(2) 在主机B上启动小海龟仿真节点
rosrun turtlesim turtlesim_node
(3) 在主机A上新开一个终端,遥控小海龟
rosrun turtlesim draw_square
这时可以看到小海龟在走正方形:
小觅相机测试
1.首先安装MYNT-EYE-D-SDK,参考网址:MYNT-EYE-D SDK 安装指南:
2. 在主机A上运行roscore
roscore
3.在主机A上切换到MYNT-EYE-D-SDK目录下,运行下列命令发布信息:
source ./wrappers/ros/devel/setup.bash
roslaunch mynteye_wrapper_d mynteye.launch
4.在主机B上执行命令
cd /MYNT-EYE-D-SDK/wrappers/ros/devel/lib/mynteye_wrapper_d
./mynteye_listener_d
相机插在主机A上,在主机B上可以实时显示左右目和深度图像,经测试发现,信号传输没有延迟,网络传输速度暂时可以满足要求
参考文章:
ROS 教程之 network:多台计算机之间网络通信