把树莓派变成无头机器人大脑 — 系统、Wi-Fi 与 SSH¶
这一章讲什么: 怎么把 Raspberry Pi 从「一台需要插满线才能用的小电脑」 变成「装在机器人身上、通过网络远程操作的控制器」——这叫无头(headless)配置。 具体动作:用 Raspberry Pi Imager 把系统烧进 SD 卡、烧写时顺手配好 Wi-Fi 和 SSH、 开机后用
ping找到它、用ssh登录它、用apt更新它、用sudo poweroff安全关掉它。 这一章没有机器人代码,但后面每一章都从「SSH 连上机器人」开始。
1. 先看现象:机器人不可能拖着键盘跑¶
先想象一个滑稽场面:你的机器人好不容易装好了,你想让它往前走一步, 得跟着它跑、手里举着一把接线的键盘——这就是「有头」操作的极限1。
书里管解决这个问题的方案叫无头系统(headless system):一台设计成由另一台电脑通过网络操作的计算机2。 屏幕、键盘、鼠标这些「头」不属于机器人,留在你的电脑上;机器人身上只有主机、电池和天线。 代码、指令、数据全部通过无线网络在两边来回,很多程序是远程启动、远程停止的3。
作者点了一个更深的好处,值得记住:无头化逼你想清楚「自主行为」这件事—— 因为机器人跑起来之后,你根本来不及敲命令,它必须自己会做决定4。 另外它还顺手减重省电(不用给屏幕键盘供电),机器人因此更自由。
本章主线例子,就跟着作者的手把手流程走一遍:把一张空 SD 卡变成一台能 ssh 登录的
机器人大脑,每一步旁边给出你会看到的真实输出。
2. 顶层全景:四步流水线¶
① 选系统 Raspberry Pi OS(64 位,桌面版)——为什么不用 Lite 版,第 3 节讲
② 烧卡预置 Imager 烧写 + 预设:主机名、用户名密码、Wi-Fi、SSH 密钥
③ 找机器 绿灯不闪 = 启动完毕;ping <主机名>.local 用 mDNS 找到它的地址
④ 远程上手 ssh 登录 → apt 更新 → (以后每章从这里开始)→ sudo poweroff 安全关机
图说:一次性配置(①②)做完,③④就是你和机器人之间以后的日常。
3. 核心原理之一:Raspberry Pi OS 是什么,选哪个版本¶
Raspberry Pi OS 是 Raspberry Pi 的操作系统;往下一层说, 操作系统是垫在裸硬件上面、提供「要内存」「用硬件服务」这类工具的一层软件; 在操作系统之上还叠着一个发行版(distribution),提供文件访问、网络工具、 界面或命令这些日常工具5。
Raspberry Pi OS 两者皆是:它是 Debian Linux 发行版的一个变体,为 Pi 的硬件做了优化6。 选它的理由书里给了三条,都很实际:
- Linux 对 Python 的支持强,网络工具齐全——这正是机器人要的;
- 社区用量大,出问题时最容易搜到答案;
- 配置 Pi 专用功能(摄像头、接口开关等)有顺手的办法6。
版本怎么挑?桌面版自带一大堆软件(包括 VNC——远程桌面,能让你从电脑上看到 Pi 的图形桌面); Lite 版省 SD 卡空间,但精简的装备会让摄像头、声音这类多媒体系统更难配—— 所以本书用默认的桌面版7。注意不管装哪个,这本书只需要它的命令行, VNC 只是救急用的备胎。
烧卡之前还有一个小准备:在电脑上运行 ssh-keygen 生成一对 SSH 密钥——
这是你将来免密码登录机器人的「钥匙」,一对钥匙分公钥(存进 Pi)和私钥(留在你电脑上),
第 4 节讲它们怎么配合8。
4. 核心原理之二:烧卡即预置——把配置做在第一次开机之前¶
烧 SD 卡用官方工具 Raspberry Pi Imager(raspberrypi.org/software 下载)9。 流程是:选系统(选 Raspberry Pi OS 64-bit,注意别碰 CHOOSE DEVICE 过滤)、 选存储卡、然后点 NEXT——真正的玄机在 NEXT 之后弹出的 「OS customisation(系统定制)」对话框10。它有三个标签页,照原书的顺序接住:
GENERAL 页(通用设置),填五样:
| 设置项 | 填什么 | 为什么 |
|---|---|---|
| Set hostname(主机名) | 作者填 learnrob3,会自动带 .local 后缀 |
以后找它就喊这个名字,不用记 IP |
| Username and password | 作者的用户名是 danny |
登录身份;写下来,后面要用 |
| Configure wireless LAN | 你的 Wi-Fi 名字(SSID)和密码 | 机器人靠它上网 |
| Wireless LAN country | 国家代码 | 不填 Wi-Fi 可能根本不工作 |
| Locale settings | 时区、键盘布局 | 日志时间才对 |
SERVICES 页(服务),两勾:
- Enable SSH——勾上,Pi 开机就带远程登录;
- Allow public-key authentication only(只允许公钥认证)——勾上后,Imager 会把
你电脑上
ssh-keygen生成的公钥写进卡里的授权名单。这一勾是免密码登录的关键, 也同时把「猜密码破门」这条路堵死了:没有私钥的人,连输密码的机会都没有11。
OPTIONS 页有些锦上添花的选项,非必需。最后 SAVE → YES 确认 → YES 写入, 等它写完,卡就 Ready 了10。
机制讲透:公钥认证到底省了什么¶
这是本节真正值得带走的东西。平时登录远程机器要输密码:密码每次过网络, 有被看到的窗口,也有人能一遍遍试。公钥认证换成一对数学上配对的钥匙:
你的电脑 树莓派
┌──────────────┐ ┌──────────────────┐
│ 私钥(绝不出门) │ ── 证明身份 ─▶ │ 公钥(烧卡时预置) │
│ 每次连接用它签名 │ │ 只验签,永远不需要 │
└──────────────┘ │ 把私钥传来 │
└──────────────────┘
图说:私钥只用来「签个名」,公钥只用来「验这个签」;密码从头到尾没过网络。
书里把话说得很白:选了公钥认证,你就能免密码安全地从电脑访问 Pi; 如果授权框是空的,点 RUN SSH-KEYGEN 现做一把11。
5. 核心原理之三:开机、认灯、找机器¶
卡插进 Pi 背面的卡槽(方向唯一,别硬来),通电,灯开始闪。 怎么看懂灯语:绿灯停止闪烁、只剩红色电源灯,说明 Pi 启动完毕、已连上网络12。 第一条安全警告也在这里:通电状态下不要插拔 SD 卡13。
接下来的问题:怎么找到它?这里有个网络常识要先补: Wi-Fi 用的是动态地址(DHCP,动态主机配置协议)——Pi 每次连网, 路由器可能分给它一个不同的 IP 地址。去路由器管理页抄地址短期可行, 但地址一变就得重抄,烦,而且有些场合你连路由器页面都打不开14。
Pi 的解法是 mDNS(组播域名系统;也叫 Zeroconf、Bonjour):
你的电脑在本地网络里广播一句「谁是 learnrob3.local?」,
Pi 应声报出自己的地址。近几年的 macOS、Windows、Linux 桌面都内置了它15。
验证方法一句话:ping learnrob3.local(ping 像打乒乓球:你发一个消息,
对方收到就回一个)16。作者的真实输出长这样16:
PING learnrob3.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 ms
图说:机器在 0.113 毫秒处回了话——名字解析成功、网络通畅、Pi 就在网上了。
回到主线例子:卡插上之后,每一步你眼前看到什么¶
通电 红、绿灯齐闪(正在启动)
等 ~1 分钟 绿灯停下,只剩红灯(启动完毕,已连网)
ping PING learnrob3.local (192.168.0.53) ... time=0.113 ms ← 找到了
ssh danny@learnrob3:~ $ ← 已经站在机器人的系统里
df -h /dev/mmcblk0p2 29G 1.6G 26G 6% / ← 卡用了 6%,系统活着
6. 核心原理之四:SSH——你在机器人的系统里,但人不在它面前¶
连上去只要一条命令:ssh <用户名>@<主机名>.local,例如 ssh danny@learnrob3.local17。
第一次连,它会给你看 Pi 的「主机指纹」,问你是否信任——输 yes;
这个指纹是这台 Pi 独有的身份,以后若换机或重装系统再连,
可能撞见 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 的警告,
那是你电脑在提醒你「对面这台和记忆里不是同一个」——按书里说的,
去 ~/.ssh/known_hosts 删掉旧那行再来17。
登录成功的标志是提示符变成 <用户名>@<主机名>:<路径> $,
比如 danny@learnrob3:~ $——从这个提示符起的每一行命令,都是在机器人的系统里执行的17。
书里让你马上试一条:df -h。
df 是 disk free(磁盘空闲)的缩写,-h 是 human-readable——
用 G、M、K 后缀显示,人看得懂18。它的输出里 /dev/mmcblk0p2 那一行
就是 SD 卡的系统分区:作者那台 29 GB 卡里用了 1.6 GB、剩 26 GB、用了 6%18。
这条命令顺带完成了一件事:证明 SSH 通道双向畅通——你在自己的电脑上,
读到了机器人的磁盘状态。
连不上怎么办?书里的排错顺序很教学化,值得当套路背:
- 多等一分钟再 ping——首次启动有时就是慢;
- 查灯:绿灯闪过吗?红灯常亮吗?断电,重插 SD 卡,确认电源够 2.1 A;
- 主机名写对了吗?后缀
.local带了吗? - 路由器管理页里能找到 Pi 吗?能 → 说明你电脑的 mDNS 有问题,先用 IP 顶着;
- 找不到 → 断电取卡,插回电脑,重过一遍 Imager 设置,重点核对 Wi-Fi 密码和国家码;
- 实在不行,接上屏幕键盘开机看显示——这时第 2 章说的「留一套屏幕键盘备用」就回本了19。
7. 核心原理之五:配置系统——更新、sudo、安全关机¶
连上之后第一件事:更新系统。命令是一条:
拆开看,三个零件各司其职:
sudo—— 告诉系统「以 root(超级管理员)身份执行后面的命令」; 装软件、改系统这类活必须用它。书里配了黑框警告:sudo 危险,它能让你一条命令删光 SD 卡上的 所有文件,只在需要时用20。apt—— Advanced Package Tool,Linux 上安装、更新、管理软件的工具21。update && upgrade—— 先刷新「有哪些软件可以更新」的清单(update), 再实际执行更新(upgrade);&&表示前一条成功了才走后一条。-y是对所有提问自动答 yes。
输出里你会看到 31 packages can be upgraded 这样的行。更新中途别断电别打断,
等提示符回来才算完——书的原话是「这可能是喝杯茶的好时候」22。
更新为什么重要?书里给的理由很硬:软件过旧时,apt 安装可能直接失败,更新通常能修好23。
最后一条命令,全书用得最频繁、也最容易被忽视:sudo poweroff。
关机的正确姿势:输完命令,等绿灯活动停止,SSH 自己断开,然后才能拔电源24。
为什么非这么麻烦?因为 Linux 随时在往 SD 卡上写东西,意外断电可能丢文件、损坏 SD 卡25。
机器人满场乱跑、电源是电池,这句话在后面的章节里就是你的护身符。
8. 作者的判断与证据¶
这一章以流程为主,判断不多,但都点明了:
- 事实层: Raspberry Pi OS 是 Debian 变体;Lite 版的多媒体支持更难配; mDNS 在近年的三大桌面系统内置;2.1 A 是电源底线——这些都是可查的产品/系统事实615。
- 判断层(作者的): 桌面版优于 Lite 版(理由是摄像头和声音好配);值得留一套屏幕键盘救急7; 「断电前必须 poweroff」被书用警告框加重——这是对新手最值钱的善意。
- 留白: 排错清单的最后一招是「接屏看显示」,但书里明说「问题种类太多,我无法一一复现」, 引导你去书的 Discord、Stack Overflow、Raspberry Pi 论坛——诚实的边界19。
9. 边界与局限¶
- 全部依赖家用 Wi-Fi。 机器人必须连上你的路由器才能被找到; 室外、赛场、没有路由器的场合,这套 mDNS + SSH 的流程得换(第 18 章才提别的路子)。
- 主机名/用户名是作者的示例。
learnrob3和danny是书里的设定,你自己做的时候要换; 书里专门用 Note 提醒「把用户名和主机名记下来」10。 - 没有讲 Linux 命令行入门。
df、cd、ls、cat、man这些只露脸不教学, 完全没碰过命令行的读者需要另找一份 Linux 速览(书后 Challenges 里点名练这几个)。 - 安全配置只做到「能用」。 公钥认证挡住了密码猜测,但 Pi 默认用户、默认端口这些 更深的加固要等第 18 章「Securing your robot」。
10. 可带走的¶
- 无头 = 机器人不带屏幕键盘,一切经网络从另一台电脑操作;它还逼你认真做自主行为24。
- Raspberry Pi OS = Debian 变体;要视觉和语音,选桌面版别选 Lite67。
- Imager 烧卡时就把主机名、用户、Wi-Fi、国家码、SSH 公钥一次预置——配置做在第一次开机前1011。
- 公钥认证的图景:私钥只签名不出门,公钥预置只验签;比每次输密码安全和省事11。
- 灯语:绿灯停闪 = 启动完毕;通电绝不插拔 SD 卡1213。
- DHCP 会让 IP 变;
ping <主机名>.local靠 mDNS 免记 IP1415。 ssh <用户>@<主机名>.local进去后,提示符就是你在机器人里的位置17。- 更新三连:
sudo apt update -y && sudo apt upgrade -y;进行中别断电22。 - 关机必须是
sudo poweroff→ 等绿灯灭 → 再拔电;硬拔电 = 文件丢失 + SD 卡损坏2425。
11. 原文地图¶
| 主题 | 原书位置 |
|---|---|
| 无头的定义与好处 | text/34-fm-what-is-raspberry-pi-os.txt:33(搜「operated from another computer」) · text/34-fm-what-is-raspberry-pi-os.txt:88(搜「Making a Pi headless frees it」) |
| Raspberry Pi OS 是什么、选桌面版的理由 | text/34-fm-what-is-raspberry-pi-os.txt:20(搜「a variant of the Debian Linux」) · text/34-fm-what-is-raspberry-pi-os.txt:25(搜「strong support for the Python programming language」) |
| 烧卡与 Imager | text/35-fm-preparing-an-sd-card-with-raspberry-pi-os.txt:5(搜「Raspberry Pi Imager for this SD card」) |
| 预置主机名/Wi-Fi/SSH 公钥 | text/36-fm-setting-up-wi-fi-on-the-raspberry-pi-and-enablin.txt:61(搜「Allow public-key authentication only」) |
| DHCP 与 mDNS 找机器 | text/37-fm-finding-your-raspberry-pi-on-the-network.txt:16(搜「Dynamic Host Configuration Protocol」) · text/37-fm-finding-your-raspberry-pi-on-the-network.txt:23(搜「a technology known as mDNS」) · text/37-fm-finding-your-raspberry-pi-on-the-network.txt:44(搜「ping learnrob3.local」) |
| SSH 登录与 df -h | text/38-fm-using-ssh-to-connect-to-your-raspberry-pi.txt:18(搜「ssh danny@learnrob3.local」) · text/38-fm-using-ssh-to-connect-to-your-raspberry-pi.txt:68(搜「human-readable numbers」) |
| apt、sudo、关机 | text/39-fm-configuring-raspberry-pi-os.txt:36(搜「Advanced Package Tool」) · text/39-fm-configuring-raspberry-pi-os.txt:62(搜「root user」) · text/39-fm-configuring-raspberry-pi-os.txt:73(搜「sudo poweroff」) |
| 断电警告 | text/40-fm-summary.txt:3(搜「SD card corruption」) |
-
出处:「What is Raspberry Pi OS?」第 33 段(
text/34-fm-what-is-raspberry-pi-os.txt:33,搜「operated from another computer」)。原文举的反例正是「running after a robot with a keyboard on a wire(拖着接线键盘追机器人)」。 ↩ -
出处:「What is Raspberry Pi OS?」第 21 段(同上)。原文:headless system 是一台设计成由另一台电脑通过网络操作的计算机,适用于给设备接键鼠不方便的场合。 ↩↩
-
出处:「What is Raspberry Pi OS?」第 55 段(
text/34-fm-what-is-raspberry-pi-os.txt:55,搜「sent to and from」)。原文:代码、指令、信息经无线网络在 Pi 与笔记本/手机之间来回;许多示例自主运行,被远程启停。 ↩ -
出处:「What is Raspberry Pi OS?」第 88 段(
text/34-fm-what-is-raspberry-pi-os.txt:88,搜「Making a Pi headless frees it」)。原文:无头化让 Pi 自由 roam、减重省屏幕键盘的电;还促使制造者思考自主行为,因为「你不可能一直对机器人敲命令」。 ↩↩ -
出处:「What is Raspberry Pi OS?」第 15 段(
text/34-fm-what-is-raspberry-pi-os.txt:15,搜「layers above the raw hardware」)。原文:操作系统在裸硬件之上提供要内存、用硬件服务等工具;其上的发行版提供文件访问、网络工具、界面或命令与日常工具。 ↩ -
出处:「What is Raspberry Pi OS?」第 20 段(
text/34-fm-what-is-raspberry-pi-os.txt:20,搜「a variant of the Debian Linux」)与第 18 段(搜「strong support for the Python programming language」)。原文:Raspberry Pi OS 既是 OS 又是发行版,是 Debian Linux 为 Pi 定制的变体;Linux 对 Python 支持强、网络工具全;社区用量大、最好找答案。 ↩↩↩↩ -
出处:「What is Raspberry Pi OS?」第 77 段(
text/34-fm-what-is-raspberry-pi-os.txt:77,搜「Raspberry Pi OS Lite flavor」)。原文:桌面版自带含 VNC 的大量软件;Lite 版省空间但摄像头、声音等多媒体系统更难配;因此用默认桌面版。 ↩↩↩ -
出处:「What is Raspberry Pi OS?」第 86 段(
text/34-fm-what-is-raspberry-pi-os.txt:86,搜「ssh‑keygen」)。原文:烧卡前先生成 SSH key(已有的跳过),在 Mac/Linux 开 Terminal、Windows 用 Command Prompt,输入 ssh-keygen,接受默认选项。 ↩ -
出处:「Preparing an SD card with Raspberry Pi OS」第 5 段(
text/35-fm-preparing-an-sd-card-with-raspberry-pi-os.txt:5,搜「Raspberry Pi Imager for this SD card」)。原文:raspberrypi.org/software 下载 Imager,按 Pi 的指引安装。 ↩ -
出处:「Setting up Wi-Fi on the Raspberry Pi and enabling SSH」第 61 段(
text/36-fm-setting-up-wi-fi-on-the-raspberry-pi-and-enablin.txt:61,搜「Allow public-key authentication only」)与前文各步。原文:主机名作者填 learnrob3(自动带 .local)、用户名 danny、无线 LAN 的 SSID/密码、国家码、地区设置;Note 提醒「记下用户名和主机名,后面要用」;OPTIONS 页非必需;SAVE 后 YES 确认写入。 ↩↩↩↩ -
出处:「Setting up Wi-Fi on the Raspberry Pi and enabling SSH」第 61 段(
text/36-fm-setting-up-wi-fi-on-the-raspberry-pi-and-enablin.txt:61,搜「Allow public-key authentication only」)。原文:勾选后启用 authorized_keys 框,实现免密码安全访问;空白则点 RUN SSH-KEYGEN 生成。 ↩↩↩↩ -
出处:「Finding your Raspberry Pi on the network」第 11 段(
text/37-fm-finding-your-raspberry-pi-on-the-network.txt:11,搜「red power light」)。原文:绿灯停止闪烁、只剩红色电源灯 = 启动完毕并已连网。 ↩↩ -
出处:「Finding your Raspberry Pi on the network」第 6 段(
text/37-fm-finding-your-raspberry-pi-on-the-network.txt:6,搜「Do not insert or remove」)。原文警告:通电状态下不要插拔 SD 卡。 ↩↩ -
出处:「Finding your Raspberry Pi on the network」第 16 段(
text/37-fm-finding-your-raspberry-pi-on-the-network.txt:16,搜「Dynamic Host Configuration Protocol」)。原文:Wi-Fi 用 DHCP 动态地址,每次连网可能不同;抄路由器页面短期可行,长期烦且有时不可用。 ↩↩ -
出处:「Finding your Raspberry Pi on the network」第 23 段(
text/37-fm-finding-your-raspberry-pi-on-the-network.txt:23,搜「a technology known as mDNS」)。原文:Pi 用 mDNS 让附近电脑找到自己,也叫 Zeroconf、Bonjour;近版 macOS、Windows、Linux 桌面内置。 ↩↩↩ -
出处:「Finding your Raspberry Pi on the network」第 44 段(
text/37-fm-finding-your-raspberry-pi-on-the-network.txt:44,搜「ping learnrob3.local」)。原文给出真实输出:PING learnrob3.local (192.168.0.53),64 字节应答,time=0.113 ms;Note 把 ping 比作乒乓球。 ↩↩ -
出处:「Using SSH to connect to your Raspberry Pi」第 18 段(
text/38-fm-using-ssh-to-connect-to-your-raspberry-pi.txt:18,搜「ssh danny@learnrob3.local」)。原文:ssh <username>@<hostname>.local 登录;首次要接受主机指纹;REMOTE HOST IDENTIFICATION HAS CHANGED 警告的处理(编辑 known_hosts 删旧行);提示符格式 <username>@<hostname>:<path> $。 ↩↩↩↩ -
出处:「Using SSH to connect to your Raspberry Pi」第 68 段(
text/38-fm-using-ssh-to-connect-to-your-raspberry-pi.txt:68,搜「human-readable numbers」)。原文:df 是 disk free 缩写;-h 用 G/M/K 后缀显示;作者的输出显示 SD 卡系统分区用了 6%,证明已连接、工作正常。 ↩↩ -
出处:「Finding your Raspberry Pi on the network」第 3 段(
text/38-fm-using-ssh-to-connect-to-your-raspberry-pi.txt:3,搜「Discord community」)。原文:问题种类太多无法一一复现;建议看屏幕显示、搜网页,或去书的 Discord、Stack Overflow、Pi 论坛求助。 ↩↩ -
出处:「Configuring Raspberry Pi OS」第 62 段(
text/39-fm-configuring-raspberry-pi-os.txt:62,搜「root user」)。原文 Tip:sudo 让后面的命令以 root(管理员/超级用户)运行,可理解为 superuser does;警告:sudo 危险,能删光 SD 卡所有文件,只在需要时用。 ↩ -
出处:「Configuring Raspberry Pi OS」第 36 段(
text/39-fm-configuring-raspberry-pi-os.txt:36,搜「Advanced Package Tool」)。原文 Note:apt 用于在 Raspberry Pi OS 等 Linux 上安装、更新和管理软件。 ↩ -
出处:「Configuring Raspberry Pi OS」第 54 段(
text/39-fm-configuring-raspberry-pi-os.txt:54,搜「a great time for a cup of tea」)。原文:sudo apt update -y && sudo apt upgrade -y;要等提示符回来才完,中途别打断别断电。 ↩↩ -
出处:「Configuring Raspberry Pi OS」第 69 段(
text/39-fm-configuring-raspberry-pi-os.txt:69,搜「may not work」)。原文:软件陈旧时 apt-get 安装可能失败,更新通常能解决。 ↩ -
出处:「Configuring Raspberry Pi OS」第 73 段(
text/39-fm-configuring-raspberry-pi-os.txt:73,搜「sudo poweroff」)。原文:用完 sudo poweroff 关机;等绿灯活动停止、SSH 断开,然后才能安全断电。 ↩↩ -
出处:「Summary」第 3 段(
text/40-fm-summary.txt:3,搜「SD card corruption」)。原文 Note 警告:Pi 未预期时拔电会丢文件、损坏 SD 卡;务必用正确关机流程。 ↩↩