欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ROS多机通信——有线连接及无线连接|主从机设置|远程控制(上)

程序员文章站 2022-05-01 18:31:19
...
  • 前言

因业务需要,需在本机电脑运行python代码(代码必须是基于ros环境开发的,并编译正确),来控制远程机器人(远程机器人也是基于ros系统进行运动控制)。中间涉及ros的多机通信(包括有线连接和无线连接两种方法)、ros主从机设置、ros远程控制。经过几天的实机操作,算是有所体会,分享出来希望能帮助到大家。有不准确的地方还请留言区指正。

  • ROS多机通信—有线及无线连接

  • 有线连接

1、用网线将本机与机器人连接

连上网线后,在有线网设置的地方点击“连接”

2、固定两台电脑的ip到同一个子网

这里可能有的人不知道什么叫一个子网,本人也非计算机专业,不过根据我的理解,就是ip的前三个数字相同。如:

本机:192.168.1.104

机器人:192.168.1.110

这两个ip仅仅最后一位不同。

那么怎么将两台电脑的ip改到一个子网了?本机电脑和机器人的系统都是ubuntu18.04,本机的ip设置方法如下图所示:

ROS多机通信——有线连接及无线连接|主从机设置|远程控制(上)

 

即把IPV4方式改为手动,将ip地址设置为:192.168.1.104

在机器人上的设置方法类似,将机器人的ip地址设置为:192.168.1.110

但是ip太长不好记,于是我们需要给ip取一个名字,这就是hostname,即建立ip与hostname的映射关系。

可能又有人不知道什么是hostname,什么是username,那么请看下图:

ROS多机通信——有线连接及无线连接|主从机设置|远程控制(上)

绿色字体中,@前面的是username,@后面的是hostname,即aaa@qq.com,本人电脑的两个名字相同,都是zoukun

*另外需要注意的是,这里给ip起的hostname是一个临时名字,用于连接使用。这个hostname可以与本机真实hostnane不同。

为了方便理解及后文表述,这里先给出我给两台电脑设置的有关参数。

电脑 username hostname ip 连接用hostname
本机(A) zoukun zoukun 192.168.1.104 ubuntu18-dell
机器人(B) nvidia tegra-nvidia 192.168.1.110 nvidia

 

 

 

 

 

*表中usernamehostname两列为电脑的固有参数。ip连接用hostname两列为连接前需要手动设置的参数。

3、在两台电脑的hosts文件中添加设置的两个ip及对应的hostname

执行该步骤就是建立ip连接用hostname之间的映射关系,这样就可以在后面的场合使用连接用hostname代替ip,进行连接及主从机设置。

修改hosts需要root权限,执行指令如下:

aaa@qq.com:~$ sudo gedit /etc/hosts
[sudo] zoukun 的密码:

输入sudo密码进入hosts文件编辑,将如下两行加入到hosts文件中,一般是第三行的位置,并保存退出:

192.168.1.104	ubuntu18-dell   #有线连接
192.168.1.110   nvidia          #有线连接

注意:两台电脑的hosts文件都需要加入这两行,机器人电脑上的操作同上。修改后需要重启电脑。

4、进行连接

执行如下代码:

ssh aaa@qq.com连接用hostname

这里username就是需要连接电脑的username,连接用hostname就是前面设置的需要连接电脑的连接用hostname

以本机(A)连接机器人(B)为例,执行代码如下:

ssh aaa@qq.com

输入aaa@qq.com的密码即可连接。

还可以通过ip进行连接,执行代码如:

ssh aaa@qq.com

本人电脑在连接时报错,获得root权限后重新连接可以成功连接(这里我还没有弄明白,希望有大佬指点),本人连接过程如下:

aaa@qq.com:~$ ssh aaa@qq.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:tTaCWm9lWj3jncBGtIjespWB*****************************.
Please contact your system administrator.
Add correct host key in /home/zoukun/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/zoukun/.ssh/known_hosts:4
  remove with:
  ssh-****** -f "/home/zoukun/.ssh/known_hosts" -R "nvidia"
ECDSA host key for nvidia has changed and you have requested strict checking.
Host key verification failed.
aaa@qq.com:~$ su
密码: 
aaa@qq.com:/home/zoukun# ssh aaa@qq.com
aaa@qq.com's password: 
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.9.140-tegra aarch64)
  • 无线连接

无线连接的步骤与有线连接类似,不同的地方在于ip的获取和设置。

1、将两台电脑连接到同一个局域网(子网)

方法有两种:将其中一台电脑设置为wifi发射器,另一台电脑进行连接;两台电脑同时连接到一个路由器(局域网)上。

2、获取两台电脑分配的ip,并进行ip固定

两台电脑连接到同一局域网后,通过ifconfig指令分别查看两台电脑分配的ip,并进行ip固定,方法同有线连接相同。

这里两台电脑被分配的ip如下:

本机:192.168.8.168

机器人:192.168.8.1

ip固定方法与有线连接相同,如下图在wifi设置中,修改IPV4方式手动,并设置ip地址为本机分配的ip,如下图所示:

ROS多机通信——有线连接及无线连接|主从机设置|远程控制(上)

无线连接模式下两台电脑设置的有关参数如下:

电脑 连接用hostname ip
本机(A) ubuntu18-wifi 192.168.8.168
机器人(B) nvidia-wifi 192.168.8.1

 

 

 

 

后面的步骤与有线连接相同。 最后别忘了重启。

其实进行这么多步的设置是为了后面的主从机设置及远程控制不出现bug。不然后面roscore启动不了,或者远程控制机器人没有响应找不到原因,多台电脑的各种ip及hostname设置起来让你生无可恋。

关于主从机设置、远程控制将在下一篇博文分享。由于本人接触ROS时间较短,有不对的地方还请评论区指正。

  • 其他注意事项

在不进行ROS通信时,需要将电脑的IPV4方式改回“自动”,不然电脑可能会无法联网。