当前位置:网站首页>ROS2知识(2):网络设施

ROS2知识(2):网络设施

2022-06-23 11:53:00 无水先生

一、准备 ROS 2之网络


        在上一篇文章中,我们看到了开始使用 ROS 之前需要的所有东西。但在我们继续实际安装 ROS 之前,我们需要确保我们的网络连接设置正确。

        当您考虑构建机器人时,能够通过网络交谈似乎是一个非常好的主意,因为它可以让我们做以下事情:

  • 远程控制我们的机器人
  • 拥有一起工作的机器人
  • 在多台机器之间拆分计算

        通常编写所有代码来执行此操作很痛苦,但如果我们使用 ROS,所有困难的事情都为我们完成了!我们需要做的就是确保我们的设备一起设置在网络上。

        这是准备使用 ROS 构建机器人的系列文章中的第二篇,我们将研究如何很好地设置我们的网络以避免出现问题。我们将介绍:

        作为示例,我将为我推荐的 ROS 开发环境设置网络,如果您想了解更多信息,请查看本系列的上一篇文章。

二、选择网络结构

​​​​​​
        我们可以通过多种不同的方式来构建我们的网络,具体的设置将取决于您的个人需求。我们需要网络配置提供一些关键功能:

在 Pi 和基站(以及任何其他设备)之间建立快速、可靠的连接以发送 ROS 消息
将两台机器连接到互联网以下载 ROS 包的相当简单的方法
对网络的一般控制(例如,能够设置静态 IP 地址)

牢记这些要求,我们将涵盖我们可以使用的三大类网络结构:现有网络、ad-hoc 网络和专用网络。

三、现有网络

设置网络的最简单方法是使用现有网络,例如您的家庭、学校或工作场所——您可能已经这样做了!通过 Wi-Fi 连接 Pi 和通过 Wi-Fi 或以太网连接的基站,两者应该能够相互通信并访问互联网。

对于很多人来说,这很好,你可以跳过这一步。但是,有必要注意您可能会遇到的一些问题:

  • 缺乏控制——根据具体情况,我们可能对网络几乎没有控制权。这可能会导致 DHCP/静态 IP 冲突、网络拥塞或丢失的困难。
  • 固定到一个位置 - 如果我们想重新定位我们的整个设置(例如,在另一个位置进行户外现场测试或演示),那么我们的机器人和基站将不再能够相互通信。
  • 潜在的 ROS 冲突 - 如果您在单个网络上有多个独立的 ROS 设置(例如在教室中),它们可能会相互冲突。 ROS 对此有自己的解决方案(见本文末尾),但在许多情况下,将它们保持在单独的网络上会更容易。

如果这些问题中的任何一个可能适用于您,您可能需要考虑以下两个选项之一。

四、Ad-Hoc网络

        设置我们网络的另一种方法是使用 ad-hoc 网络(或类似网络),它提供了更大的灵活性。在此配置下,我们将其中一个设备(通常是基站)配置为生成自己的 Wi-Fi 网络,并将另一个设置为自动连接到它。

为了访问互联网,我们在其中一个设备上使用第二个网络接口(以太网或第二个 Wi-Fi 卡),然后将该互联网连接共享给新创建的网络上的其他设备。通过使用这种方法,无论它们有什么外部连接,基站和机器人都可以保持相互连接,但也可以在可用时利用这些连接。

这种方法可以非常灵活,但也有一些缺点:

  • 需要更多的努力来配置
  • 如果您没有有线互联网接入,则需要第二张 Wi-Fi 卡(例如 USB Wi-Fi 加密狗)或更复杂的设置
  • 如果您有多个“基站”,就会变得困难

为了避免这些缺点,我们可以继续选择第三个选项,一个专用网络。

注意:我使用了术语“ad-hoc”,但根据我有限的经验,如果您将基站设置为“ap”(接入点)网络而不是 ad-hoc 网络,情况会更好,因为底层技术有效。这里要掌握的主要内容是概念,您需要为自己的网络找出最佳设置。

