基于ROS的多机网络通信

概述

本文要解决的是通过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,参考网址:

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
经验分享 程序员 微信小程序 职场和发展