ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

开源扫地机器人全栈拆解:从传感器融合到SLAM的移动机器人工程课

开源扫地机器人全栈拆解:从传感器融合到SLAM的移动机器人工程课 你家里那台每天自动回充、自己干活、自己找充电座的扫地机器人其实根本不算“家电”它是一台被包装成家电的移动机器人。真正有意思的是这个品类背后藏着大量开源项目和开源资料——从底盘电机驱动、传感器融合、SLAM建图到路径规划和智能避障每一层拿出来都是一门课。如果我告诉你把一台开源扫地机器人完整拆一遍差不多等于系统修完了一整套机器人工程的核心课程你会不会重新看它一眼这篇内容就是干这件事的把开源扫地机器人当一台“行走的教科书”从硬件底层一直拆到应用算法把每一层在做什么、为什么这么做、怎么上手都讲清楚。适合正在学机器人方向的在校生、想转嵌入式或ROS开发的工程师还有那些对机器人好奇但不知道从哪下手的全栈开发者。读完你会发现扫地机器人不是一个产品它是一个把所有技术串起来的工程载体而开源刚好把最贵的那部分——课程和代码——免费摆在了你面前。1. 项目概述为什么一台扫地机器人的价值抵得上一套课程1.1 核心需求解析扫地机器人的任务并没有表面看起来那么简单扫地机器人要干的事听上去就一句话“把地扫干净”。但这背后是一整个闭环它得先知道自己在哪里知道地面哪里扫过、哪里没扫过规划一条不漏扫的路又要避开桌子腿、拖鞋、电线这些障碍物最后还要在电量低的时候自己找充电座回去。这里每一步都对应机器人工程里最经典的分支。定位和建图是SLAM同时定位与建图路径规划是导航技术避障和识别目标属于感知底盘控制和电机转速调节属于运动控制App同步和地图下发属于物联网和分布式系统。一台售价几百块的扫地机器人等于在几十瓦的功耗里把感知、决策、执行全部跑通了。你要是能自己搭一台、改一台、调一台你就把这些能力都过了一遍。这就是它作为“课程载体”的底层逻辑。1.2 为什么选扫地机器人而不是无人车或机械臂选学习载体这件事很关键。无人驾驶这个方向当然更“全栈”但成本高到普通人接触不到真实系统而且技术栈里大量内容是云端、高精地图、多传感器标定这类重型工程入门门槛极高。机械臂属于工业控制领域核心在动力学和轨迹规划感知相对简单学的方向比较单一。扫地机器人恰好处在中间复杂度上足够展现机器人技术的全链路又不用装一堆昂贵的传感器家里就能跑。相比之下扫地机器人有一条非常平滑的学习曲线先读懂别人开源的程序再在仿真里复现然后换成自己的底盘跑起来最后改良某个模块。这个路径在无人车上很难复现因为真车稍微跑偏就可能出事故而扫地机器人翻车了翻过来继续调就行。我经常跟人说把扫地机器人调好的过程本质上就是在低成本地“犯工程错误”。1.3 开源生态地图一台扫地机能拆出哪些公开资源开源扫地机器人这个领域资源可以分成几层。最底层是电机驱动和嵌入式固件大量使用STM32或ESP32芯片仓库里都是寄存器配置、PWM输出、PID控制这类代码再往上是ROS机器人操作系统相关的软件栈包含传感器驱动、SLAM建图、导航框架顶层还有数据集、训练模型和仿真环境甚至有完整的机器人SDK。举例来说TurtleBot系列是开源移动机器人中最经典的教学平台从官方到社区都有完整的建图和导航教程支持Gazebo仿真环境下完整体验Husarion ROSbot系列把开源硬件和ROS集成得比较完善真机方案也成熟还有大量关于FOC矢量控制、卡尔曼滤波、代价地图参数调优的开源资料散落在GitHub和社区里。把这一整套资源用起来你就可以从零拼装出自己的扫地机器人。这也是“全栈拆解”真正的意思不是静态地看一台机器而是顺着它的代码和电路把整个工程链条走一遍。2. 系统架构分层拆解一台扫地机器人是怎么组织起来的2.1 整体设计思路为什么机器人系统必须分层如果你打开一台扫地机器人的历史开发记录会发现最明显的特征就是分层。底层是驱动轮和传感器中间是实时控制器再上面是运行算法的主处理器最顶上还有云端和手机App。这个分层不是行业刻意为之而是工程复杂度倒逼出来的必然。扫地机器人需要在毫秒级别响应障碍物但又需要较长时间计算一条全局路径这两种需求天然就不在同一个处理器上。通常的做法是用一颗单片机做底层实时控制处理电机PWM、编码器读取、碰撞检测用一颗带有Linux系统的应用处理器跑ROS节点做建图、定位、路径规划两层之间用串口或CAN总线通信。这样既保证了实时性又让算法开发不用去抠底层寄存器。开源项目里这个边界尤其清晰所以拆解一台开源扫地机器人本质上就是在拆解一整套“软件定义机器人”的架构。2.2 底层机械结构与驱动系统是怎样配合的先看机械和驱动。绝大多数扫地机器人使用四驱结构或者后轮驱动加万向轮形式核心传动件是左右两个驱动轮。两个轮子独立控制转速通过转速差实现转向这种结构叫差速驱动。它简单、成本低、在室内平地上运动效率高扫地机器人的圆形机身配合沿墙导航也主要是基于差速运动模型实现的。驱动系统里最关键的部件是电机和减速器。家用扫地机器人用的是带霍尔编码器的直流减速电机编码器每转一圈输出几十到几百个脉冲通过这些脉冲可以推算轮子转了多少圈。开路电机控制不难难的是闭环轮子因为地面摩擦、地形高低会有微小的打滑或空转这时候PID控制器会把编码器反馈的实际速度和目标速度比较动态调节PWM占空比把速度拉回来。这个“测量-比较-修正”的回路是机器人运动控制的第一课也是后续定位精度的基础。2.3 中间层主控芯片、实时操作系统与通信总线中间层承担“控制大脑”的职责。常见的开源方案里这个位置可能是STM32系列单片机也可能是ESP32这类带无线功能的芯片。它运行的往往是一个RTOS实时操作系统比如FreeRTOS或者在裸机上写一个状态机。这层要处理的事情特别杂不断读取编码器脉冲、执行PID计算、处理红外或超声传感器信号、接收上层发来的速度指令、再把里程计数据回传给上层。实时性是这个层级的生命线。比如PID控制环路的频率至少要到几十赫兹甚至上百赫兹中断服务程序必须在固定时间内响应否则电机输出就会抖动。开源项目里经常能看到这样的代码结构定时器中断里采集编码器并更新PID输出主循环里处理通信协议和状态切换。这种“中断驱动主循环”的模型是嵌入式开发的经典范式也是很多从纯软件转过来的人最容易忽略的地方——上位机程序可以几毫秒卡顿无所谓但机器人卡顿一毫秒轮子就可能已经跑偏了。2.4 上层ROS中间件是怎么把硬件抽象成软件话题的再往上一层就是运行在Linux系统上的ROS。ROS不是操作系统本身它是一套中间件或者说是“机器人界的操作系统接口标准”。它把传感器数据、控制指令、地图信息全部抽象成“话题”——每个节点可以发布话题也可以订阅话题。比如激光雷达驱动节点持续发布激光扫描数据SLAM节点订阅这些数据再发布地图和位姿导航节点订阅地图和位姿计算目标点后发布速度指令底盘驱动节点订阅速度指令发送给底层单片机执行。这种机制带来两个巨大好处。第一模块解耦想换一个SLAM算法就启动新节点替换旧节点不需要改动硬件代码第二调试方便任何一个话题都可以用命令行单独看内容或回放。开源社区里大量的机器人项目都基于ROS组织代码没有ROS之前你调试一台机器人基本靠猜有了ROS之后每一层的数据流动都是可见的。可以说掌握ROS的话题、服务、参数机制是进入现代机器人开发的门票。2.5 应用层导航、感知、App与云端的联动逻辑应用层是用户能看到的部分也是全栈里复杂度最高的地方之一。扫地机启动后传感器数据经由底层处理向上传递ROS导航栈会同时维护三样东西一张栅格地图、机器人在地图中的位姿、以及代价地图中对障碍物的膨胀处理。有了这三样导航节点才能把全局路径和局部路径规划出来避开动态出现的拖鞋和猫咪。与此同时传感器里的处理结果还会通过Wi-Fi上传到手机App或云端用于显示清扫进度、下发清扫区域指令。这就是物联网层级的内容了。开源项目里一般会把App端做成Flutter或安卓原生云端则用MQTT之类轻量协议做消息转发。到这里一台扫地机就形成了一个从单片机到云端的完整技术栈。所谓“全栈”指的就是这个纵切面而开源项目恰好把这个纵切面的每一层都晒在了阳光下。3. 核心子系统解析与实操要点3.1 SLAM与定位扫地机器人是怎么记住房间的扫地机器人最核心的技术之一就是SLAM。SLAM听起来玄妙拆开了就两件事机器人一边移动一边推测自己在哪同时把周围障碍物画进地图里——这两个过程互相依赖因为定位需要地图建图又需要知道姿态。目前室内扫地机器人最主流的是2D激光SLAM也就是使用单线激光雷达扫描平面实时构建二维栅格地图。开源社区里常见的方案是Gmapping和Cartographer。Gmapping基于粒子滤波原理是用一大批粒子代表机器人可能的位置每次移动和扫描后根据匹配度更新粒子的权重保留高权重粒子、淘汰低权重粒子。它实现简单、对算力要求低很适合教学。Cartographer则基于图优化把每一帧扫描结果当成节点把位姿之间的关系当成约束最后最小化整个图的误差。它在走廊、大空间里表现更好但也更吃算力。我自己的建议是入门先用Gmapping把流程跑通等理解了粒子滤波之后再碰Cartographer体会图优化的魅力。3.2 传感器融合为什么只靠轮子编码器走不直扫地机器人里一定会有一个现象即使轮子转速完全一致机器人依然会跑歪。原因是轮子可能打滑、地毯阻力不同、电池电压下降导致电机响应变慢。此时如果只依赖轮编码器推算位置地图就会扭曲。所以扫地机器人都不会只靠“轮式里程计”而会加上IMU惯性测量单元和激光雷达的数据做融合。传感器融合的核心算法是卡尔曼滤波。卡尔曼滤波的思路非常直观用上一个时刻的位置和速度去预测此刻的位置再用当前传感器观测去修正预测结果两者按照不确定性大小取加权平均。这个计算量极小适合单片机或者轻量节点运行。如果要说一个新手最容易忽略的点那就是IMU的零漂问题。陀螺仪即使静止不动输出也在缓慢变化如果不做零偏校准地图旋转角会慢慢漂出去。很多开源项目的调试过程里“校准IMU”排在最前面就是这个原因。3.3 路径规划与避障不漏扫是怎么做到的路径规划可以分成全局规划和局部规划两层。全局规划负责在已知地图上找出从当前位置到目标点的最优路径常用的算法有A*和Dijkstra本质都是在栅格地图上做搜索。扫地机器人的“弓字形清扫”就是一种全局策略——在房间内部按一条条平行线往复走走到边界再转行。而“沿边清扫”则走的是全局规划中的轮廓跟踪。这两个策略提前在地图上规划好机器人才不会东扫一块西扫一块。局部规划则处理动态障碍物开源导航栈中常用的DWA动态窗口法会在当前速度附近采样一系列可能的“速度组合”逐个模拟机器人未来一小段时间的轨迹然后按“离目标远近、避障安全、方向变化小”打分选分数最高的速度执行。扫地机碰到突然窜过来的宠物靠的就是这种高频局部规划才能及时刹车转向。实操中有一个最常见的坑膨胀半径调太大机器人离墙远远的就不敢靠近扫不到边角调太小又会频繁撞障碍物。这个参数真的值得花一整个下午去调。3.4 感知与场景理解扫地机器人的AI能力在哪里近几年出现的“AI扫地机器人”核心能力已经不只是识别障碍物而是理解“这是什么”。这靠的是深度学习视觉模型。开源方案中常用YOLO系列做物体检测在嵌入式端用轻量化模型识别拖鞋、电线、宠物便便这类需要避开或特殊应对的物体对于地面材质地板、地毯、瓷砖则可以通过图像分类模型判断进而调整吸力或者是否该洗拖布。一条比较典型的开源实现路线是把RGB相机图像送入一个部署了YOLO模型的节点物体检测结果以边界框和类别信息发布成ROS话题导航程序在局部代价地图上把这些物体所在的区域标成高代价机器人就会绕开。这里有个工程细节容易被忽视推理速度和机器人运动速度的关系。如果模型推理要200毫秒机器人以0.3米/秒前进它在看到障碍物到做出反应之间已经走了6厘米避障的冗余空间就必须留够。所以实际项目中轻量化模型剪枝和TensorRT部署往往才是大头工作模型精度反而不是首要瓶颈。4. 仿真先行把整套机器人系统搬进电脑里4.1 为什么先仿真零成本试错才是最好学习路径我在接触各种开源机器人项目时最常说的一句话就是先仿真再真机。仿真环境可以让一台没有硬件的机器人出现在物理引擎里它同样有摩擦、有惯性、甚至有传感器噪声。做仿真这件事本身就是在做机器人工程。因为环境的物理规律一样控制器参数和算法逻辑可以直接复用唯一区别是它不烧钱、不撞坏东西。我见过太多人直接买零件回来组装完还没通电就先烧了板子或者一启动就跑飞撞墙。先仿真至少能保证一件事软件逻辑是真的通着的。仿真里能跑通建图和导航你的核心算法能力就已经建立了剩下的只是硬件的适配和调试。4.2 仿真环境搭建记录以TurtleBot3和Gazebo为例这一套仿真环境目前非常成熟。Gazebo是提供物理仿真的开源工具RViz是可视化工具TurtleBot3是仿真和真机都能跑的经典平台。在ROS 2中的实操流程大致如下。先安装依赖在Ubuntu 22.04下装ROS 2 Humble和Gazebo相关组件然后安装TurtleBot3的仿真包。接着设置机器人型号变量比如waffle或burger配置启动仿真世界。一条可以完整复现的流程大致是sudo apt install ros-humble-desktop ros-humble-gazebo-ros-pkg sudo apt install ros-humble-turtlebot3-gazebo ros-humble-turtlebot3-navigation2 export TURTLEBOT3_MODELwaffle ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py启动之后你会看到Gazebo窗口里出现一台小车和布置了障碍物的房间再打开另一个终端启动建图程序用键盘遥控小车轮流走动这个过程中你就能看到激光雷达扫描点被逐渐织成一张栅格地图。仿真里默认的传感器噪声模型会模拟雷达测距误差和里程计的累积误差所以别以为仿真就是理想环境它已经足够你踩一遍“算法看起来没问题但地图就是歪的”这种经典坑了。4.3 仿真与真机的真实差距哪些可以复用、哪些要重新调仿真能复用的是算法逻辑和代码结构不能复用的是所有跟硬件特性相关的参数。仿真里的电机响应不会像真机那样有延迟电池电压不会因为吸尘器的负载而突然下降激光雷达在阳光下也不会失效。真机上的问题往往属于“未知的未知”——电机线虚接、雷达扫描到裙边被遮挡、地毯颜色导致视觉识别异常这些是不可能在仿真的理想环境里提前预料到的。所以在规划学习路径时我倾向于这样的节奏仿真里跑通整个流程理解每个节点之间的关系调出让自己满意的地图真机上则优先验证硬件可靠性和标定把仿真里建立起来的软件栈逐步替换掉底层的模拟数据换成真实的传感器和驱动接口。真机比仿真难的地方不在算法而在“真实带来的鲁棒性”。5. 从仿真到真机开源扫地机器人的完整搭建流程5.1 真机方案的两条可行路线低成本拼装与集成开发平台选真机方案时开源圈里大概有两条路线。第一条是低成本拼装路线花几百到一千多元买一块支持Arduino或STM32的机器人底盘常见方案是两轮差速底盘加编码器配一个单线激光雷达常见型号是思岚A系列或EAI系列再找一个带有Linux系统的上位机——可以用树莓派、Jetson Nano或者闲置的迷你电脑。软件栈直接用ROS或ROS 2把官方驱动的源码拉下来编译。第二条路线是直接使用集成的开源教育机器人平台比如Husarion ROSbot系列。ROSbot这种平台的好处是硬件集成度高出厂就带有激光雷达、深度相机、IMU、麦克纳姆轮或全向轮官方仓库里开源了包括底盘固件、驱动、SDK和完整示例在内的全部代码。省去了大量接线和折腾的环节可以让你把主要精力放在上层算法和系统集成上。我个人的观察是如果目标是快速体验全栈选集成平台如果目标是练嵌入式硬功夫选拼装路线。两条路并不冲突甚至可以先用拼装路线练一遍再用集成平台做上层研究。5.2 从刷机到跑通真机组装与运行的核心步骤以ROSbot系列这类集成平台的常见流程为例拿到手之后要做的几个里程碑步骤很清楚。第一步是给上位机刷入系统镜像官方通常会提供预装了ROS的镜像烧录到板载存储或外接SSD第二步是校准底盘这一步通常在官方SDK里有一条校准命令让机器人原地旋转和直线往返固件会自动记录左右轮速差异生成补偿参数第三步是启动底盘节点和雷达驱动检查话题数据是否正常发布——一个常见的检查方法是用RViz订阅雷达话题如果你能看见完整的扫描点云而没有缺角说明设备基本正常。接下来要做的就是建图和导航。推荐先把官方示例里的建图配置直接跑起来拿到一张图之后再修改导航参数。仿真里你可能已经练过了真机上的差异会更加明显——你会发现地图的边角不那么锐利噪点更多机器人的位姿在地图上会有一点点抖动。这些都是正常的它不是代码错误而是传感器真实噪声的体现。5.3 参数标定与地图质量优化那些不会写进教程的细节真机制作地图的质量很大程度上取决于几个参数的标定这里分享几个我实际调试中反复用到的经验。第一激光雷达的安装高度和扫描平面要与底盘平行很多地图扭曲其实是雷达装歪了而不是算法问题可以用水平尺确认。第二轮式里程计需要做“轮间距校准”和“每轮回转脉冲数校准”最简单的标定方法是让机器人走一条已知长度的直线和一条已知角度的旋转然后修正里程计里的两个比例系数。第三IMU零偏必须在每次开机后重标一次而且机器人静止时采集否则地图的旋转会额外漂移。第四建图时机器人速度不要快0.2米/秒左右足够了速度一快激光雷达的数据运动畸变就会变大导致地图边缘出现锯齿。这些标定工作看着琐碎其实它们就是机器人工程里真正值钱的经验积累。每一个参数你都知道“为什么会有”、知道“怎么测”、知道“调错了什么现象”这套工程直觉才是你从“能跑demo”升级到“能干项目”的分水岭。6. 常见问题与排查技巧实录6.1 雷达串口权限打不开这是一个高频问题尤其在Linux系统上表现为启动雷达驱动节点时提示无法打开串口设备。原因通常是当前系统用户不在dialout用户组里。解决办法是先加入用户组再重新登录或者用chmod临时开放串口权限。如果加入用户组后还是打不开就要检查串口绑定是否被其他进程占用了常见的冲突来源是ModemManager自动识别雷达串口。还有一个容易被忽略的点很多雷达模块出厂时在装驱动前需要确认USB转串口芯片的驱动有些国产芯片需要单独装驱动。如果怀疑驱动没生效先接上雷达用系统自带的串口工具或者类似minicom打开对应设备看是否有数据输出这样能快速判断是硬件链路问题还是上层软件问题。6.2 tf树不完整导致建图崩溃ROS系统中机器人各部位之间的坐标转换关系通过tf树维护。启动建图节点后两岸警报一直提示找不到某个坐标转换地图就一直起不来。这通常意味着某个硬件节点没有发布完整的变换关系。处理思路是先用命令查看tf树结构对比官方示例中的预期树找出缺失的坐标变换再去看对应的驱动节点有没有报错。很多时候是因为里程计话题没发布或者雷达坐标系发布频率太低导致建图程序等不到数据超时退出。6.3 地图发生扭曲和重影建图过程中地图某一块出现了重影说明在建图期间机器人的位姿估算发生了跳变。如果发生在转弯处优先怀疑IMU零偏没有校准好如果发生在直线段优先怀疑轮式里程计的标定系数不准确。还有一类情况是雷达扫描到低矮障碍物比如桌腿、小地毯边缘导致匹配失败处理办法是调整雷达安装高度或者开启建图程序里的运动过滤/动态物体滤除功能。6.4 机器人静止但地图持续漂移这是另一个我记忆深刻的案例。机器人停在原地RViz里的激光扫描却在缓慢旋转。第一反应查IMU结果发现设备静止时陀螺仪漂移很小问题其实是底盘固件里的里程计发布线程在脱离PID闭环时持续累积微小计数误差而且这个误差被周期性地发布到了里程计话题上。最后处理方式是在固件里加了一个“机器人静止时清零里程计”的判断逻辑。这个排查过程让我意识到很多“玄学故障”不过是数据源头的小细节把每一路数据源独立打印出来看一遍往往就能定位。6.5 Gazebo仿真中机器人原地抽搐仿真中最常见的意外是机器人原地剧烈抖动像是得了帕金森。原因主要有两类一是PID参数设置过大导致速度振荡二是仿真物理引擎步长与控制频率不匹配。解决办法是先降低PID增益让机器人的速度响应平滑再检查底盘驱动节点的控制发布频率是否和仿真物理步长匹配。很多看起来是硬件问题的现象在仿真里同样会出现早早在仿真里踩一遍这个坑真机上就不会慌。6.6 导航目标点到达不了导航已经启动给了一个目标点机器人也规划出路径了但走着走着开始打转最后放弃。这种问题通常不是路径规划算法本身的错而是代价地图参数配置不合理。比如障碍物膨胀半径太大导致原本可行的窄通道被判定为不可通行或者全局代价地图里分辨率设置太低小缝隙根本没法被表达出来。排查时可以把代价地图单独开着看你就能直观看到哪些区域被标成了不可通行然后就能明确是不是膨胀参数的问题。6.7 真机效果和仿真差距大这是必然现象但差距是可以缩小的。真机和仿真差异最大的地方一是电源电压下降引起的电机响应变化二是地面摩擦系数不一致导致里程计误差三是传感器噪声分布不同。我的经验是在真机上先把硬件层标定做到位再谈上层算法反过来先调算法再处理硬件往往会陷入“错误链路”的怪圈改哪里都没效果。另外一个提升鲁棒性的全局思路是给所有传感器话题加错误监控——话题停止超过一定时间就触发系统报警。这个在真机上尤其重要因为硬件故障从来不会提前跟你打招呼。7. 扩展方向这套工程课程不只是扫地7.1 移动机器人框架的复用价值把开源扫地机器人吃透之后你会发现这套“感知-决策-执行”的框架很容易平移到其他形态的移动机器上。割草机器人本质上是低速室外导航只是把激光SLAM换成了GPS加RTK和视觉融合仓储物流机器人用同样的底盘和导航栈加一个货物托盘就能干配送农业巡检机器人把传感器换成多光谱相机就能排查病虫害。这也是为什么我说扫地机器人的全栈拆解价值不是教会你“洗地”而是教会你“如何让一台机器在真实世界里安全地动起来”。7.2 ROS 2与Nav2从单体架构到可插拔组件如果你现在才刚开始接触开源机器人我强烈建议直接学ROS 2而不是ROS 1。ROS 2在实时性、通信机制和系统可靠性上有根本性提升而且目前主流开源项目和新版本工具链都已经迁到ROS 2上。导航部分的Nav2把建图、定位、全局规划、局部规划、恢复行为拆成了可插拔的独立组件替换算法就像换插件一样。以后再接新硬件或新算法大部分工作只是配置参数和编写适配器。这套组件化的思想本身就是一门软件架构课。7.3 开源贡献怎么看、怎么参与参与开源项目的价值在于读代码和读文档的过程会帮你把技能的拼图补齐。以开源扫地机器人项目为例代码仓库里通常有底盘固件、上位机驱动、导航配置、硬件图纸、通信协议文档你会同时接触到嵌入式、Linux系统、计算机网络、算法和各种工程文档。正规的参与方式是先从使用项目开始跑通之后遇到问题提issue然后读源码尝试修bug最后提交PR。开源社区的项目大都有完善的贡献文档这些文档如何组织、如何约定代码风格、如何做持续集成也都是很好的工程范例。关于开源协议简单提一个知识点GitHub上常见的MIT、BSD、Apache这类宽松协议可以商用GPL类型协议要求衍生作品也开源。如果你是拿开源项目学习那完全不用纠结协议但如果你未来想在商业产品中用这些代码必须逐条读一遍协议原文这是基本职业素养也是每个工程师都该养成的习惯。最后分享一点我自己的体会。做开源机器人项目最奇妙的时刻不是最终扫地机跑起来的那一刻而是第一次在RViz里看着地图被一点点“画”出来的时候。那种感觉像是把一个看不见的空间变成了一个数据模型你会突然明白原来机器人就是这样理解世界的。我第一次调真机时花了整整一周排查导航问题最后发现只是雷达坐标系的X轴和Y轴写反了。这一周很痛苦但它教会了我一个比导航算法更重要的事机器人工程里数据链路每一环都必须亲眼看一遍而开源给了我们逐行检查的机会。如果你也想试就从仿真里的TurtleBot3开始周末花两小时跑通一个demo。等你在Gazebo里看到自己画出的地图时你大概就能理解为什么一台会扫地的机器会被无数工程师看成最好的老师了。
返回列表