ARTICLE DETAIL

资讯详情

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

扫地机器人DIY攒机路线图:从电机选型到SLAM建图导航全解析

扫地机器人DIY攒机路线图:从电机选型到SLAM建图导航全解析 1. 三条路线怎么选先想清楚你要的是玩具、工具还是平台很多人一上来就问“扫地机器人怎么做”其实这个问题问错了。真正该先问的是你想让它干什么。是想花一个周末拼个能满地乱跑的小车还是想做一个能自动建图、规划路径、真正扫干净一个房间的实用设备又或者你压根就是想拿它当机器人操作系统和导航算法的练手平台。目标不同路线完全不一样投入的时间、金钱和踩坑数量能差出十倍。我把常见做法归成三条路线你可以对号入座。路线一成品改装路线。买一台便宜的入门扫地机拆开它的主控用单片机或者树莓派接管电机和传感器。优点是底盘、电机、电池、充电座、尘盒这些机械结构全都现成的省掉大量结构设计和采购的麻烦。缺点是原厂主板往往高度集成电机驱动、传感器接口都是定制的逆向成本不低而且不同批次硬件还可能不一样。这条路适合动手能力强、想快速看到效果、对“从零造轮子”没执念的人。路线二套件组装路线。市面上有不少机器人底盘套件带电机、编码器、轮子、驱动板甚至带激光雷达支架。你只需要加上主控和雷达就能拼出一台能跑的车。这条路线的核心价值在于机械和电气部分已经被验证过你的精力可以集中在软件上。对于想学机器人操作系统、建图和导航的人来说这是性价比最高的选择。路线三全自研路线。从底盘结构、电机选型、驱动电路、电源管理到主控固件、上位机软件全部自己做。这条路最硬核也最容易烂尾。我见过太多人兴致勃勃买了电机和雷达结果卡在电源噪声导致雷达掉线或者卡在轮式里程计标定不准最后车在墙角打转。如果你没有至少一次完整的嵌入式项目经验我不建议一上来就走这条。那为什么标题里要提“攒机路线图”因为不管你选哪条路线最终都会收敛到同一套分层架构底层运动控制 中层传感器与里程计 上层建图导航。区别只是每一层你是买现成的还是自己做。下面这张表可以帮你快速判断。路线机械部分电控部分上位机适合人群典型周期成品改装现成部分自制自制有嵌入式基础2-4周套件组装现成现成自制自制想学软件1-3周全自研全自制全自制自制全栈老手2个月起我个人的建议是第一次做选路线二想做产品化验证选路线一只想学算法甚至可以直接用仿真连车都不用买。后面我会重点围绕路线二展开因为它的知识密度最高而且每一步都能讲清楚“为什么”。2. 攒机路线图从一堆零件到能跑能扫的完整分层2.1 硬件分层别把电机和雷达接在同一块板上扫地机器人的硬件可以粗暴分成三层执行层、感知层、决策层。执行层就是电机和轮子。常见方案是两轮差速加一个万向轮或者两轮差速加两个辅助轮。电机选直流减速电机带编码器编码器用来做轮式里程计。这里有个坑很多便宜电机自带的霍尔编码器分辨率很低一圈只有十几个脉冲算出来的里程计噪声大得没法用。我一般建议选每圈至少390个脉冲的编码器电机配合减速比实际分辨率能到每转几千个脉冲建图时才不会飘。感知层包括激光雷达、惯性测量单元、碰撞传感器、悬崖传感器、超声波等。激光雷达是建图和导航的核心常见的有二维单线雷达和三维雷达。二维雷达便宜、数据轻、适合室内平面建图三维雷达信息丰富但对算力要求高导航栈的配置也复杂得多。新手先用二维雷达把流程跑通再考虑升级。决策层就是上位机通常是一台跑机器人操作系统的计算机比如树莓派、香橙派或者小型工控机。它负责接收雷达和里程计数据运行建图和导航算法然后下发速度指令给下位机。关键原则电机驱动和雷达供电要分开或者至少加足够的滤波。电机启动瞬间的电流波动会通过电源线传导到雷达导致雷达数据丢包甚至重启。我实测过同一块电池直接给电机和雷达供电雷达每隔几秒就报一次通信错误加了一个独立的降压模块和LC滤波之后问题消失。2.2 通信分层下位机只管实时上位机只管算法下位机和上位机之间需要一条稳定的通信链路。常见方案是串口或者USB转串口。下位机跑实时性要求高的任务读取编码器、执行速度闭环、读取碰撞传感器、控制电机。上位机跑计算密集的任务建图、定位、路径规划。通信协议我推荐用简单的定长帧或者带校验的变长帧。比如每帧包含帧头、左右轮目标速度、左右轮实际速度、传感器状态、校验和。下位机收到目标速度后用PID闭环控制电机上位机收到实际速度和传感器状态后更新里程计和状态机。这里有个经验不要在上位机做电机闭环。上位机的操作系统不是实时系统调度延迟可能几十毫秒电机闭环会抖得厉害。下位机用单片机跑裸机或者实时操作系统控制周期稳定在1毫秒到5毫秒电机才顺滑。2.3 软件分层建图、定位、导航各司其职软件层面机器人操作系统提供了现成的建图和导航框架。建图负责把雷达数据拼成地图定位负责在地图中找到自己导航负责规划路径并输出速度指令。建图常用的是SLAM算法二维场景下最成熟的是基于粒子滤波或者图优化的方案。导航框架通常包含全局规划器和局部规划器。全局规划器根据地图和目标点算出一条大致路径局部规划器根据当前雷达数据避障并跟踪路径。这三者之间的关系是建图产生地图定位消耗地图并输出位姿导航消耗位姿和地图并输出速度。任何一个环节出问题车都跑不起来。比如建图飘了定位就会跳导航就会画龙。3. 核心细节解析从电机选型到雷达配置的实操要点3.1 电机与编码器为什么你的里程计总是不准轮式里程计是扫地机器人最基础也最容易出问题的传感器。它的原理很简单根据左右轮转过的圈数结合轮径和轮距推算出车的位置和朝向。但实际中轮径误差、轮距误差、打滑、地面不平都会导致累积误差。我踩过的坑一开始用卷尺量轮径量出来65毫米结果跑一圈下来位置偏了十几厘米。后来才发现轮子外面包了一层橡胶受压后实际有效半径变小了。正确做法是让车直线走一段已知距离反推有效轮径。比如让车走3米编码器读数换算出走了3.2米那有效轮径就是测量值乘以3除以3.2。轮距的标定更麻烦。方法是让车原地转一圈记录左右轮编码器差值反推轮距。具体公式是轮距等于左右轮走过的弧长差除以转过的角度。实际操作中让车转十圈取平均精度会好很多。还有一个隐藏问题编码器方向。左右轮编码器装反了车会原地打转或者走反方向。调试时先单独给一个轮子正转指令看编码器计数是增加还是减少确认方向后再做闭环。3.2 激光雷达安装高度和倾角决定建图质量激光雷达的安装位置直接影响建图效果。理想情况下雷达应该安装在车体最高点附近且扫描平面水平。如果雷达太低会被地上的拖鞋、电线挡住如果雷达倾斜扫出来的墙面会变成斜线建图直接废掉。我见过有人把雷达装在车头最下方结果建出来的地图全是桌腿和椅子腿的碎片因为雷达只能扫到低处。正确的做法是让雷达扫描平面在离地20到30厘米左右这个高度能扫到大部分家具的轮廓又不会被地面杂物干扰。另外雷达的安装要尽量靠近车体旋转中心。如果雷达偏前或者偏后车旋转时雷达数据会有额外的位移定位算法需要额外补偿。虽然现代算法能处理但会增加计算量和不稳定性。3.3 下位机固件用单片机把实时性做到极致下位机我选的是常见的32位单片机跑裸机或者轻量级实时操作系统。核心任务有三个电机闭环、传感器采集、通信。电机闭环用增量式PID控制周期1毫秒。PID参数先调比例再调积分最后加微分。比例太大电机会啸叫积分太大响应会滞后微分太大对噪声敏感。我的经验是先把积分和微分置零慢慢加比例直到电机能快速响应但不振荡然后加一点点积分消除稳态误差微分一般给很小或者不给。传感器采集包括编码器、碰撞开关、悬崖传感器。编码器用定时器的编码器模式读取硬件自动计数不占CPU。碰撞开关用外部中断触发时立即停车。悬崖传感器用ADC读取红外测距模块的模拟量判断是否悬空。通信协议我用的是变长帧加校验和。帧头两个字节长度一个字节命令一个字节数据若干字节校验和两个字节。下位机收到完整帧后解析校验失败直接丢弃。上位机同样处理。这样即使偶尔丢字节也不会解析错乱。3.4 上位机环境机器人操作系统安装与配置上位机我推荐用Ubuntu加机器人操作系统。安装方式有两种二进制包和源码编译。新手直接用二进制包一条命令搞定。但要注意版本匹配操作系统版本和机器人操作系统版本必须对应否则依赖会出问题。安装完成后先跑一个简单的例子验证环境。比如启动一个话题发布者和订阅者看看能不能通信。然后安装建图和导航相关的功能包。这些包通常包含雷达驱动、建图算法、导航框架、可视化工具。可视化工具很重要它能把雷达数据、地图、路径、车的位置都画出来。调试时盯着可视化工具看能快速定位问题。比如雷达数据不动说明驱动没起来地图不更新说明建图节点没收到数据路径画不出来说明全局规划器失败。4. 实操过程从零到一让车自己跑起来4.1 第一步让电机转起来并读回编码器先不要接雷达不要接上位机只写下位机固件让电机能正反转编码器能读数。具体步骤配置定时器输出PWM频率建议10kHz到20kHz太高驱动板发热太低电机会啸叫。配置定时器编码器模式读取左右轮编码器计数。写一个简单的串口命令解析收到指令后设置PWM占空比。用串口助手发送指令观察电机转向和编码器计数。这一步的验收标准是发送正转指令两个轮子都向前转编码器计数增加发送反转指令两个轮子都向后转编码器计数减少。如果某个轮子方向反了交换电机线或者修改固件里的方向标志。注意第一次测试时把车架空不要让轮子着地防止车突然冲出去。4.2 第二步闭环控制与里程计计算电机开环能转之后加上编码器反馈做闭环。同时在下位机计算里程计根据左右轮编码器差值算出车的前进距离和旋转角度。里程计计算周期建议10毫秒到20毫秒太快没必要太慢会丢细节。计算出来的里程计通过串口发给上位机格式包含时间戳、左右轮位置、前进距离、旋转角度。这一步的验收标准是用手挡住一个轮子另一个轮子转里程计应该显示车在旋转两个轮子同速转里程计应该显示车在直行。如果旋转方向反了检查轮距符号或者编码器方向。4.3 第三步接入雷达并验证数据雷达通常通过USB或者串口连接上位机。安装雷达驱动后启动驱动节点用可视化工具查看雷达数据。验收标准可视化工具里能看到一圈点云转动雷达或者移动车点云应该跟着变化。如果点云不动检查雷达是否在转驱动是否收到数据。如果点云形状奇怪检查雷达安装是否水平。我遇到过雷达数据里全是噪点后来发现是雷达旁边有个强反光物体导致激光回波异常。把雷达挪开一点就好了。所以雷达周围不要放镜面或者高反光的东西。4.4 第四步建图建图节点订阅雷达数据和里程计输出地图。启动建图后用手推着车慢慢走一圈或者用遥控器控制车走一圈。可视化工具里会逐渐显示出地图轮廓。建图时的技巧走慢一点让雷达有足够的数据。不要原地快速旋转旋转太快会导致雷达数据匹配失败。走闭合回路回到起点时地图应该闭合如果明显错开说明里程计或者建图参数有问题。建图完成后保存地图通常保存为图片加配置文件。图片是占据栅格地图配置文件记录分辨率和原点。4.5 第五步定位与导航定位节点加载保存的地图结合雷达数据和里程计输出车在地图中的位姿。导航节点接收目标点规划路径并输出速度指令。导航配置的关键参数全局规划器的膨胀半径根据车体大小设置太小会蹭墙太大会卡住。局部规划器的最大速度根据电机能力设置太快会撞太慢效率低。局部规划器的避障距离根据雷达盲区和刹车距离设置。验收标准在可视化工具里点一个目标点车应该能规划出路径并沿着路径走遇到障碍物能绕开或者停下。注意第一次导航测试时把最大速度设得很低比如0.1米每秒确认路径跟踪正常后再逐步提高。5. 常见问题与排查技巧实录5.1 雷达数据丢包或者延迟现象可视化工具里点云断断续续或者车动的时候点云滞后。排查思路检查雷达供电是否和电机共用。如果是分开供电或者加滤波。检查USB线是否松动或者太长。换一根短的、带屏蔽的线。检查上位机CPU占用率。如果建图或者导航占满CPU雷达驱动可能被饿死。我的经验雷达和电机共用电源是九成以上丢包问题的根源。加一个独立的降压模块成本几块钱能省几天调试时间。5.2 建图飘移或者地图重影现象走一圈回来地图上的墙变成两条或者地图整体歪斜。排查思路检查里程计标定。让车直线走3米看里程计读数是否也是3米。检查雷达安装是否水平。倾斜的雷达会导致扫描平面和地面不平行。检查建图参数。有些建图算法对旋转的权重设置敏感需要调整。我的经验先标定里程计再调建图参数。里程计不准建图算法再强也救不回来。5.3 导航时车画龙或者撞墙现象车沿着路径走但左右摇摆或者贴着墙走然后撞上去。排查思路检查局部规划器参数。最大角速度太大车会画龙膨胀半径太小车会蹭墙。检查定位是否跳变。如果定位偶尔跳一下导航会突然转向。检查雷达盲区。如果雷达扫不到正前方低矮障碍车会撞上去。我的经验画龙通常是角速度控制太激进。把最大角速度降到一半画龙明显改善。撞墙通常是膨胀半径不够把膨胀半径加到车体半径加5厘米。5.4 下位机通信断连现象上位机偶尔收不到下位机数据或者下位机收不到指令。排查思路检查串口线是否接触不良。检查波特率是否匹配。检查是否有电磁干扰。电机线远离信号线。我的经验串口线用带磁环的能明显减少干扰。另外通信协议加心跳包上位机超过一定时间没收到心跳就停车防止失控。5.5 常见问题速查表现象可能原因快速验证解决方向雷达丢包电源干扰单独给雷达供电分离供电加滤波建图重影里程计不准直线走3米对比标定轮径轮距导航画龙角速度过大降低最大角速度调局部规划器参数通信断连串口干扰换屏蔽线加磁环加心跳电机啸叫PWM频率低提高PWM频率改到15kHz以上定位跳变雷达数据差看可视化点云检查雷达安装6. 后续扩展从能跑到好用还差什么车能自己跑起来之后你会发现离“好用”还有距离。比如它不会自动回充不会识别地毯不会绕过电线不会在卡住时自救。这些功能每一个都是一个小项目。自动回充需要红外或者视觉引导加上充电座通信。识别地毯需要额外的传感器或者电流检测。绕过电线需要视觉或者更精细的雷达。卡住自救需要电流检测加策略。我的建议是先把建图和导航跑稳再一个一个加功能。每加一个功能都要保证不影响已有的稳定性。我见过有人一口气加了回充、摄像头、机械臂结果系统复杂度爆炸最后连最基本的导航都跑不起来。另外仿真环境是个好东西。在仿真里调算法比在真车上调快十倍。真车用来验证最终效果仿真用来做参数搜索和回归测试。仿真里跑通了再上真车能省大量时间和零件损耗。最后分享一个小技巧给车加一个物理急停开关。软件急停可能因为程序卡死而失效物理开关直接切断电机电源是最可靠的保险。我每次调试新功能之前都会确认急停开关在手边。这个习惯救过我好几次尤其是调导航参数的时候车突然加速冲向墙一把拍下急停避免了一次撞车。
返回列表