ROS多网络设备通信部署

任务动机:实现ROS基于多网络设备通信部署,完成多块边缘计算ROS开发板使用WIFI和以太网的方式与导航板的ROS通信。

任务描述:根据原英文文档,部署ROS基于多网络设备通信,测试验证后形成文档。

原英文文档:https://risc.readthedocs.io/2-ros-network-wifi-ethernet.html

1. 前言

        在某些应用程序中,可能需要使用(不只一台计算机)而是通过以太网电缆连接多台计算机,然后将它们连接到远程 WiFi 路由器。这种情况出现在 ERL 2019 比赛期间。我想通过以太网线连接两台在无人机上的计算机,并且我希望能够通过 WiFi 与板载计算机进行通信交流。

        为什么我需要两台电脑?一台计算机 Jetson TX2 更加擅长object detection,因为它有 GPU,GPU 使得它大大提高了用于object detection的神经网络的速度。另一台计算机,英特尔NUC,可以和RealSense camera更好的搭配,这是官方支持的用于PX4避障ROS包的相机。由此我们可以在无人机上配备在两个领域最好的计算机。这需要设置网络。请注意,这两台计算机位于无人机上,因此在它们之间建立有线网络以确保连接的稳定性是有意义的,这就是使用以太网电缆的原因。

        为了与地面控制站(笔记本电脑)的板载计算机通信,我们使用了 WiFi 路由器。最好能够将从两个网络 ping 任何设备到任一网络的任何其他设备。在master端(在我的情况下,英特尔 NUC),查看所有其他 PC 上的主机上的 ROS Topic(Jetson TX2 和地面控制站)

        建立上述网络似乎是一项简单的任务。然而,它不像看起来那么容易。经过大量的试验和错误,我提出了一个可能的方法来建立这个网络。这可能不是最好的方法,但这个方法能够使用。还有一点注意:此处描述的网络过程并不特定于使用的硬件。在其他硬件上可以遵循相同的过程,以实现所需的功能。

2. 使用的硬件

  • Jetson TX2
  • Intel NUC
  • 笔记本电脑
  • 以太网线

3. 使用的软件

        所有设备均使用 Ubuntu 16.04

4. 功能需求

  • 从两个网络 ping 任何设备到任一网络的任何其他设备。
  • 在master端,查看所有其他 PC 上的主机上的 ROS Topic

4.1 网络示意图

pic1

4.2 设置网络

        使用以太网电缆连接英特尔 NUC 和 Jetson TX2。确保两台电脑都打开。禁用 Jetson TX2 上的 WiFi。确保英特尔 NUC 已连接到 WiFi 路由器。尝试从英特尔 NUC ping Jetson TX2,反之亦然。它失败。若要使其正常工作,请按照以下步骤操作:

        在英特尔 NUC 上

  • 单击网络符号,然后单击编辑连接:

pic2

  • 单击"编辑连接"后,将显示以下屏幕。选择以太网连接,然后单击"编辑"。

pic2

  • 单击"编辑"后,将显示一个窗口。转到 IPv4 设置选项卡(如下图所示)

pic2

  • 将方法从自动 (DHCP) 更改为共享到其他计算机,如下所示:

pic2

  • 单击"保存"。
  • 要使步骤 5 中的更改生效,请单击下面显示的下拉菜单中的自动以太网(或任何称为以太网连接的以太网连接):

pic2

  • 若要验证是否已正确执行上述步骤,请显示连接信息(通过单击步骤 6 中显示的同一下拉菜单)。您应该会看到以下内容。IPv4 地址会自动设置为 10.42.0.1。

pic2

  • 假设您已经配置了 WiFi 连接。请确保您已连接到 WiFi 路由器。在我的情况下,这是WiFi连接信息:

pic2

  • 将步骤 7 和 8 中的屏幕截图与前面显示的网络图进行比较,以便更好地了解正在了解的是当前的屏幕截图。
  • 启用 IPv4 Forwarding:
    • 在 /etc/sysctl.conf 文件中, 取消注释(或添加)net.ipv4.ip_forward=1
    • 或者在terminal中运行此命令行 sudo sysctl -w net.ipv4.ip_forward=1
    • 你可以使用文本编辑器打开 /etc/sysctl.conf 以此来确认更改已生效

        在 Jetson TX2 上

        按照英特尔 NUC 的类似步骤,将以太网连接 IPv4 设置为自动 (DHCP)。验证您是否通过从英特尔 NUC 端 ping Jetson TX2 端以及相反的方式成功。此外,如果您的WiFi路由器连接到互联网,那么你也将能够从Jetson TX2访问互联网。请参阅下面的屏幕截图:

pic3

地面控制站

  • 通过执行以下命令添加静态路由
sudo route add -net <inster_ip_of_wired_network> netmask 255.255.255.0 gw <inster_ip_of_wireless_port_of_Intel-NUC_or_similar>

例如,运行以下命令:

sudo route add -net 10.42.0.0 netmask 255.255.255.0 gw 192.168.0.131
  • 从 Jetson TX2 和 Intel NUC 端 Ping 地面控制站, 以验证一切是否正常

注意: 添加静态路由不是永久性更改。每次重新启动时,必须重新设置

        下图显示了地面控制站上的 routing table。查看第二个条目。这是按照步骤 1 添加的。该命令可用于验证是否已正确添加静态路由。route -n

pic4

4.3 设置网络有用的网络命令

ifconfig #shows network interfaces on device
nmap -sP 192.168.0.0/24 #shows all other devices on the network 192.168.0.0/24
nmap -sn 192.168.0.0/24 #same as above but does not do a port scan
sudo apt-get install nmap #installs network scanner nmap
arp -a #if you don’t want to install nmap, but from my experience arp -a does not always show all devices. On the other hand, nmap usually does.

5. ROS 通信

        本节旨在建立跨两个网络(有线和 WiFi)的 ROS 通信,以便两个网络上的 PC 可以查看主机的 ROS topics

        英特尔 NUC(ROS 主机)

  • 将以下export添加到您进行导出的任何地方(在我的情况下,它们位于文件~/.bashrc中)
export ROS_MASTER_URI=http://10.42.0.1:11311
export ROS_IP=10.42.0.1

pic5

        使用其他设备的主机名和 IP 地址编辑文件/etc/hosts。在我的情况下,我的其他两个设备:Jetson TX2的主机名tegra-ubuntu; NUC主机名为risc-dell。我的/etc/hosts 如下所示

pic5

5.1 Jetson TX2

pic6

pic6

5.2 NUC主机

pic6

pic6

注意: 不要忘记在编辑你的 .bashrc 文件之后,使用source命令进行使其生效

        若要验证 ROS 通信是否已建立,在 ROS 主机 (英特尔 NUC) 上运行任何内容,并查看它能否列出其他 PC 上的topics。例如,运行 ROS 摄像包,并尝试在其他设备上(Jetson TX2 和地面控制站)上通过 rviz 查看视频流。注意:目前,如果您在 Jetson TX2(不是 ROS 主站)上运行 ROS 包,您将能够查看地面控制站的主题,但无法查看其内容。

        如果要从地面控制站启动文件,并且希望能够选择要运行此节点的计算机,请查看以下网址:

http://wiki.ros.org/roslaunch/XML/machine

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值