4为机器人准备无头Raspberry Pi

本章将介绍以下内容:

  • 什么是无头系统,为什么它对机器人有用?
  • 在Raspberry Pi上设置Wi-Fi并启用SSH
  • 在网络上找到你的Raspberry Pi
  • 连接Raspberry Pi
  • 配置Raspberry Pi操作系统

要求:一台 Raspberry Pi,最好是 3A+(但 Pi3或4也可以)

4.1 什么是无头系统,为什么它对机器人有用?

无头系统是指在键盘、屏幕和鼠标访问设备不方便的时间或地点,可以通过网络从另一台计算机上操作的计算机。无头访问可用于服务器系统、制造机器人和小工具:


与屏幕、键盘和鼠标连接的 Raspberry Pi

上图展示了一个有头的系统,用户可以坐在设备前面。您需要在机器人上安装屏幕、键盘和鼠标,因此移动性较差。您可以根据需要安装/拆卸它们,但这样做也很不方便。有一些便携式系统可以与Raspberry Pis像这样对接,但当机器人移动时,您需要断开连接或与机器人一起移动。

我曾看到过带有微型板载屏幕、由无线键盘和鼠标控制的机器人。不过,在本书中,我们将机器人作为无头设备使用:


机器人上的Raspberry Pi采用无头配置

上图中的 Raspberry Pi作为无头设备安装在机器人上。这台Raspberry Pi没有屏幕和键盘的束缚;这些都由另一台计算机来处理。代码、指令和信息通过无线网络从笔记本电脑发送到 Raspberry Pi,再从 Raspberry Pi发送出去。许多代码示例都是自主运行的,计算机可以启动/停止这些示例。手机可以启动和停止自主行为,查看机器人的状态,或者直接驱动机器人,完全不需要连接笔记本电脑。这个 Raspberry Pi没有屏幕和键盘。

虽然您通常不需要屏幕和键盘,但还是值得准备一下,以防与 Raspberry Pi失去联系时,它拒绝通过网络做出响应。这时,您可以使用屏幕和键盘与它连接,查看发生了什么。

对于无头访问Raspberry Pi,我们将使用Secure Shell(SSH)。SSH提供了向Pi发送指令的命令行,以及向 Pi 传输文件的文件传输系统。

让Pi成为无头机器人可以让它自由行动。它无需携带屏幕和键盘,也无需为其供电,从而保持了机器人的轻便。由于显示器和键盘非常笨重,因此无头设计使机器人更小巧。它还能鼓励制造者思考机器人的自主行为,因为你不能总是向机器人输入命令。

4.2 在Raspberry Pi上设置Wi-Fi并启用SSH

现在你已经看到了无头系统的功能,让我们来修改SD卡,使 Raspberry Pi启动后即可作为无头设备使用。我们需要先设置 Wi-Fi:

并创建文件:

  • ssh: 没有扩展名的空文件。
  • wpa_supplicant.conf: 该文件包含 Wi-Fi 网络配置,如图所示:
country=CNupdate_config=1ctrl_interface=/var/run/wpa_supplicantnetwork={ssid=""psk=""}

让我们逐行查看该文件:

第一行必须指定ISO/IEC alpha2国家代码。您可以在 https://datahub.io/core/country-list 找到适合您所在位置的国家代码。如果没有,Raspberry Pi OS 将禁用Wi-Fi适配器。

接下来的两行允许其他工具更新配置。

文件的最后四行定义了机器人和 Raspberry Pi 将连接的 Wi-Fi网络。请使用您自己的网络详细信息,而不要使用此处的占位符。预共享密钥(PSK)也称为 Wi-Fi 密码。这些信息应与您将笔记本电脑或手机连接到Wi-Fi网络时使用的信息相同。我建议在电脑上保留一份 wpa_supplicant.conf 文件副本,以便在其他 Raspberry Pi SD 卡上使用。

4.3 在网络上找到你的 Pi

