ROS多机通信与SSH远程登录

一、实现ROS多机通信

关于ROS多机通信可参考 “白巧克力亦唯心” 的下面这两篇博客:
ROS 教程之 network:多台计算机之间网络通信(1)
ROS 教程之 network:多台计算机之间网络通信(2)
向这位大佬致敬!

二、SSH公钥免密登录(Linux系统)

前提:保证至少两台计算机连在同一局域网内,互相可以ping通,并且ssh服务器均已启动,具体操作可参考上面的第一篇博客。

  • Step1:在本地计算机生成公钥和私钥

打开终端,执行命令:

$ ssh-keygen

一直按回车键选择默认选项,会在~/.ssh目录下生成id_rsa和id_rsa.pub两个文件。然后将id_rsa.pub文件复制到远程计算机:

$ scp ~/.ssh/id_rsa.pub username@ip_address:/home/username

其中,username为远程计算机用户名,ip_address为远程计算机的IP地址,示例如下:

注意:一定要区分主机名和用户名两个不同的概念,上面的示例中“exbot”为用户名,“jay”为主机名。即“@”符号前的为用户名,“@”符号后的为主机名。

  • Step2:SSH登录到远程计算机

将公钥文件id_rsa.pub拷贝到远程计算机后,SSH登录到远程计算机:

$ ssh username@ip_address

其中,username为远程计算机用户名,ip_address为远程计算机的IP地址。
登录后,将id_rsa.pub的文件内容追加写入到远程计算机的~/.ssh/authorized_keys文件中,并修改authorized_keys文件的权限:

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

示例如下:

配置完成后,再登录远程计算机就无需输入密码。如果出现如下错误提示:Agent admitted failure to sign using the key,则在本机当前用户下执行命令:$ ssh-add即可,再次登录就免密了。

  • 如何退出登录
$ exit

或快捷键Ctrl+D。

三、关于SSH远程文件传输

1、将本地文件或文件夹上传到远程计算机

$ scp /home/exbot/upload.log lbx@192.168.0.101:/home/lbx

$ scp -r /home/exbot/upload_folder lbx@192.168.0.101:/home/lbx

2、获取远程计算机上的文件或文件夹

$ scp lbx@192.168.0.101:/home/lbx/download.log /home/exbot

$ scp -r lbx@192.168.0.101:/home/lbx/download_folder /home/exbot

四、关于/etc/hosts文件与~/.bashrc文件

1、 修改/etc/hosts文件的目的是将计算机的IP地址与一个固定的名称进行绑定,这个名称不一定非要是计算机的主机名。就像Internet上将域名与网址绑定一样,只是为了方便记忆和使用。如果计算机真实的主机名比较繁琐,完全可以换一个简单易用的名称代替它。以我的为例:

在我这里,IP地址为192.168.0.101的计算机的真实主机名是:lbx-Lenovo-Y430P,显然这个名字非常繁琐,还不如直接记IP地址方便,所以我索性把名字改的简单一些,用“lbx”这个名字代替“lbx-Lenovo-Y430P”,简单易用。这样,以后凡是用到IP地址为192.168.0.101的时候,都可以用“lbx”这个名字来代表它。

比如我Ping对方主机:

$ ping 192.168.0.101
可以简写为:
$ ping lbx

远程登录时:

$ ssh lbx@192.168.0.101
可以简写为:
$ ssh lbx@lbx

需要再次强调,这里远程登录时,“@”符号前面的是用户名,这个必须与真实用户名一致,“@”符号后面的是主机IP地址,可以用一个映射名称来代表。

2、 ROS多机通信时为了简化操作需要在从机的~/.bashrc文件末尾添加export ROS_HOSTNAME=localhostnameexport ROS_MASTER_URI=http://hostname:11311,这里的localhostname代表的是本机的IP地址,hostname代表的是另一台主机的IP地址,映射关系写在/etc/hosts文件里。

我在这里要说的是,执行完上面的操作以后,我们在从机上则无法再启动roscore和ROS的launch文件。原因是我们修改了~/.bashrc文件以后每次打开一个新的终端都会自动加载 ~/.bashrc里的环境变量,相当于在每个新的终端自动执行了export ROS_MASTER_URI=http://hostname:11311,这时ROS Master已经指向了另一台主机,所以本地的roscore启动无效。在另一台主机的roscore未启动之前,从机的ROS是无法正常运行的。

所以,视自己的需求而定,可以将export ROS_MASTER_URI=http://hostname:11311写入~/.bashrc,操作相对方便;也可以直接在终端运行,这样从机即可以与主机通信,又可以运行自己的roscore。

需要注意的是,在终端手动运行的export ROS_MASTER_URI=http://hostname:11311只对当前终端有效。修改~/.bashrc文件后须重启终端才能生效。

五、ROS多机通信与SSH远程登录的区别

前者是基于ROS层面的通信,它只进行ROS节点之间消息的传递,并不涉及除ROS节点管理器之外的任何文件,所以两台计算机之间无法互相访问彼此的设备以及修改文件。利用ROS多机通信一般有三个目的:一是进行远程监控,二是项目并行开发,三是分担主机的计算压力。我们将运行roscore节点的计算机称为主机,其他称为从机。考虑到网络通信质量问题,通常将主要节点运行在主机上,以保证节点之间通信流畅。

后者则是基于系统层面的通信,它可以访问对方计算机上几乎任何文件,操作也比较方便,唯一的不足之处在于SSH无法启动窗口服务的程序或进程,不适合做丰富的管理功能。当然这个问题也是可以解决的,对博主来说不是必要环节,不再详述。

温馨提示:对于ROS多机通信,修改/etc/hosts文件不是必要步骤,直接在~/.bashrc文件末尾添加export ROS_HOSTNAME=localhostIPexport ROS_MASTER_URI=http://hostIP:11311亦可。需要注意的是,ROS_HOSTNAME必须是本机的IP,ROS_MASTER_URI必须是运行roscore的主机IP。


参考文献

[1] https://blog.csdn.net/heyijia0327/article/details/42065293
[2] https://blog.csdn.net/heyijia0327/article/details/42080641
[3] RoboWare Studio 软件使用手册(http://www.roboware.me/#/home)
[4] https://blog.csdn.net/panpan_1994/article/details/52571494

  • 9
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值