# 设置 ROS 网络:WiFi + 以太网 **Repository Path**: mr7_jacky/setup-ros-network ## Basic Information - **Project Name**: 设置 ROS 网络:WiFi + 以太网 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 设置 ROS 网络:WiFi + 以太网 ## Reference [risc.readthedocs.io](https://risc.readthedocs.io/2-ros-network-wifi-ethernet.html) ## 介绍 在某些应用程序中,可能需要使用(不只一台计算机)而是通过以太网电缆连接多台计算机,然后将它们连接到远程 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 和地面控制站) 建立上述网络似乎是一项简单的任务。然而,它不像看起来那么容易。经过大量的试验和错误,我提出了一个可能的方法来建立这个网络。这可能不是最好的方法,但这个方法能够使用。还有一点注意:此处描述的网络过程并不特定于使用的硬件。在其他硬件上可以遵循相同的过程,以实现所需的功能。 ## 使用的硬件 * Jetson TX2 * Intel NUC * 笔记本电脑 * 以太网线 ## 使用的软件 所有设备均使用 Ubuntu 16.04 ## 功能需求 * 从两个网络 ping 任何设备到任一网络的任何其他设备。 * 在master端,查看所有其他 PC 上的主机上的 ROS Topic ## 网络示意图 ![pic1](src/network-2-pc.png) ## 设置网络 使用以太网电缆连接英特尔 NUC 和 Jetson TX2。确保两台电脑都打开。禁用 Jetson TX2 上的 WiFi。确保英特尔 NUC 已连接到 WiFi 路由器。尝试从英特尔 NUC ping Jetson TX2,反之亦然。它失败。若要使其正常工作,请按照以下步骤操作: #### 在英特尔 NUC 上 * 单击网络符号,然后单击编辑连接: ![pic2](src/nuc-1-1.png) * 单击"编辑连接"后,将显示以下屏幕。选择以太网连接,然后单击"编辑"。 ![pic2](src/nuc-1-2.png) * 单击"编辑"后,将显示一个窗口。转到 IPv4 设置选项卡(如下图所示) ![pic2](src/nuc-1-3.png) * 将方法从自动 (DHCP) 更改为共享到其他计算机,如下所示: ![pic2](src/nuc-1-4.png) * 单击"保存"。 * 要使步骤 5 中的更改生效,请单击下面显示的下拉菜单中的自动以太网(或任何称为以太网连接的以太网连接): ![pic2](src/nuc-1-5.png) * 若要验证是否已正确执行上述步骤,请显示连接信息(通过单击步骤 6 中显示的同一下拉菜单)。您应该会看到以下内容。IPv4 地址会自动设置为 10.42.0.1。 ![pic2](src/nuc-1-6.png) * 假设您已经配置了 WiFi 连接。请确保您已连接到 WiFi 路由器。在我的情况下,这是WiFi连接信息: ![pic2](src/nuc-1-7.png) * 将步骤 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](src/tx-1.png) #### 地面控制站 * 通过执行以下命令添加静态路由 ```bash sudo route add -net netmask 255.255.255.0 gw ``` * 在我的情况下,我运行以下命令: ```bash 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](src/routing-table.png) ## 有用的网络命令 ```bash 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. ``` ## ROS 通信 本节旨在建立跨两个网络(有线和 WiFi)的 ROS 通信,以便两个网络上的 PC 可以查看主机的 ROS topics #### 英特尔 NUC(ROS 主机) * 将以下export添加到您进行导出的任何地方(在我的情况下,它们位于文件`~/.bashrc`中) ```bash export ROS_MASTER_URI=http://10.42.0.1:11311 export ROS_IP=10.42.0.1 ``` ![pic5](src/nuc-2-1.png) 使用其他设备的主机名和 IP 地址编辑文件`/etc/hosts`。在我的情况下,我的其他两个设备:Jetson TX2的主机名`tegra-ubuntu`; 地面控制站的主机名为`risc-dell`。我的`/etc/hosts` 如下所示 ![pic5](src/nuc-2-2.png) ## Jetson TX2 ![pic6](src/tx-2-1.png) ![pic6](src/tx-2-2.png) ## 地面控制站 ![pic6](src/gcs-2-1.png) ![pic6](src/gcs-2-2.png) > 注意: 不要忘记在编辑你的 `.bashrc` 文件之后,使用`source`命令进行使其生效 若要验证 ROS 通信是否已建立,在 ROS 主机 (英特尔 NUC) 上运行任何内容,并查看它能否列出其他 PC 上的topics。例如,运行 ROS 摄像包,并尝试在其他设备上(Jetson TX2 和地面控制站)上通过 rviz 查看视频流。注意:目前,如果您在 Jetson TX2(不是 ROS 主站)上运行 ROS 包,您将能够查看地面控制站的主题,但无法查看其内容。 如果要从地面控制站启动文件,并且希望能够选择要运行此节点的计算机,请查看以下网址: [http://wiki.ros.org/roslaunch/XML/machine](http://wiki.ros.org/roslaunch/XML/machine)