01-开源扫地机器人全栈拆解:一台会扫地的机器,装着一整套机器人工程课程
引子:你家扫地机器人在瞒着你什么
大家好,我是黒漂技术佬。
先问一个问题:你家的扫地机器人,出厂的时候装的是什么系统?地图存在哪?断网了还能用吗?坏了能修吗?
答案大概率是:你不知道,也不让你知道。
主流品牌的扫地机器人是一台"黑盒家电":地图锁在厂商云上,固件不开放,停产后App一撤,几千块的机器秒变板砖。海外社区有个专门的网站 robotinfo.dev,一个叫 Dennis Giese 的安全研究员长年做各品牌扫地机的拆解和"可刷机性"评估——这个事情本身就很说明问题:买一台机器,还得靠逆向工程才知道它到底在干什么。
于是就有了我们今天的主角:OOMWOO——一个把扫地机器人从里到外全部开源的项目,口号直接写在标题上:Open-source robot vacuum you build yourself,自己动手做的开源扫地机器人。
技术栈一排排出来就很带感:
- 树莓派 CM4/CM5做大脑,跑 ROS2;
- 2D 激光雷达建图导航,全屋自主清扫;
- 3D 打印底盘,零件自己打;
- Home Assistant本地集成,不依赖云;
- Arduino/STM32做底层控制;
- Apache 2.0 协议,硬件软件固件全开放。
这个项目由 makerspet.com 和 remake.ai 赞助,正在"build in public",社区模块化共建。坦白说它还在早期开发阶段(3D 打印文件、整机软件、PCB 都还在待交付清单里),但它的架构文档和软件接口契约已经写得非常完整——这恰恰是比成品更值钱的东西。
为什么这么说?因为一台扫地机器人,是你能接触到的最小最完整的移动机器人系统:感知(LiDAR/IMU/碰撞/悬崖)→ 决策(SLAM/导航/覆盖规划)→ 执行(电机/风机/边刷)→ 电源(电池/充电)→ 安全(防跌落/堵转/急停),一个不少。商业产品把这些藏起来了,而 OOMWOO 把每一层都摊开给你看。
这台机器怎么造、为什么这么造,就是这个系列要拆的东西。
一、先看全局:一张架构图看懂整台机器
OOMWOO 官方架构文档里给了一张系统总览,我把它翻译成人话重新画一遍:
感知层:2D LiDAR(UART, ~5Hz) · MIPI相机 · IMU · 串口音频 | ┌────────────────────▼─────────────────────┐ │ 大脑 CPU:树莓派 CM4/CM5 计算模块 │ │ 跑:ROS2 · SLAM(slam_toolbox) · Nav2 │ │ · 高层行为逻辑 │ └────────────────────┬─────────────────────┘ 自定义高速串口协议 + 健康心跳GPIO ┌────────────────────▼─────────────────────┐ │ 小脑 MCU:STM32G070 (FreeRTOS) │ │ 管:电机 · 编码器 · 传感器 · 充电控制 │ │ 兜:硬安全(碰撞/悬崖/轮子悬空→急停) │ └────────────────────┬─────────────────────┘ ┌──────────┴──────────┐ 左右驱动轮+滚刷 吸尘风机·碰撞条·悬崖·IR电源是一块带 BMS 的 4S2P 锂电池组(标称 14.4V,约 5200mAh / 75Wh,16.8V CC/CV 充电 + NTC 测温)——注意,是"现成的、自带保护板的电池包",不是自己叠电芯。这个决策我们后面安全篇细讲。
一图看完,先记住三个设计原则,整个系列都会反复回扣它们:
原则一:一切皆可换(Open & Swappable)。每个模块只定义接口,不依赖别人的内部实现。CPU 槽位今天插 CM4,明天可以换成引脚兼容的 Radxa CM3、LuckFox Core3566(还带 NPU)。LiDAR 只要是kaiaai/LDS库支持的 23+ 款型号,随便换。
原则二:仿真优先(Simulation-first)。所有软件必须先在 Gazebo 仿真里跑通,才允许上真机。好处很直接:没有机器人的贡献者也能开发测试,覆盖规划算法在虚拟客厅里先撞个够。
原则三:安全靠审查,不靠人品(Safety is reviewed, not crowd-trusted)。电池、充电、电机驱动这类模块,必须通过维护者安全审查才能合入,RFC 里必须写明过流/过热/短路/机械夹伤的危害分析。
第三条是这个项目最"产品思维"的地方——开源社区项目通常死于"能跑就行",而 OOMWOO 从第一天就按家电产品标准要求自己:cleans well, a first-class appliance, not a throwaway build(要扫得干净,是一等家电,不是一次性玩具)。
二、我们能学到什么?五堂免费的工程课
这是我给这个系列定的基调:OOMWOO 的价值不在"多一台扫地机",而在它是教科书级别的系统设计样本。拆开看,至少有五堂课:
第一课:CPU/MCU 双脑分工——安全永远不交给 Linux
扫地机的大脑跑 Linux + ROS2,但急停、防跌落、堵转保护这些"硬安全"全部放在一颗一块钱的 STM32 上,跟 Linux 半点关系没有。Linux 死机了?STM32 检测到心跳包停了,直接停电机、甚至复位 CPU。这套"安全独立于操作系统"的架构,是所有商业扫地机的基本操作,也是所有移动机器人该学的基本功。
第二课:SLAM + Nav2——机器人怎么知道自己在哪、该怎么走
2D LiDAR 每 5 秒转一圈扫出全景,slam_toolbox用这些扫描数据边走边建图,Nav2 负责在图上规划路径。从"地图坐标系 map"到"机器人坐标系 base_link",整条 TF 坐标变换链路是怎么搭的,仿真和真机怎么做到同一套接口——这是 ROS2 机器人开发的核心主线。
第三课:接口即契约——模块化协作的工程范式
OOMWOO 有一份专门的 SOFTWARE_INTERFACES.md,规定每个软件模块能发布/消费哪些 topic、什么消息类型、什么 QoS 策略、挂了怎么报告。模块之间只依赖接口不依赖实现,社区的几十个贡献者才能并行开发不打架。这套打法跟微服务架构里的"接口契约优先"一模一样。
第四课:面向失败设计——健康监控与心跳链路
软件栈要向 MCU 汇报一条聚合的健康心跳:关键组件掉线、心跳过期,心跳就停,机器人就停。QoS 用 transient-local 还是 volatile 都有讲究——旧心跳不能被重放给新订阅者。这是分布式系统"死开关(deadman switch)"思想在机器人上的落地。
第五课:产品化思维——从能跑到能卖
仿真先行、安全审查门禁、耗材用标准件(借用石头/追觅/小米的电机和易损件供应链)、电池用现成 BMS 包、散热直接借吸尘风机的风……每一条都是在回答同一个问题:开源项目怎么长成一台真正的家电,而不是创客桌上的原型机。
第六课(隐藏福利):开源社区怎么造硬件
软件开源大家见得多了,硬件怎么开源协作是另一个次元的难题:软件改一行代码推个 PR 就行,硬件的底盘、PCB、固件改一版要打样、要装配、要实测。OOMWOO 的社区组织方式很值得研究:
- 所有任务以RFC(请求意见稿)形式挂在 RFC board 上,每个模块"现在就可认领"(actionable now);
- 软件和仿真模块:贡献者在自己的仓库里开发,PR 只放一个链接挂到模块页——主仓库不做代码搬运工;
- 文档和规格:直接以
contributions/模块名/<github用户名>的路径提交进树; - 允许多人共做同一模块,最优实现随时间自然浮现,项目主理人保留最终裁决权。
这套"联邦式协作"的精髓是:主仓库只维护接口契约和集成权,实现自由散养。做过大型开源项目的人都知道,这几乎是硬件+软件混合项目唯一能规模化协作的姿势。
第七课(可以说最值钱):约束是架构之母
回头看 OOMWOO 的每个决策,背后都站着一个"穷"字或一个"小"字:
- 预算穷 → 用现成供应链的电机、现成 BMS 的电池包、一块钱的 STM32;
- 高度小 → CM 模块低趴不占高、散热蹭吸尘风机的风、不装 CPU 风扇;
- 算力紧 → 2D 雷达不上 3D、4GB 内存目标压到 2GB、Python 节点考虑改写成 Rust。
资源受限不是架构的敌人,而是架构的教练——它逼你回答"什么才是刚需"。这也是我推荐所有后端/应用开发的同学读机器人架构文档的原因:云上项目随便加内存加机器的日子,让太多架构决策失去了被约束打磨的机会。
三、项目现状:哪些能玩,哪些在路上
给想上手的同学交个底,项目开源交付物目前的进度:
| 交付物 | 状态 | 说明 |
|---|---|---|
| 开发环境 + 教程 | ✅ 已交付 | oomwoo-install,ROS2/Ubuntu 一键装 |
| Gazebo 仿真包(URDF) | ✅ 已交付 | oomwoo-one,~349mm 圆形机身 |
| BoM 物料清单 | ✅ 粗版已出 | 关键件选型已定 |
| 替身真机方案 | ✅ 已交付 | Proscenic M6 Pro 接 ROS2 的过渡教程 |
| 3D 打印件 | ⏳ 进行中 | CAD 库已扫好源件 |
| 树莓派整机软件 | ⏳ 进行中 | — |
| IO 板 PCB / STM32 固件 | ⏳ 进行中 | — |
也就是说:现在就能在 Gazebo 里把这台机器人跑起来,装个 ROS2 + 仿真环境,在虚拟客厅里练建图导航,一分钱硬件不用买。等硬件就绪,再按 BoM 攒真机。
MVP 的定义也很克制,值得学习:先做"手动建图 + 遥控行驶 + 仿真验证",明确把自主覆盖、回充、拖地、App 生态列为后续阶段——先让机器人在仿真里活起来,再谈全能。
四、这个系列怎么讲
接下来五篇,沿着"从底层到上层、从拆解到动手"的顺序走:
- 02 双脑架构:CPU/MCU 分工、STM32 硬安全设计、自定义串口协议为什么不用 micro-ROS;
- 03 建图导航:LiDAR 数据流、slam_toolbox 建图、Nav2 导航、TF 坐标系、Gazebo 仿真环境;
- 04 健康监控:心跳链路、QoS 选型、死开关设计——软件栈怎么向 MCU"证明自己还活着";
- 05 自己动手做:三条路线(刷机改造商业机 / 替身真机 / 从零攒机)、物料清单、攒机路线图;
- 06 改进与进阶:覆盖规划、回充对接、拖地方案、Home Assistant 集成与应用生态。
不需要你是机器人专业出身——系列里的每一篇,我都会先讲"它要解决什么问题",再讲"它怎么解决",最后讲"我们自己能用上什么"。
一台会扫地的机器,装着一整套机器人工程课程。开课。