从零打造ROS2扫地机器人:三条路线、硬件选型与SLAM导航全攻略 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-40001-2 周ROS2 应用层从零攒机软硬通吃、想彻底掌握2000-60001-3 个月全栈理解旧机改造有电子基础、预算敏感500-20002 周-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-DCIP 不通就检查网段权限问题就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换源、重装、source4.5 独家避坑心得第一个心得别一上来就追求完美。我见过太多人卡在“雷达要买最好的”“算力板要最强的”结果半年过去什么都没跑起来。先用便宜 2D 雷达加树莓派跑通全流程再逐步升级这才是正路。第二个心得日志是你的朋友。ROS2 的日志级别可以调--ros-args --log-level debug能看到很多细节。遇到问题先看日志比瞎猜快十倍。第三个心得版本一致性。ROS2 版本、Ubuntu 版本、驱动包版本三者要对齐。我试过用 Humble 的包在 Foxy 上跑编译都过不去。老老实实按官方推荐组合来省心。第四个心得机械结构别凑合。轮子不圆、轴承晃动、雷达装歪这些机械问题软件补不回来。攒机的时候结构件该花的钱要花不然后面调算法调到怀疑人生。5. 从能跑到好用后续扩展与个人体会机器人能建图能导航之后你会发现它离“好用”还有距离。比如它不会自己充电不会绕开电线不会识别房间。这些就是后续扩展的方向。自动充电对接需要红外或者视觉引导回到充电桩附近再精确对接。这个在 ROS2 里可以用nav2加自定义行为树实现先导航到充电桩附近再切换到对接模式。动态避障需要更好的局部规划器或者加视觉传感器识别低矮障碍。2D 雷达看不到地上的电线、袜子这是它的物理局限。加一个深度相机或者超声波能补上这个盲区。多房间建图和语义地图是另一个方向。你可以给地图打标签告诉机器人“这是客厅”“这是厨房”然后让它按房间导航。这需要结合视觉或者手动标注属于进阶玩法。我个人在实际操作中的体会是攒一台扫地机器人最大的收获不是最后那台机器而是你对“感知—决策—执行”这个闭环的理解。你会知道雷达数据怎么变成地图地图怎么变成路径路径怎么变成轮子的转动。这种从传感器到执行器的完整链路认知是看多少篇教程都换不来的。最后再分享一个小技巧每次改完配置先跑仿真验证再上真机。仿真里撞墙不要钱真机撞墙可能就要换零件了。这个习惯能帮你省下不少时间和银子。