把机器人之路走下去 — 安全加固、社区与下一台机器人
把机器人之路走下去 — 安全加固、社区与下一台机器人
这一章讲什么: 书的收尾,三件事。 ① 还安全债: 之前各章为了「先跑起来」,MQTT 密码明文、网页无认证、 全程明文传输——本章把密码挪出代码、并给出继续加固的路线。 ② 给地图: 社区在哪、竞赛怎么玩、下一步该学什么(制造、电子、ROS 2、机器学习)。 ③ 闭环方法论: 用同一套「为什么 → 草图 → 方块图 → 选件」的流程,启动你的下一台机器人。
1. 先看现象:这台机器人是实验室产品,不是能上路的
书里先把丑话说透:
「机器人当前的 MQTT 用户名密码直接存在代码里——容易经 Git 历史泄露, 也容易在不安全的网络上被截获。」1
这是全书一路挂账的债:第 6 章部署脚本里 robot/robot 明文占位、第 7 章两次
「这个应用没有安全机制」、第 8 章 .env.js 只能进 .gitignore。本章集中还债,
然后坦白:这只是加固的开始2。
2. 顶层全景:还债 + 地图 + 下一台
① 安全 凭据外置(.env.json,JS 与 Python 共读)→ 部署脚本联动 → 加固路线(TLS/登录/服务收敛)
② 社区 Discord / 网站社区(Pi Wars、Instructables)/ 厂商社区(Pimoroni、Adafruit)
③ 技能 设计(CAD)→ 制造(激光/3D 打印/CNC/手工)→ 电子学 → 编程(ROS 2、ML、SLAM)
④ 下一台 为什么做 → 铅笔草图 → 方块图 → 选件权衡 —— 第 1、2 章的流程,这次带着全套工具
图说:① 是对自己负责,②③ 是不让自己孤军,④ 是让整本书真正变成你的。3. 核心原理之一:凭据外置——密码不该住在代码里
还债动作本身很教科书:把配置从代码挪到配置文件,让 Git 永远见不到它。
① .gitignore 加 .env.json
② 提交 .env.example.json(模板,只有占位符)进 Git
③ 本地复制成 robot_control/.env.json,填真实用户名密码
—— 放在 robot_control 下,因为 Web 服务只对外提供这个目录的文件[^3]
④ deploy_mqtt.py 读它、同步到 /etc/mosquitto/,
文件变了 → 重跑 mosquitto_passwd、重启 broker(幂等照旧)[^3]
⑤ deploy_services.py 同步它 + 把 common.changed 换成 common_changed
(配置变了也重启服务);mqtt_behavior.py 的 connect() 改成从文件读[^4]「配置变化 → 服务重启」靠的还是第 4 章的幂等机制——PyInfra 的 changed 状态一路传, 文件、包、服务三者联动。这是老工具解决新问题的样板。
4. 核心原理之二:加固路线——三道未完成的防线
书里明确说「这只是加固的开始」,然后列出三道防线,照原书接住3:
| 防线 | 现状 | 建议 |
|---|---|---|
| 服务收敛 | launcher 可任意 start/stop 任意服务——权限过大 | 换成固定清单的端点,堵「被诱导跑恶意代码」的路 |
| 用户登录 | .env.json 对任何访问网页的人可见 | 加登录机制、妥善保管凭据、用安全头发送 |
| 传输加密 | 全部通信明文,易被截获 | Tailscale、Cloudflare Tunnel 这类隧道,或 Caddy 反向代理——把 MQTT WebSocket 和网页都罩进加密层 |
收梢一句:「设备安全是个深题,但值得研究——别让你的机器人成为所在网络的安全漏洞。」3
5. 核心原理之三:社区——从孤军到圈子
书里给了一张社区地图(都是作者实际混迹的地方)4:
- Discord:书的专属服务器 + 作者(OrionRobots)的机器人社区 + KevsRobots (Kevin McAleer——本书序言作者)的社区;
- 网站社区:Pi Wars(Raspberry Pi 机器人挑战赛,第 1 章 Skittlebot 的主场)、 Instructables(海量可复现的机器人项目)、Stack Exchange(具体技术问题的宝库);
- 厂商社区:Pimoroni、Adafruit 的博客/Discord/YouTube——既是零件店也是教程库; Raspberry Pi 官方杂志与论坛。
为什么社区排在技能之前?因为**「在哪问」决定「学多快」**——书各章排错清单的终点 从来都是「去社区问」。
6. 核心原理之四:技能地图——四条进阶路线
书里把「下一步学什么」摊成四条,照原书接住:
设计:Inkscape(平面)、FreeCAD(三维)——画得出零件,才谈得上造得出零件; 画好的图可以外发加工,也可以自己学制造5。
制造:激光切割(平板拼立体)、CNC(从料块切,能啃金属)、3D 打印(逐层堆料)、 手工(锯钻模板)——外加一条「玩具改造/拆件(toy-hacking/salvaging)」: RC 挖机、坦克的底盘「电机、齿轮、轮系都是现成的设计」; 模具路线(CNC 木模 + 真空吸塑)能做外壳。 资源首推 MIT 的 How To Make (Almost) Anything 课程; 并提醒:机器要保养、耗材不断,用得不勤不如用 makerspace 或代工(PCBWay/JLCPCB)6。
电子学:功率电子(看懂电机驱动与电池稳压)、数字电子(接新传感器)、 模拟电子(新传感器类型 + 诊断电气毛病)——会画会读电路图是入口7。
编程:ROS 2 被点名——「共享通信总线」的设计哲学和本书的 MQTT 架构同构, 而生态里大多数算法都有现成实现;机器学习(PyTorch/ONNX/TensorFlow, 甚至本地跑 LLM(大语言模型,对话 AI 背后那类)的 ollama)正在逐个替换传统算法——本书的人脸、语音已是先例; SLAM(同步定位与建图)是机器人算法的重镇;计算机视觉可续读 OpenCV 专著8。
7. 核心原理之五:规划下一台——方法论闭环
最后一节把第 1、2 章的流程重新点亮,但主角换成了你:
先问「为什么做」。 竞赛约束?模仿某个动物(「螃蟹妙极了」)? 试一个新传感器、新控制板?——目的决定约束,约束决定设计9。
铅笔草图。 照样从纸开始:轻画、多注释、不管比例、先大后小 (「先记下大想法,细节回头补——人很容易陷在某个细节里忘掉别的」)、 起个带日期的工作名。作者的 SpiderBot 草图就是范本10。
方块图。 任何机器人都能画成「输入/输出/控制器 + 连线」; 不必完美,「图要传达的是你打算把谁接到谁」;复杂的部分(如 SpiderBot 的腿) 可以拆出子图。作者的第二版方块图是用 diagrams.net 画的11。
选件。 仍是第 2 章那套:约束与权衡——买还是造、成本、重量、复杂度、时间。 方法没变,变的是你已经有了全套工具箱和一双调过 PID 的手。
8. 作者的判断与证据
- 判断: 安全是「深题但值得」——本章只还第一笔债,剩下三道防线给路线不给实现, 这是诚实的范围管理3。
- 判断: ROS 2 与本书架构「同构」(共享总线)——学 ROS 不是推倒重来, 是把本书的 MQTT 经验映射到行业标准生态8。
- 判断: 制造技能的推荐逻辑是「用得少就别拥有」——makerspace 与代工服务 被抬到和自购机器同等的地位6。
- 事实层: 社区链接、工具名、课程名、服务名(Tailscale/Caddy/PCBWay) 均为可查证的真实资源346。
9. 边界与局限
- 加固只到「凭据外置」为止。 TLS、登录、launcher 收敛都是「建议」, 没有可跟做的代码——严格说本章是路线图,不是教程。
- 社区链接会腐烂。 Discord 邀请、YouTube 频道、博客地址都有时效; 书里自己也在第 2 章承认「型号会过时」。
- ROS 2 / ML / SLAM 各是一条长河。 本章只给了渡口的位置和一句「值得」, 真要下水得另备舟楫(书指了续读书目)。
10. 可带走的
- 密码外置三步:.gitignore + example 模板 + 部署脚本读配置并联动重启1213。
- 加固三防线:服务收敛、用户登录、传输加密(Tailscale/Cloudflare Tunnel/Caddy)3。
- 别让你的机器人成为网络的洞——安全是深题,但值得3。
- 社区三类:垂直社区(Discord)、项目社区(Pi Wars/Instructables)、厂商社区(Pimoroni/Adafruit)4。
- 技能四条线:设计(CAD)→ 制造(激光/CNC/3D 打印/玩具改造)→ 电子学 → 编程(ROS 2/ML/SLAM)5678。
- 用得少的机器别拥有——makerspace 和代工是正经选项6。
- 下一台机器人仍从「为什么 → 草图 → 方块图 → 选件」开始;先大后小,别陷进细节91011。
补遗:选件、试装与代码规划——下一台机器人的落地清单
用套件起步,但算清套件的账。 SpiderBot 从六足套件起步,套件的隐形成本书里算给你看: 要带动 18 个舵机,手里的 16 路舵机驱动板不够——2 个舵机改由主控 GPIO 直接带, 软件复杂度由此上升;主控选了小、便宜、低功耗的 ESP8266(代码不复杂、要 Wi-Fi、不想加重); 舵机耗电大,电源上锂聚合物电池 + 充电保护电路14。 套件限定你的电机、供电、控制器选型——用套件前先问:它的约束我接不接受?
买之前的试装(第 2 章流程的复读)。 零件不便宜,买错了没有空间装更是白搭: 从网上或数据手册收集尺寸,画图软件摆矩形、或剪纸板实物对摆; 重点核对「主控和电机驱动板之间有没有干净的接线通路」15。 采购渠道:老牌 Pimoroni / ThePiHut / Adafruit / SparkFun;囤货渠道 Amazon / Alibaba / eBay / Mouser / DigiKey——买杂牌前要清楚「坏了找谁」。
装配纪律。 数据手册先读;分装分测,每装一组就通电验一组; 避免一切可能造成短路的结构;基本不用胶——机器人要留得出维修和升级的通道16。
代码规划:带着架构上路。 本书的 MQTT 总线 + 模块化服务被建议原样带走—— ROS 2 用的也是同样的总线哲学;到了新机器人上,第 5 章那套 「先写电机/传感器服务,行为只发消息」的次序照旧生效17。
11. 原文地图
| 主题 | 原书位置 |
|---|---|
| 安全债总述 | text/156-fm-securing-your-robot.txt:9(搜「easy to leak」) |
| 凭据外置 | text/156-fm-securing-your-robot.txt:24(搜「.env.example.json」) · text/156-fm-securing-your-robot.txt:109(搜「load_config」) |
| 加固三防线 | text/157-fm-online-robot-building-communities.txt:6(搜「particularly powerful」) · text/157-fm-online-robot-building-communities.txt:24(搜「plain text and easily」) |
| 社区地图 | text/157-fm-online-robot-building-communities.txt:70(搜「Instructables」) |
| 制造技能 | text/159-fm-further-robot-skill-suggestions.txt:37(搜「How To Make Almost Anything」) · text/159-fm-further-robot-skill-suggestions.txt:77(搜「toy-hacking」) |
| 编程进阶 | text/160-fm-planning-your-next-robot.txt:6(搜「ROS 2」) · text/160-fm-planning-your-next-robot.txt:24(搜「SLAM」) |
| 为什么做与草图 | text/160-fm-planning-your-next-robot.txt:44(搜「crabs are fascinating」) · text/160-fm-planning-your-next-robot.txt:92(搜「Get big ideas down first」) |
| 方块图与选件 | text/160-fm-planning-your-next-robot.txt:101(搜「Making a block diagram」) |
| 章节总结 | text/161-fm-summary.txt:37(搜「journey」) |
Footnotes
-
出处:「Securing your robot」第 9 段(
text/156-fm-securing-your-robot.txt:9,搜「easy to leak」)。原文:MQTT 用户名密码直接存在代码里,易经 Git 历史泄露、易在不安全网络被截获;第一步是把凭据移出代码库、放进 Python 服务和 Web UI 都能读的配置文件,主机名一并放入便于复用。 ↩ -
出处:「Other security concerns」(
text/157-fm-online-robot-building-communities.txt:5,搜「start of securing the robot」)。原文:密码从硬编码挪到环境文件只是加固的开始。 ↩ -
出处:「Other security concerns」(
text/157-fm-online-robot-building-communities.txt:6,搜「particularly powerful」)与第 24 段(搜「plain text and easily」)。原文:launcher 权限过大——换成固定清单;加用户登录与安全头;用 Tailscale、Cloudflare Tunnel 或 Caddy 把 MQTT WebSocket 与网页罩进加密层——当前全明文、易截获;「设备安全是深题,但值得研究,确保机器人不是你网络的洞」。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 -
出处:「Online robot-building communities」第 70 段(
text/157-fm-online-robot-building-communities.txt:70,搜「Instructables」)。原文:Discord(本书服务器、OrionRobots、KevsRobots)、Pi Wars、Stack Exchange、Instructables、Hackaday;厂商侧 Pimoroni/Adafruit 的博客与社区、Raspberry Pi 官方杂志。 ↩ ↩2 ↩3 -
出处:「Further robot skill suggestions」第 20 段(
text/159-fm-further-robot-skill-suggestions.txt:20,搜「Inkscape」)。原文:Inkscape 与 FreeCAD 做快速设计与零件图;有了 CAD 图可外发加工或自制。 ↩ ↩2 -
出处:「Further robot skill suggestions」第 37 段(
text/159-fm-further-robot-skill-suggestions.txt:37,搜「How To Make Almost Anything」)与第 90 段(搜「toy-hacking」)。原文:MIT HTMAA 课程;激光切割/CNC/3D 打印/手工;模具与真空吸塑;玩具改造——RC 挖机底盘的电机轮系现成;PCBWay/JLCPCB 低成本代工;机器要保养耗材,用得少不如用 makerspace。 ↩ ↩2 ↩3 ↩4 ↩5 -
出处:「Further robot skill suggestions」第 97 段(
text/159-fm-further-robot-skill-suggestions.txt:97,搜「Power electronics」)。原文:功率电子(电机驱动与电池稳压)、数字电子(新传感器)、模拟电子(新传感器类型与电气诊断);学画会读电路图。 ↩ ↩2 -
出处:「Planning your next robot」第 6 段(
text/160-fm-planning-your-next-robot.txt:6,搜「ROS 2」)与第 40 段(搜「SLAM」)。原文:ROS 2 与本书共享总线哲学同构、生态算法即插即用但入门有门槛;ML(PyTorch/ONNX/TensorFlow、本地 LLM 的 ollama)正逐个替换传统算法;SLAM 是重镇;OpenCV 续读书目。 ↩ ↩2 ↩3 -
出处:「Planning your next robot」第 44 段(
text/160-fm-planning-your-next-robot.txt:44,搜「crabs are fascinating」)。原文:下一台的理由——竞赛、模仿生物(螃蟹妙极了)、试新零件/新技能;每个选择带约束与权衡;知道为什么做,初始设计就更容易。 ↩ ↩2 -
出处:「Planning your next robot」第 92 段(
text/160-fm-planning-your-next-robot.txt:92,搜「Get big ideas down first」)。原文:SpiderBot 三行需求清单(六条腿、试步态、避墙);草图九条心法(轻画、多注释、不管比例、带日期、先大后小、随手记、白板拍照……)。 ↩ ↩2 -
出处:「Making a block diagram」(
text/160-fm-planning-your-next-robot.txt:109,搜「conveys which parts」)。原文:任何机器人都能画成输入/输出/控制器加连线;不必完美,「图要传达你打算把谁接到谁」;复杂部分拆子图;作者用 diagrams.net 画第二版。 ↩ ↩2 -
出处:「Securing your robot」第 24 段(
text/156-fm-securing-your-robot.txt:24,搜「.env.example.json」)。原文:.gitignore 加 .env.json;example 模板进 Git;复制为 robot_control/.env.json(放此目录因 Web 服务只对外提供该目录);deploy_mqtt.py 读文件、同步 /etc/mosquitto/、文件变则重跑 mosquitto_passwd 并重启。 ↩ -
出处:「Securing your robot」第 109 段(
text/156-fm-securing-your-robot.txt:109,搜「load_config」)。原文:mqtt_behavior.connect() 从 robot_control/.env.json 读凭据;deploy_services 把 common.changed 换成 common_changed(含 env 配置变化)以重启相关服务;inventor_hat_service 等早期服务也一并改造。 ↩ -
出处:「Planning your next robot」第 137 段(
text/160-fm-planning-your-next-robot.txt:137,搜「18 servo motors」)。原文:16 路驱动板不够 18 舵机,2 路改 GPIO,软件复杂度上升;ESP8266 主控的选择理由;锂聚合物电池 + 保护电路。 ↩ -
出处:「Doing a test fit」(
text/160-fm-planning-your-next-robot.txt:149,搜「test fit」))。原文:收集尺寸、矩形对摆或纸板实物;核对接线通路;买前必试装。 ↩ -
出处:「Assembling your robot」(
text/160-fm-planning-your-next-robot.txt:196,搜「rarely use glue」)。原文:读数据手册;分段装配分段测;避免短路结构;很少用胶,留维修通道。 ↩ -
出处:「Planning the code for the robot」(
text/160-fm-planning-your-next-robot.txt:205,搜「keep code modular somehow」)。原文:强烈建议保持代码模块化;ROS 2 等系统用相似的总线架构。 ↩