五、专用网络(DedicaNet)

        第三种(也是我更喜欢的)方法是建立一个专用网络。与 ad-hoc 方法一样,这里的棘手之处在于如何确保所有设备仍然具有互联网连接以及能够相互通信。解决这些问题的方便设备是旅行路由器。

        这些小型便携式路由器旨在通过一个网络(通过以太网、Wi-Fi 或 USB 网络共享)连接到互联网,并将该连接桥接到自己的网络(在以太网和 Wi-Fi 上)。

        通常,这个想法是,当您旅行时,不必在您拥有的每台设备上重新配置 Wi-Fi 和/或 VPN,无论您走到哪里,您只需将您的设备连接到旅行路由器一次。在您旅行时,您只需将路由器连接到您可以访问的任何网络,您的所有设备都将连接互联网。

        不难看出这与我们的机器人场景有多么相似——我们希望我们的机器人、基站和任何其他相关设备在他们自己的小网络上,并且可以选择从外部源桥接互联网访问。

        确切的配置将取决于您的硬件和需求,但一个可能的示例如下图所示。旅行路由器通过 Wi-Fi 接收互联网连接,并通过 Wi-Fi 和以太网将其桥接到自己的网络。机器人可以通过 Wi-Fi 连接,基站可以通过以太网连接,同时还可以为路由器提供 USB 电源(如果硬件允许)。如果需要,这也会使基站上的任何其他网络适配器(例如 Wi-Fi)连接到其他网络

作为一款小型便携式路由器,这些旅行路由器的性能不会与传统路由器完全相同,因此如果这成为问题,您可能需要升级到更大的壁挂式路由器。另一个明显的缺点是购买一个会花费你一些额外的费用,而且它是另一种需要跟踪的设备。某些手机​​还具有充当 Wi-Fi 中继器的能力并且可以被替代,但是在这一点上,ad-hoc 网络可能是一种更直接的方法。

六、使用 Netplan 配置网络设置

        现在我们已经决定了我们的网络结构,我们需要在每个设备上配置网络设置。最明显的方法是使用右上角的网络管理器设置并跳过此部分,但是还有一种使用内置工具 netplan 的替代方法(在许多情况下更好)。

 6.1 什么是 Netplan?

        Netplan 允许您通过编写配置文件来配置网络,该配置文件(与使用 GUI 相比)更容易在终端中更改、备份或在计算机之间共享。 Netplan 实际上并不处理任何网络,它只需要一些简单、通用格式的配置文件,并将其转换为特定操作系统所需的任何内容。

        下面的说明将涵盖我如何使用 netplan 设置我的机器的示例,您可能需要针对您的特定网络做一些不同的事情。确切的文件内容不仅取决于您选择的网络结构,还取决于您的个人硬件(我使用的是 GL.iNet Mango 路由器,已经配置为使用默认设置重复我的家庭互联网)。

6.2 确定您的设置

      在我们编写配置文件之前,我们需要弄清楚我们想要设置(或不设置)哪些设置。这通常包括:

  • 网络接口名称(这是 Linux 用来识别连接的名称)
  • DHCP 开/关
  • IP 地址和子网
  • 网关
  • DNS 服务器(又名名称服务器)
  • Wi-Fi SSID 和密码(用于无线网络)

要找到我们的网络接口的名称,我们需要在终端中输入命令 ip addr ,我们应该得到如下内容:

这看起来很混乱,但我们唯一关心的是左侧数字右侧的单词。在这种情况下,我们有 lo、eth0 和 wlan0。通常,以太网端口以 e 开头,Wi-Fi 卡以 w 开头。如果您已经连接,您还应该在下面的单词 inet 旁边看到您当前的 IP 地址。

您需要自己弄清楚其余设置 - 例如,我已经知道路由器 IP 地址(网关和名称服务器),我选择了我知道在此路由器的 DHCP 范围之外的静态 IP 地址,以及路由器的SSID 和密码(但可能不应该!)保留为默认值。

6.3 Writing the config file

        现在我们已经决定了我们想要的设置,我们可以编写配置文件。 Netplan 通常会在 /etc/netplan/ 中查找其配置文件,干净的 Ubuntu 安装应该已经有一个几乎为空的文件,名为 01-network-manager-all.yaml。如果我们愿意,我们可以编辑这个文件,但创建第二个文件会更干净。您几乎可以将其命名为任何您喜欢的名称,但 02-my-network-config.yaml 非常简单。

        创建此文件需要 root 访问权限,因此您可以在任何您喜欢的位置创建它并使用 sudo cp 复制它,或者直接使用 root 创建它。例如,要使用 pluma 文本编辑器创建它,您需要运行 sudo pluma /etc/netplan/02-my-network-config.yaml。