假设您的SSID和PSK正确无误,您的 Raspberry Pi现在已经在Wi-Fi网络上注册。不过,现在你需要找到它。Raspberry Pi使用动态地址(DHCP)。每次将它连接到网络时,它都可能获得不同的地址。访问Wi-Fi路由器的管理页面并记下IP地址在短期内有效。但每次更改地址时都这样做会令人沮丧,而且在某些情况下可能无法使用。

幸运的是,Raspberry Pi使用了一种名为mDNS(多播域名系统)的技术,因此附近的电脑都能找到它。客户端计算机会广播一条本地消息,询问是否有名称为 raspberrypi.local 的设备,Raspberry Pi会回复地址,以便找到它。这也被称为Zeroconf和Bonjour。因此,你需要做的第一件事就是确保你的电脑能做到这一点。

如果你使用的是 macOS,那么你的电脑已经在运行Bonjour软件,它已经具备mDNS功能。此外Ubuntu和Fedora桌面版本也早已兼容 mDNS。在其他 Linux 桌面上,你需要找到它们的Zeroconf或 Avahi说明。许多最新的 Linux桌面都默认启用了这一功能。

但如果你使用的是Windows,则需要使用Bonjour软件。下面我们就来看看如何设置。

参考资料

  • 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
  • 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
  • python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
  • Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
  • Raspberry Pi(树莓派4B)4轻松入门(上)-安装 https://www.cnblogs.com/testing-/p/17604049.html
  • Raspberry Pi 基金会安装 Raspberry Pi 操作系统指南:https://www.raspberrypi.org/documentation/installation/installing-images/README.md。
  • 《Raspberry Pi By Example》,Ashwin Pajankar和Arush Kakkar,Packt Publishing,其中有一节介绍Raspberry Pi的替代操作系统,以及许多令人兴奋的 Raspberry Pi项目。
  • Raspberry Pi GPIO 引脚输出 (https://pinout.xyz/): 它介绍了不同电路板与Raspberry Pi的实际引脚连接方式。

4.3.1 为Microsoft Windows设置Bonjour

如果你安装了最新版本的Skype或iTunes,你就会拥有这款软件。你可以使用本指南检查它是否已经存在并启用它:https://smallbusiness.chron.com/enable-bonjour-65245.html。

你可以在命令提示符中使用以下命令来检查它是否已经运行:

C:\Users\danny>ping raspberrypi.local

如果你看到这个,说明你已经安装了 Bonjour:

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=1 ttl=64 time=0.113 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=2 ttl=64 time=0.079 ms

如果你看到这个,你需要安装它:

Ping request could not find host raspberrypi.local. Please check the name and try again.

为此,请浏览 Apple Bonjour For Windows 网站 https://support.apple.com/downloads/bonjour_for_windows 并下载,然后安装 Download Bonjour Print Services for Windows。运行该程序后,Windows 就能按名称查询 mDNS 设备了。

4.3.2 测试设置

Raspberry Pi的绿灯应该已经停止闪烁,只能看到红色的电源指示灯。这表明Pi已完成启动并连接到网络。

如果一切顺利,电脑将显示已连接到 Pi:

$ ping raspberrypi.localPING raspberrypi.local (192.168.0.53) 56(84) bytes of data.64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=1 ttl=64 time=0.113 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=2 ttl=64 time=0.079 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=3 ttl=64 time=0.060 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=4 ttl=64 time=0.047 ms

4.3.3 故障排除

如果 Raspberry Pi 似乎没有响应ping操作,你可以采取以下步骤尝试诊断和补救。尝试以下步骤:

  • 仔细检查连接。你应该看到绿灯闪烁几下,红灯持续亮起。如果没有,请拔下电源插头,确保 SD 卡插稳,然后再试一次。
  • 在启动Raspberry Pi时使用Wi-Fi 接入点设置,看看它是否在那里获取了IP地址。
  • 如果您在Wi-Fi路由器上找到Raspberry Pi,这可能意味着mDNS没有在您的计算机上正确运行。如果尚未安装,请重新安装。在 Windows 上,不同版本的 Bonjour 打印服务、Skype Bonjour 和 iTunes Bonjour 如果安装在一起可能会发生冲突。请使用 Windows 的添加/删除功能查看是否有多个版本,并删除所有 Bonjour 实例,然后重新安装官方版本。
  • 接下来,关闭电源,取出 SD 卡,将其放回电脑,仔细检查wpa_supplicant.conf文件是否存在,并确保 Wi-Fi 详情和国家代码正确无误。该文件中最常见的错误如下:a) Wi-Fi 详情不正确; b) 缺少引号或缺少/不正确的标点符号;c)国家代码错误或缺失;d)关键字大小写错误(关键字应小写,国家代码应大写)
  • 当 Raspberry Pi 启动时,SSH 文件会被删除。如果你确定它存在并已被移除,这意味着 Pi 确实启动了。
  • 最后,您可能需要在连接屏幕和键盘的情况下启动Pi,并尝试诊断问题。显示屏会告诉您wpa_supplicant.conf是否存在其他问题或其他问题。使用屏幕文本并在网上搜索答案。我无法在此重现所有这些问题,因为这里可能出现多种问题。我还建议使用 #raspberrypi 标签在 Twitter、Stack Overflow 或 Raspberry Pi 论坛(https://www.raspberrypi.org/forums/)上提问。

