ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

自己攒一台扫地机器人:三条路线与完整攒机路线图

自己攒一台扫地机器人:三条路线与完整攒机路线图 1. 先想清楚你要的到底是扫地机器人还是一台会走路的机器人很多人第一次冒出自己搞一台扫地机器人的念头都是被商城里两三千块的成品刺激到了——既然里面就是电机加轮子加一块板子凭什么卖这么贵于是打开购物软件搜扫地机器人套件发现要么是几百块的玩具级产品要么是上万块的科研平台中间那段空白让人很难受。我当初也是这么入坑的前后折腾了大半年踩过的坑足够写一本小册子所以这篇就把三条可行路线和一张攒机路线图摊开讲清楚。先把预期摆正自己攒一台扫地机器人成本上大概率不会比买成品便宜尤其是你还要它真的能扫干净地。那为什么还要自己做因为成品是一个黑盒你永远不知道它为什么在某个角落卡住、为什么建图会漂、为什么回充失败。而自己攒的机器每一行代码、每一根线都是你接的出问题你能定位到具体环节。对于想学ROS2、SLAM、Nav2、STM32这套技术栈的人来说扫地机器人是一个近乎完美的载体——它同时包含移动底盘控制、传感器融合、建图定位、路径规划、任务调度这几个核心模块而且最终效果肉眼可见。这篇文章适合三类人一是想系统学习移动机器人技术栈的学生或转行者二是手里有 STM32 或树莓派、想找个综合项目练手的嵌入式爱好者三是已经买过成品、想拆开研究或者做二次开发的玩家。三条路线分别对应不同的预算、时间投入和技术基础你可以先看完路线对比再决定从哪条切入。整篇内容会围绕为什么这样选具体怎么做哪里容易翻车三个问题展开尽量把每个决策背后的逻辑讲透而不是甩一堆命令让你照抄。需要提前说明的是下面涉及的所有硬件选型、参数配置、代码结构都是基于我个人和身边朋友的实际项目经验总结的属于常见实践中的合理方案不是唯一解。你的预算、场地、目标不同完全可以替换其中某些环节但替换前请先理解原方案为什么这么设计。2. 三条路线的真实成本与适用人群对比在动手之前最该做的不是买零件而是选路线。我见过太多人一上来就冲着全自主建图导航去结果卡在电机驱动调不好三个月后整套东西吃灰。三条路线的核心差异不在硬件贵不贵而在于你愿意把多少时间花在让机器动起来和让机器聪明起来这两件事上。2.1 路线一成品底盘二次开发最快见到效果这条路的思路是买一个已经能跑的扫地机器人成品或者二手回收机通过串口或网络接口接管它的运动控制把原厂主控换成自己的计算平台。优点是底盘、电机、驱动、电池、充电座全都是现成的机械和电气部分几乎零门槛缺点是原厂协议往往不公开需要逆向而且不同批次硬件差异大网上教程不一定对得上。适合人群有编程基础但不想碰硬件、目标是快速跑通 SLAM 和 Nav2 的人。预算大概在 500 到 1500 元二手成品机时间投入 2 到 4 周能出第一版建图效果。关键难点在于通信协议逆向。大部分成品扫地机的主控和传感器之间走的是串口你需要用逻辑分析仪抓包找出哪条指令控制前进、哪条读取里程计、哪条触发清扫。这个过程没有捷径只能一条条试。我当时的做法是先让机器进入某种调试模式很多机型长按组合键会进入然后用串口助手逐字节发指令观察反应把能触发动作的指令记下来慢慢拼出协议表。2.2 路线二套件组装平衡成本与可控性市面上有不少面向教育的机器人底盘套件包含电机、驱动板、轮子、底盘结构件有些还带编码器和 IMU。你只需要加上自己的主控STM32 或树莓派和激光雷达就能组成一台完整的移动平台。这条路线的优点是硬件接口标准化、文档齐全、社区活跃缺点是套件本身价格不低而且结构上不一定适合装扫地模块。适合人群想同时学嵌入式和 ROS2、愿意花时间在软硬件联调上的人。预算 1500 到 4000 元时间投入 1 到 2 个月。这条路线最值得投入的地方是底盘的运动学标定。套件给的轮距、轮径参数往往和实际有偏差直接拿去算里程计会累积误差。我的经验是让机器直线走 2 米测量实际偏移反推轮径修正系数原地转 10 圈测量实际转角反推轮距修正系数。这两个系数标定好里程计精度能提升一个档次后面建图才不会糊。2.3 路线三从零攒机完全掌控但门槛最高从底盘结构、电机选型、驱动电路、电源管理到主控固件全部自己设计。优点是每个环节都可控想怎么改就怎么改缺点是任何一个环节出问题都会卡住整个项目而且总成本往往超出预期。我认识的朋友里走这条路能坚持到建图成功的不到一半。适合人群有电子设计和嵌入式开发经验、把这件事当长期项目做的人。预算 2000 到 6000 元取决于雷达和计算平台时间投入 3 个月以上。三条路线的对比如下对比维度路线一 成品改造路线二 套件组装路线三 从零攒机硬件门槛低中高软件门槛中协议逆向中高首版建图时间2-4 周1-2 月3 月以上预算区间500-15001500-40002000-6000可扩展性受原厂限制较好完全自由翻车风险协议对不上标定不准全环节都可能卡选路线的时候有个反直觉的建议如果你完全没接触过 ROS2先别管底盘先在电脑上把仿真跑通。Gazebo 里搭一个带激光雷达的差速底盘把 SLAM 建图和 Nav2 导航的完整流程走一遍确认自己理解每个节点的作用再去碰硬件。这样你在调真机的时候至少知道问题出在软件还是硬件而不是两眼一抹黑。3. 攒机路线图从底盘到建图的完整链路拆解选定路线之后接下来是具体的攒机流程。这一章按机械与电气 → 主控固件 → 计算平台与 ROS2 → 传感器与建图的顺序展开每一步都说明为什么这么做以及常见的坑在哪。3.1 底盘与电机为什么差速驱动是首选扫地机器人的运动方式基本是差速驱动也就是左右两个独立驱动的轮子加一个或两个万向轮。为什么不用阿克曼或者全向轮因为差速驱动结构最简单、控制最容易、对地面要求最低而且原地转向能力对扫地场景非常关键——机器需要贴着墙边走、需要掉头、需要在狭窄空间调整姿态差速驱动都能胜任。电机选型上带编码器的直流减速电机是主流。编码器的作用是测速和测距没有编码器你就只能靠 IMU 积分推算位置误差会大到无法建图。我建议选每转脉冲数在 300 以上的编码器电机分辨率太低会导致低速时速度估计抖动。减速比方面扫地机器人不需要跑得快输出转速在 100 到 200 转每分钟比较合适扭矩要能推动整机爬上地毯边缘。驱动电路这块如果走路线三常用的是基于 DRV8323 这类集成驱动芯片的方案它把栅极驱动、电流采样、保护电路都集成进去了比用分立 MOS 搭 H 桥省心很多。STM32 通过 PWM 控制转速、通过方向引脚控制正反转、通过编码器接口读取反馈。这里有个细节PWM 频率不要设太高10 到 20 千赫兹足够太高会导致驱动芯片发热和电机啸叫。3.2 STM32 固件把底层控制做扎实主控固件是整个系统的地基它负责电机闭环控制、里程计计算、IMU 数据读取、以及与上位机的通信。我见过很多人急着上 ROS2结果底层速度控制是开环的机器走起来一冲一冲建图自然一塌糊涂。固件的核心是速度闭环。流程是上位机下发目标线速度和角速度 → 固件根据差速运动学解算出左右轮目标转速 → 用编码器反馈做 PID 闭环 → 输出 PWM 给驱动。PID 参数整定有个实用顺序先调 P 让系统有响应但不振荡再加 I 消除稳态误差最后加 D 抑制超调。如果电机响应慢可以适当降低目标速度上限别硬调 PID。里程计计算要注意单位统一。编码器读出来的是脉冲数要先换算成轮子转过的弧度再乘以轮径得到线位移最后根据左右轮位移差算出机器人位姿变化。这个公式网上到处都是但轮径和轮距这两个参数必须实测用卡尺量轮子直径用卷尺量两轮中心距别信电机规格书上的标称值。通信协议方面STM32 和上位机之间常用串口。协议设计要包含帧头、数据长度、数据内容、校验和防止丢包导致机器人乱跑。数据内容至少要有左右轮速度、里程计位姿、IMU 姿态。如果走无线蓝牙或 WiFi 模块都行但要注意延迟无线链路不稳定时机器人会顿挫。提示STM32 开发环境搭建时如果用 VSCode 加 J-Link记得先装好芯片包和调试配置否则会出现连不上目标芯片的情况。另外涉及中文注释时注意编码格式GBK 和 UTF-8 混用会导致注释乱码建议统一用 UTF-8。3.3 计算平台与 ROS2选对版本少走弯路上位机负责跑 SLAM、Nav2、任务调度这些重活。常见选择是树莓派、Jetson 系列或者一台小型 x86 主机。树莓派性价比高但算力有限跑 2D 激光 SLAM 够用跑视觉 SLAM 就吃力Jetson 适合带视觉的方案x86 主机性能最强但功耗和体积大。ROS2 版本选择上Humble 是目前最稳的长期支持版本社区资料多、坑少。安装时最容易卡在软件源公钥验证这一步报错提示无法验证签名。解决办法是先把软件源和密钥配置正确再执行安装。如果网络环境导致下载慢可以换用国内镜像源但要注意镜像同步可能有延迟版本对不上时反而更麻烦。ROS2 的核心概念是节点、话题、服务、动作。对扫地机器人来说底盘固件对应一个节点通过话题发布里程计和 IMU 数据激光雷达对应一个节点发布扫描数据SLAM 节点订阅扫描和里程计发布地图和位姿Nav2 订阅地图和目标点发布速度指令给底盘。理解这条数据流你就知道每个环节出问题该去查哪个话题。创建 C 功能包是绕不开的一步。用ros2 pkg create生成骨架然后在CMakeLists.txt里配置依赖和可执行文件在package.xml里声明依赖。新手常犯的错误是改了代码忘了重新编译或者编译了但没 source 环境导致找不到节点。养成改代码 → colcon build → source install/setup.bash → 运行的习惯。3.4 激光雷达与 SLAM建图质量的决定因素激光雷达是扫地机器人的眼睛它的安装位置和扫描平面直接决定建图质量。雷达要装在机器顶部、扫描平面略高于地面障碍物比如地毯、门槛同时不能被机身结构遮挡。如果雷达装得太低会扫到地面噪点装得太高会漏掉矮障碍物。SLAM 算法方面2D 激光 SLAM 用 slam_toolbox 就够了它支持在线建图和定位模式切换。建图时的关键参数是分辨率和扫描匹配范围分辨率设太粗地图糊设太细计算量大扫描匹配范围要覆盖机器人单帧移动距离否则快速转向时会跟丢。建图过程中尽量让机器人匀速慢速移动避免急转和急停这样回环检测更容易成功。如果要用 3D 雷达做导航流程会复杂一些。3D 点云数据量大通常先降采样再投影成 2D 栅格或者八叉树地图然后交给 Nav2 使用。八叉树地图的好处是能表达三维空间占用适合有高低差的环境但内存占用和计算量都比 2D 栅格高。我的建议是如果只是平地扫地2D 激光足够别为了炫技上 3D。建图完成后要保存地图然后在定位模式下加载地图跑 Nav2。Nav2 的配置涉及全局规划器、局部规划器、代价地图、恢复行为等一堆参数。新手最容易忽略的是代价地图的膨胀半径设太小机器人会贴着障碍物走容易刮蹭设太大在狭窄通道会认为过不去。一般设成机器人半径加 5 到 10 厘米比较稳妥。4. 联调阶段最容易翻车的五个环节前面讲的是应该怎么做这一章讲实际做的时候会在哪里翻车。这些都是我和身边人真实踩过的坑有些坑排查了一整周才找到原因写出来希望能帮你省点时间。4.1 里程计漂移先怀疑标定再怀疑算法机器人走直线走偏、转圈转不准第一反应往往是 SLAM 算法不行其实八成是里程计标定没做好。排查顺序应该是先确认轮径和轮距参数是否实测、再确认编码器线数是否和固件里配置的一致、然后确认 PID 闭环是否真的在起作用可以打印目标速度和实际速度对比、最后才怀疑算法。有个隐蔽的坑是左右轮电机特性不一致。同样的 PWM 占空比左右轮实际转速可能差百分之几长时间累积就是明显偏移。解决办法是给左右轮分别做闭环而不是共用一个 PID 参数。如果闭环后还是偏可以在里程计计算时给左右轮加一个修正系数通过直线行走实验反推。4.2 雷达数据异常先看话题再看驱动雷达在 RViz2 里显示不出来或者点云断断续续排查链路是先确认雷达节点是否正常启动、再确认发布的话题名是否和订阅方一致、然后确认数据帧格式是否正确、最后才怀疑硬件。ROS2 里话题名对不上是最高频的问题因为不同驱动包默认话题名不一样改一下 remap 就好。如果雷达数据里有大量噪点或者固定方向的虚假障碍检查雷达周围是否有反光物体、玻璃、镜面这些会让激光产生异常回波。另外雷达的安装高度如果和地面平行度不好扫描平面倾斜也会导致建图时墙面变成斜线。4.3 Nav2 规划失败从代价地图查起Nav2 报无法规划路径最常见的原因是代价地图把目标点或者机器人当前位置标记成了障碍。可能是雷达噪点被当成障碍、可能是膨胀半径太大把通道堵死、也可能是地图本身有误。排查方法是打开 RViz2 的代价地图显示看障碍物分布是否合理。另一个高频问题是局部规划器震荡机器人在原地来回摆动不前进。这通常是局部代价地图更新频率和速度指令不匹配或者恢复行为配置不当。可以适当降低最大速度、增大局部规划器的前瞻距离、调整恢复行为的触发条件。4.4 通信丢包无线链路是重灾区如果底盘和上位机之间走无线机器人动作一顿一顿的基本可以确定是丢包。无线链路受环境影响大2.4G 频段干扰尤其严重。解决办法一是降低通信频率但保证每帧数据完整二是加校验和重传机制三是尽量让天线远离电机和驱动电路电磁干扰会严重影响无线模块。有线连接虽然丑但稳如果场地允许调试阶段强烈建议先用有线等软件全跑通了再换无线。4.5 电源管理别让机器人半路趴窝扫地机器人要带着电机、主控、雷达、计算平台一起跑功耗不小。电池选型要算总功耗电机满载可能十几瓦、雷达几瓦、计算平台几瓦到十几瓦加起来选电池容量时要留至少百分之三十余量。电压方面电机和计算平台往往需求不同需要 DC-DC 降压模块注意降压模块的额定电流要大于实际负载。还有个容易忽略的点是电池电压监测。电压过低时电机扭矩下降、计算平台可能重启机器人会突然失控。固件里要做低压保护电压低于阈值时主动停车并上报。5. 从能跑到好用几个提升体验的进阶方向把基本功能跑通之后如果还想继续折腾有几个方向能明显提升实用性。5.1 清扫模块的联动控制扫地功能本身不复杂一个边刷电机加一个吸尘风机通过继电器或 MOS 管控制开关。但要做好用需要和运动状态联动直线行走时全功率清扫转向时降低边刷转速避免扬尘遇到地毯时提高风机功率。这些逻辑可以放在 STM32 固件里也可以由上位机通过话题下发指令。5.2 回充与自主对接回充是扫地机器人体验的分水岭。实现方式通常是充电座发射红外信号机器人上的红外接收器寻找信号方向配合视觉或激光对准。这个过程涉及精确的位姿控制对里程计精度和低速控制要求很高。建议先把 Nav2 导航到充电座附近跑稳再做最后的对接。5.3 多传感器融合提升定位鲁棒性单纯靠激光雷达在长走廊等特征稀疏环境容易跟丢加入 IMU 做融合能明显改善。ROS2 里有 robot_localization 这类融合包把轮式里程计和 IMU 数据做扩展卡尔曼滤波输出更平滑的位姿估计。配置时要注意各传感器的坐标系定义和协方差参数参数不对融合效果反而更差。5.4 远程监控与数据记录调试阶段记录数据非常重要。ROS2 的 rosbag2 可以把所有话题数据录下来事后回放分析。建议在建图和导航时都录包出问题时能复现。远程监控可以用网页或者手机端订阅机器人状态话题实时看位姿、速度、电量不用一直盯着 RViz2。6. 一些掏心窝子的经验折腾扫地机器人这件事技术上的坑其实都能填真正难的是控制项目范围。我见过太多人一开始想做一个什么都能干的机器人结果每个模块都做了一半没有一个能跑通。正确的做法是先定一个最小可用目标比如能在客厅建出一张完整地图达成之后再逐步加功能。另一个体会是文档和社区比教程更重要。ROS2 的官方文档、各个功能包的 README、GitHub 上的 issue这些才是第一手资料。网上很多教程是几年前的版本对不上照着做反而会引入新问题。遇到报错先搜官方 issue往往有人已经踩过同样的坑。最后说个心态问题自己攒的机器人第一版能跑起来就已经成功了别指望它一开始就比成品好用。我第一台机器建图歪歪扭扭、导航经常卡住但每次修好一个问题对整套系统的理解就深一层。这种从黑盒到白盒的掌控感才是自己动手最大的回报。等你把 SLAM 和 Nav2 都跑通之后再回头看那些成品扫地机器人你会发现它不再神秘而是一个你可以随时拆解和改进的系统。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进