请注意,Netplan 将按字典顺序(按字母顺序)处理配置文件,因此具有“较晚”名称的文件可以覆盖具有“较早”名称的文件中的项目。

下面显示的是我的两台机器(Pi 和基站)的配置文件的内容。希望这些示例足以让您用作模板,但如果您遇到困难或需要更复杂的内容,请尝试查看本教程或 Netplan 文档。

圆周率:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
network:
  version: 2
  renderer: NetworkManager
  
  wifis:
    wlan0:
      dhcp4: no
      addresses: [192.168.8.51/24]
      gateway4: 192.168.8.1
      nameservers:
        addresses: [192.168.8.1]
      access-points:
        "GL-MT300N-V2-672":
          password: "goodlife"

Base station/Dev machine:

1
2
3
4
5
6
7
8
9
10
11
network:
  version: 2
  renderer: NetworkManager
  
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.8.50/24]
      gateway4: 192.168.8.1
      nameservers:
        addresses: [192.168.8.1]

6.4 激活更改
 

填充配置文件后,运行以下两个命令来处理文件,然后应用设置。

1
2
sudo netplan generate
sudo netplan apply

如果一切按计划进行,您的网络应该已启动并运行!尝试检查 IP 地址是否正确(使用 ip addr),然后 ping 网络上的其他设备。

七、建立远程接入Setting up remote access

        现在你可能已经将屏幕、键盘和鼠标连接到你的 Pi 上,但是一旦 Pi 卡在机器人内,这通常是不实用的。为了解决这个问题,我们需要设置远程访问。我还建议在基站上设置它,因为你永远不知道它什么时候会派上用场。 要设置的最重要的远程访问形式是 SSH。 SSH(或安全外壳)提供了一个远程终端,这样我们就可以在另一台机器上运行命令,而无需附加屏幕。大多数情况下,我们将使用它来访问 Pi,因为我们只需要启动一个 ROS 节点或启动一个脚本。 除了远程终端之外,还有许多其他工具和功能可以利用 SSH 连接,例如:

  • Secure Copy 或 scp,一种用于在机器之间传输文件的简单工具(示例)

  • X 转发,让图形应用程序远程运行

  • VS Code 远程开发,让您可以像在本地计算机上一样通过 SSH 打开工作区

我们只需运行 sudo apt install openssh-server 即可安装 ssh。完成后,切换到开发机器,打开终端,然后运行 ​​ssh [email protected]_ip_address(适当地替换名称和 IP 地址)。在访问提示输入“是”并输入密码后,您将可以远程完全访问终端。恭喜,现在您可以拔下屏幕、键盘和鼠标了!

请注意,我们可以设置许多其他远程访问方法,以便更轻松地执行文件传输或运行图形程序等操作。这超出了本教程的范围,但是关于此主题的单独帖子正在编写中,一旦完成,我将在此处包含一个链接。

八、ROS 特定的网络设置

​​
        使用 ROS 1 时,需要设置一些额外的环境变量,以使 ROS 计算机能够通过网络相互看到。 ROS 2 的好处是它开箱即用,无需额外的网络配置!唯一需要担心的是,如果您尝试在单个网络上运行多个单独的“ROS 网络”(例如,您正在与所有学生在一个公共 LAN 上教授学校课程,但您需要它们中的每一个拥有自己的“私有 ROS 网络”)。在这种情况下,您需要为每个网络设置一个唯一的 ROS_DOMAIN_ID。

        虽然通过完全独立的网络来避免这种麻烦可能会更好,但这种方法的一个优点是教师可以调整他们机器上的域 ID,以帮助当时需要帮助的任何学生,或部署车队的开发人员公共网络上的独立系统可以切换他们想要监控的系统。

        如果这适用于您的情况,请查看此链接以获取更多信息。

参考文

原网站

版权声明
本文为[无水先生]所创,转载请带上原文链接,感谢
https://blog.csdn.net/gongdiwudu/article/details/125110931