我们现在已经验证了 Pi 与网络的连接,并一路排除了各种问题。我们可以通过
ping 找到它。现在我们知道它就在那里,让我们连接到它。

4.4 使用PuTTY或SSH连接Raspberry Pi

windows推荐:MobaXterm或git bash, Linux和MacOS可直接使用bash,Linux的PAC也挺不错。下面以跨平台但是不太好用的PuTTY为例:

如果您已经使用SSH客户端,请注意并非所有Windows命令行SSH客户端都支持mDNS。

PuTTY 是访问 SSH 的便捷工具,适用于 Windows、Linux 和 Mac。这些操作系统的安装信息可在 https://www.ssh.com/ssh/putty/上找到。

从上述链接安装好PuTTY后,让我们将它连接到 Raspberry Pi。继续
启动 PuTTY。你会看到如图的界面。在 “主机名(或 IP 地址)”框中输入 raspberrypi.local,然后点击 “打开 “登录到你的 Pi:

第一次执行此操作时,PuTTY 会显示安全警告,要求你添加 Pi 的密钥(如果你信任它)。单击 “是”;只有当另一个具有相同主机名的设备(例如新的 Raspberry Pi)使用不同的密钥出现时,PuTTY 才会再次询问你。当你看到 “Login as”提示时,输入pi,按Enter,并使用密码raspberry。现在你将看到类似下图的内容,表明你已连接到 Pi:

4.5 配置Raspberry Pi操作系统

我们可以使用raspi-config工具来完成许多这些任务,它是一个菜单系统,用于在 Raspberry Pi OS 上执行配置任务。

sudo raspi-config

4.5.1 重新命名你的 Pi

在raspi-config中选择Network Options(网络选项)-> Hostname(主机名):

4.5.2 更改用户密码

在raspi-config顶部菜单中选择”更改用户密码”:

4.5.3 重启并重新连接

使用Tab按钮转到”完成”项,然后按 Enter:

下一个屏幕会询问您是否要重启Pi。选择是并按回车键:

Raspberry Pi将开始重置,在重置过程中,PuTTY会话将被断开。等待几分钟,Pi上的绿色活动指示灯会闪烁一下,然后稳定下来。PuTTY会告诉你已经失去了与它的连接。此时 Pi已关闭。红灯将一直亮着,直到你拔掉电源:

4.5.4 更新 Raspberry Pi 上的软件

$ sudo apt update – y && sudo apt upgrade -y

4.5.5 关闭树莓派

sudo poweroff

等待绿灯活动停止;PuTTY会检测到它已断开连接。现在可以安全断开电源了。

在不预期的情况下拔掉Raspberry Pi的电源可能会导致文件丢失和 SD卡损坏。您可能会丢失工作并损坏 SD 卡。请务必使用正确的关机程序。

钉钉或微信号: pythontesting 微信公众号:pythontesting