NXP

ROS 多机器运行及通信

2019-07-12 11:47发布

我在ARM 系统上装了ubuntu14.04,安装的ROS 版本是indigo,除了有些package需要下载相应的ARM(或者是indigo对应的?)的,其他基本和X86上运行差不多。看网上有建议说尽量不要再ARM架构上运行诸如rviz的图形化界面,我希望能够看见ARM 系统采集到的点云,目前的解决思路是用另一台X86的机器订阅ARM版本的ROS发布的TOPIC进行显示。所以参考了ROS 教程中的多机器运行教程(http://wiki.ros.org/ROS/Tutorials/MultipleMachines)。过程简单总结如下: 1.ssh的使用 ROS多机器运行首要的一步是ssh,由于之前没有ssh的经验。所以将自己的调试过程介绍一下(ssh的原理自行百度)。我的两个系统一个叫sys1(ip:192.168.0.1,ARM系统,希望作为从机使用),sys2(ip:192.168.0.2)。教程里面非常简单,命令如下: $ ssh sys1    $ ssh sys2 等等 但是之前ping sys1愣是ping不通。后来看看原来是因为没有设置主机名——没办法,网络基础知识欠缺。查了点资料,http://www.jb51.net/LINUXjishu/10938.html,这里面介绍了如何修改主机名 “为什么需要定义域名呢?其实理解也简单,比如我们有三台主机,每台做不同的事,一台做MAIL服务器,一台做FTP服务器,一台做SMB服务器,所以我们就可以这样来设计hostname;
127.0.0.1 localhost.localdomain localhost
192.168.1.2 ftp.localdomain ftp
192.168.1.3 mail.localdomain mail
192.168.1.4 smb.localdomin smb
把这上面这个配置文件的内容分别写入每台机器的/etc/hosts内容中,这样这三台局域网的机器就可以通过hostname来访问了。”

注意修改hosts文件的时候需要获取权限,前面要加上sudo.修改过后,可以直接像教程上那样了ssh sys1.我试了一下,但总是会出问题。开始的时候显示的是 显示的是 大概是端口号22不正常之类的提示,后来百度了一下,说是防火墙的问题,禁用了防火墙之后问题解决。继续ssh sys1之后出现permission denied的问题,几次输入都提示密码错误。后来发现正确的命令应该是 ssh sys1@192.168.0.1 据大神说是因为只写sys1不能全完获得权限,不太懂。只知道这么写的确工作的挺好的 2. 多机器公用一个ROS MASTER 这一部分教程里面已经讲的比较详细了,其中 export ROS_MASTER_URI=http://hal:11311 对多个机器共用一个ROS master很重要。有了这个就可以在sys2的terminal下订阅sys1机器发布的topic了,这样我们就可以用sys2完成一些图形显示的任务 (http://wiki.ros.org/ROS/Tutorials/MultipleMachines)