1. 三条路线怎么选:先想清楚你要的是玩具、工具还是平台
很多人第一次动“自己搞一台扫地机器人”的念头,都是被两件事刺激的:一是商用量产机越卖越贵,旗舰款动辄四五千,功能还锁在厂商的云服务里;二是刷到别人用 ROS2 加激光雷达跑 SLAM 建图的视频,觉得这东西好像也没那么神秘。但真到自己动手,第一个卡点往往不是代码,而是路线选择——你到底是想省事、想学技术,还是想做一个能长期折腾的平台。
我把这件事拆成三条路线,分别对应三种完全不同的人群和预算。你先对号入座,再往下看具体怎么落地。
1.1 路线一:买现成底盘加装大脑,适合想快速看到效果的人
这条路的思路很直接:扫地机器人的运动底盘、电机驱动、电池管理、充电桩对接这些机械和电气部分,直接买现成的。市面上有大量“机器人底盘”或者“扫地机开发套件”在卖,通常自带串口或 CAN 接口,你只需要外挂一台算力板(比如树莓派、Jetson 或者迷你主机),跑 ROS2,接上激光雷达,就能开始建图和导航。
为什么推荐新手先走这条?因为扫地机器人最难的部分从来不是算法,而是底盘可靠性。轮子打滑、悬崖传感器误判、边刷卡死、电池过放,这些物理层面的坑,够你调三个月。买现成底盘等于把这一大块风险外包出去,你专注在 ROS2、SLAM、Nav2 这些软件栈上。
成本上,一个带驱动和电池的基础底盘大概几百到两千不等,算力板看你要不要跑视觉,Jetson Orin Nano 级别大概两千多,普通树莓派 4B 几百块也能跑 2D 激光 SLAM。激光雷达是另一个大头,后面单独讲。
注意:买底盘时一定要问清楚通信协议和供电输出。很多便宜底盘只给一个串口,不给你 5V/12V 的对外供电,你外挂雷达和算力板还得自己加 DC-DC 模块,这是新手最容易忽略的细节。
1.2 路线二:从零攒一台,适合想彻底搞懂每一层的人
如果你目标是“我全都要懂”,那就从结构件开始攒。铝型材做框架,直流减速电机加编码器做驱动,电机驱动板用常见的双 H 桥或者专用驱动模块,主控用 STM32 跑底层运动控制,再通过串口和上位机 ROS2 通信。这条路的魅力在于,你对每一个环节都有完全的控制权,出了问题你知道去哪一层找。
但我要泼一盆冷水:这条路的时间成本极高。光是让四个轮子按指定速度转起来、编码器读数准确、PID 调稳,可能就要花掉你一两个周末。再加上电池选型、充电管理、碰撞检测,真正跑通 SLAM 可能是一个月以后的事。
不过它的回报也很实在。当你亲手把cmd_vel话题里的速度指令变成轮子的实际转动,再看着 RViz2 里机器人模型跟着动起来,那种理解深度是买底盘永远给不了的。而且后续你想加机械臂、加视觉、换更好的雷达,整个系统都是你自己的,扩展性拉满。
1.3 路线三:旧扫地机改造,性价比最高但坑也最杂
家里有台吃灰的旧扫地机?别扔,这是第三条路。拆开它,找到主控板和电机驱动,很多时候你能直接接管电机,或者干脆保留原主板只做供电和驱动,外挂自己的算力板。这条路的成本最低,因为底盘、电池、充电桩全是现成的,你只需要加雷达和大脑。
但坑在于逆向工程。不同品牌的主板接口、通信协议、传感器定义完全不一样,网上资料参差不齐。你可能要拿万用表一根根测线,用逻辑分析仪抓串口数据,甚至要自己写驱动去读原来的传感器。对于有电子基础的人来说这是乐趣,对于纯软件背景的人可能就是噩梦。
我的建议是:如果你手上正好有一台旧机器,又愿意花时间研究硬件,这条路很值;如果你只是想学 ROS2 和 SLAM,别在这上面耗,直接走路线一。
| 路线 | 适合人群 | 预算区间 | 上手时间 | 技术收获 |
|---|---|---|---|---|
| 现成底盘加装 | 软件背景、想快速见效 | 1500-4000 | 1-2 周 | ROS2 应用层 |
| 从零攒机 | 软硬通吃、想彻底掌握 | 2000-6000 | 1-3 个月 | 全栈理解 |
| 旧机改造 | 有电子基础、预算敏感 | 500-2000 | 2 周-2 个月 | 逆向与集成 |
2. 攒机路线图:从一堆零件到能跑 SLAM 的完整清单
选定路线之后,接下来就是具体的攒机路线图。我按“感知—决策—执行—供电”四个层面来拆,这样你买零件的时候不会漏项,也不会买重复。
2.1 感知层:LiDAR 怎么选,2D 还是 3D
激光雷达是扫地机器人 SLAM 的核心传感器。市面上常见的有两大类:2D 单线雷达和3D 多线雷达。
2D 雷达便宜、数据轻、SLAM 成熟,典型代表是思岚、镭神这些品牌的单线产品,几百到一千多。它扫的是一个平面,对于扫地机这种在平地上跑的场景完全够用。ROS2 里用sllidar_ros2或者lslidar驱动,发布sensor_msgs/LaserScan,直接喂给 SLAM Toolbox 或者 Cartographer。
3D 雷达贵、数据量大、对算力要求高,比如 Livox 系列或者多线机械式雷达。它能给你三维点云,适合做三维建图和更复杂的避障。但如果你只是想让机器人在家里跑,2D 雷达加一个 IMU 就够了,3D 雷达属于杀鸡用牛刀。
提示:买雷达时注意接口和供电。很多雷达是串口或者网口输出,网口雷达配置 IP 的时候容易和你的局域网冲突,建议单独给雷达配一个网段,或者用直连的方式。
关于 LiDAR 和 IMU 的标定,这是很多人会忽略的一步。2D 雷达和 IMU 之间的外参(安装位置和角度)如果不准,建图会歪,导航会飘。标定方法有手动测量加软件微调,也有用lidar_imu_calib这类工具自动标定的。我的经验是,先手动量好雷达和 IMU 的相对位置,写进 URDF,然后跑一段直线和旋转,看建图是否闭合,不闭合再微调。
2.2 决策层:算力板选型与 ROS2 版本匹配
算力板决定了你能跑多重的算法。树莓派 4B/5 能跑 2D SLAM 和 Nav2 的基本功能,但如果你要跑视觉或者 3D 建图,就得上 Jetson 或者 x86 迷你主机。
ROS2 版本和 Ubuntu 版本是绑定的。目前主流是ROS2 Humble 配 Ubuntu 22.04,这是长期支持版本,资料最多,社区最活跃。如果你看到有人用 Ubuntu 26.04 装 ROS2,那大概率是尝鲜或者特定需求,新手别跟。
安装 ROS2 的时候,国内网络环境是个现实问题。packages.ros.org有时候会抽风,报获取:1 http://packages.ros.org/ros2/ubuntu jammy inrelease 错误。解决办法是换源,用国内镜像,或者用鱼香 ROS 的一键安装脚本,这个在社区里口碑很好,省去很多配置麻烦。
# 鱼香 ROS2 一键安装(示例,具体以官方最新脚本为准) wget http://fishros.com/install -O fishros && . fishros装完之后,ros2 topic list能列出话题,rviz2能打开,就算环境通了。
2.3 执行层:底盘驱动与 ROS2 控制接口
执行层就是把 ROS2 的cmd_vel变成轮子的转动。如果你买的是现成底盘,通常厂商会提供一个 ROS2 驱动包,你启动之后,/cmd_vel话题就能控制底盘。如果是自己攒的,你需要写一个节点,订阅geometry_msgs/Twist,然后通过串口把速度指令发给下位机。
这里的关键是运动学模型。两轮差速是最常见的,你需要根据轮距和轮径,把线速度和角速度分解成左右轮的速度。公式很简单:
- 左轮速度 = 线速度 - 角速度 × 轮距 / 2
- 右轮速度 = 线速度 + 角速度 × 轮距 / 2
但实际写代码的时候,还要考虑编码器反馈、PID 闭环、死区补偿。我踩过的坑是:轮子在小速度下不转,因为电机有静摩擦,PWM 给低了没反应。解决办法是在驱动里加一个最小 PWM 阈值,或者用闭环控制让 PID 去补。
2.4 供电层:电池、DC-DC 与充电管理
供电是攒机里最容易被低估的部分。雷达、算力板、底盘电机,三者电压和电流需求都不一样。雷达通常 5V 或 12V,算力板 5V 或 12V,电机可能是 12V 或 24V。你需要一个电池组加多路 DC-DC 降压模块。
电池选锂电池,电压根据电机来定,容量看你要跑多久。一般 12V 10Ah 能跑一两个小时。充电管理要么用现成的充电模块,要么保留原底盘的充电桩对接。如果你走旧机改造路线,原电池和充电系统直接复用,这是最省事的。
注意:锂电池一定要加保护板,过放和过充都会出问题。我见过有人为了省事直接裸电池上,结果一次过放电池就鼓包了。安全第一,别在这上面省钱。
3. 软件栈实操:ROS2、SLAM 与 Nav2 的完整链路
硬件攒好只是开始,真正让机器人“活”起来的是软件。这一部分我按数据流从传感器到运动控制,把整条链路串一遍。
3.1 ROS2 基础:话题、服务、动作,先搞懂再动手
ROS2 的通信机制有三种:话题(Topic)、服务(Service)、动作(Action)。话题是发布订阅,适合传感器数据流;服务是请求响应,适合配置查询;动作是带反馈的长任务,适合导航这种需要过程监控的场景。
新手最容易懵的是“我该用哪个”。简单记:数据一直在流的用话题,一次性配置的用服务,需要知道进度的用动作。Nav2 里导航就是动作,你发一个目标点,它一边走一边给你反馈,到了告诉你成功,卡住了告诉你失败。
创建 C++ 功能包是 ROS2 开发的基本功:
ros2 pkg create --build-type ament_cmake my_robot_pkg --dependencies rclcpp std_msgs然后写节点、配 CMakeLists、编译、source,这一套流程走通一次,后面就是复制粘贴改逻辑。
3.2 SLAM 建图:从 LaserScan 到栅格地图
SLAM 建图的目标是让机器人一边走一边画地图。ROS2 里最常用的是SLAM Toolbox,它订阅/scan和/odom,发布/map和map->odom的 TF 变换。
启动 SLAM Toolbox 之后,你在 RViz2 里能看到地图一点点长出来。这时候你需要手动控制机器人走一圈,或者写一个探索节点让它自己跑。建图质量取决于几个因素:雷达安装高度、IMU 数据质量、轮式里程计精度。
我实测下来,轮式里程计漂移是最大的问题。走直线还好,一转弯就偏。解决办法是融合 IMU,用robot_localization包做 EKF,把轮速和 IMU 数据合起来算位姿。这样建出来的图闭合度好很多。
关于八叉树地图导航,如果你用 3D 雷达,可以用octomap把点云转成八叉树,再做三维导航。但说实话,家用扫地机场景,2D 栅格地图加代价地图就够了,八叉树属于进阶玩法。
3.3 Nav2 导航:行为树、代价地图与路径规划
Nav2 是 ROS2 的导航框架,核心是行为树(Behavior Tree)。它把导航拆成一系列动作:规划路径、跟随路径、恢复行为。行为树的好处是你可以自定义逻辑,比如“如果卡住了,先后退再旋转,还不行就重新规划”。
Nav2 的配置主要在nav2_params.yaml里,关键参数包括:
robot_radius:机器人半径,影响代价地图膨胀inflation_radius:膨胀半径,太小会撞,太大会卡max_vel_x、max_vel_theta:最大速度和角速度planner_plugins:路径规划器,默认用 NavFn 或 Smac
代价地图分全局和局部。全局用静态地图加膨胀层,局部用雷达实时数据加障碍层。调参的时候,我建议先把速度调慢,确保能走稳,再逐步提速。
提示:Nav2 的行为树可以用 Groot 可视化编辑,但新手先用默认的
navigate_to_pose_w_replanning_and_recovery.xml就行,别一上来就自己画树。
3.4 仿真先行:Gazebo 里跑通再上真机
如果你硬件还没攒好,或者想先验证算法,Gazebo 是最好的起点。ROS2 Humble 配 Gazebo 可以模拟一个带雷达的差速机器人,你可以在仿真里跑 SLAM 和 Nav2,把参数调好,再移植到真机。
仿真里跑通的标准是:机器人能在未知环境里建图,然后给定目标点能自主导航过去,遇到障碍能绕开。这个过程能帮你排除 80% 的软件配置问题,上真机的时候就只剩硬件调试了。
4. 常见问题与排查技巧实录
这一部分是我和身边朋友踩过的坑的汇总,按问题现象、可能原因、排查方法、解决方案来整理。
4.1 雷达不亮或驱动报错
现象:启动雷达驱动,报[ERROR] query livox lidar fw type failed, the status:-4或者干脆没数据。
排查:先看供电,万用表量雷达输入端电压是否达标。再看通信,网口雷达 ping 一下 IP,串口雷达用ls /dev/tty*看设备有没有识别。最后看权限,串口设备通常需要dialout组权限。
解决:供电不足就换 DC-DC;IP 不通就检查网段;权限问题就sudo usermod -aG dialout $USER然后重新登录。
4.2 建图漂移、地图闭合差
现象:走一圈回来,地图上的墙对不上,或者机器人位置在 RViz2 里越走越偏。
排查:先看里程计,手动推机器人走直线,看/odom的 x 变化是否和实际距离一致。再看 IMU,静止时看角速度是否有漂移。
解决:里程计不准就调轮径和轮距参数;IMU 漂移就做校准;两者都不行就上robot_localization做融合。
4.3 Nav2 规划失败或机器人原地转圈
现象:给定目标点,机器人不动,或者原地打转,日志报Failed to create a plan。
排查:看代价地图,RViz2 里加local_costmap和global_costmap显示,看目标点是不是在障碍物里,或者膨胀层把路堵死了。
解决:调小inflation_radius,或者清理地图上的噪点。如果是局部规划器的问题,换DWB或TEB试试。
4.4 ROS2 安装与网络问题
现象:apt update报错,或者ros2命令找不到。
排查:检查源配置,/etc/apt/sources.list.d/下的 ros2 源是否正确。检查环境变量,source /opt/ros/humble/setup.bash有没有加到.bashrc。
解决:换国内镜像源,或者用鱼香脚本重装。网络问题导致的安装失败,多试几次或者换时间段。
| 问题 | 可能原因 | 快速排查 | 解决方向 |
|---|---|---|---|
| 雷达无数据 | 供电/通信/权限 | 量电压、ping、看设备 | 换电源、改网段、加权限 |
| 建图漂移 | 里程计/IMU 不准 | 推直线看 odom | 调参、融合、校准 |
| 导航失败 | 代价地图/规划器 | 看 costmap 显示 | 调膨胀、换规划器 |
| 安装报错 | 源/网络/环境 | 看源、看 bashrc | 换源、重装、source |
4.5 独家避坑心得
第一个心得:别一上来就追求完美。我见过太多人卡在“雷达要买最好的”“算力板要最强的”,结果半年过去什么都没跑起来。先用便宜 2D 雷达加树莓派跑通全流程,再逐步升级,这才是正路。
第二个心得:日志是你的朋友。ROS2 的日志级别可以调,--ros-args --log-level debug能看到很多细节。遇到问题先看日志,比瞎猜快十倍。
第三个心得:版本一致性。ROS2 版本、Ubuntu 版本、驱动包版本,三者要对齐。我试过用 Humble 的包在 Foxy 上跑,编译都过不去。老老实实按官方推荐组合来,省心。
第四个心得:机械结构别凑合。轮子不圆、轴承晃动、雷达装歪,这些机械问题软件补不回来。攒机的时候,结构件该花的钱要花,不然后面调算法调到怀疑人生。
5. 从能跑到好用:后续扩展与个人体会
机器人能建图能导航之后,你会发现它离“好用”还有距离。比如它不会自己充电,不会绕开电线,不会识别房间。这些就是后续扩展的方向。
自动充电对接需要红外或者视觉引导,回到充电桩附近再精确对接。这个在 ROS2 里可以用nav2加自定义行为树实现,先导航到充电桩附近,再切换到对接模式。
动态避障需要更好的局部规划器,或者加视觉传感器识别低矮障碍。2D 雷达看不到地上的电线、袜子,这是它的物理局限。加一个深度相机或者超声波,能补上这个盲区。
多房间建图和语义地图是另一个方向。你可以给地图打标签,告诉机器人“这是客厅”“这是厨房”,然后让它按房间导航。这需要结合视觉或者手动标注,属于进阶玩法。
我个人在实际操作中的体会是,攒一台扫地机器人最大的收获不是最后那台机器,而是你对“感知—决策—执行”这个闭环的理解。你会知道雷达数据怎么变成地图,地图怎么变成路径,路径怎么变成轮子的转动。这种从传感器到执行器的完整链路认知,是看多少篇教程都换不来的。
最后再分享一个小技巧:每次改完配置,先跑仿真验证,再上真机。仿真里撞墙不要钱,真机撞墙可能就要换零件了。这个习惯能帮你省下不少时间和银子。