搭建路径中级一个周末,再加第二个周末

做一台能扫遍整个地面的房间覆盖机器人

一台只靠两个碰撞开关就能独自走遍整个房间的机器人——外加一份实测结论:加上里程计和规划器到底值不值得。

做一台能扫遍整个地面的房间覆盖机器人 技术示意图BRUSHSERPENTINE COVERAGE PATH

做的是什么

它的任务不是到达某个地方,而是去过所有地方。这听起来比导航是个更小的问题,实际上却更大,因为没有目标可以朝它转,也没有办法从你站的位置判断自己到底赢了没有。

这也是本站最奖励“先测量、再动手”的项目。整个前半程是一台只有两个开关、完全不知道自己在哪里的机器人,而它是能工作的——如果你原本打算花一个周末去做一张地图,这会是一个让人不太舒服的发现。

贯穿整个项目的那一个数

地面面积除以刷子宽度,就是一台完美的机器人需要走的距离:

d_optimal = A / w

一个 20 m² 的房间配一把 250 mm 宽的刷子,得到的距离是 80 m。所有策略都以这个数的倍数来评判,而这些倍数彼此相差很远:

策略 达到 90% 所需距离 在那个房间里,以 0.25 m/s 计
完美扫荡 1.0× 5 分钟
计划蛇形 1.35× 7 分钟
随机反弹 2.9× 15 分钟
螺旋并搬移 5.5× 30 分钟

这些数字来自在覆盖模拟器里对五个房间做的模拟。在买任何东西之前,自己跑一遍,让它一边跑你一边拖动家具——数字会随房间一起变化,这本身就是这一课的大部分内容。

物料单

零件 数量 约价 说明
Arduino Uno 1 $5–8 随机反弹模式几乎不需要额外硬件;计划扫荡则需要编码器
碰撞开关 2 $1 左右各一个,装在包络式外壳后面。这里是主传感器
红外反射阵列 1 $5 悬崖检测——朝下照向地面边缘,而不是照一条线
N20 编码器电机 2 $16 计划扫荡必需;随机行走则不需要
TB6612FNG 1 $3
两轮底盘 1 $10 这里圆形比方形好——在角落里不会卡住
电池包 1 $8 覆盖运行时间很长;容量在这里比其他制作更要紧

合计约 $50–65。

这是本站唯一一个最便宜的传感器就是主角的项目。只要时间足够,两个碰撞开关加上随机转向就能走遍整个房间——第一代扫地机器人正是这么工作的,在伸手去用任何更聪明的方案之前,这一台值得先做出来。

红外阵列在这里的用法不太寻常:它朝下当作照向地面的悬崖传感器,而不是朝前照一条线。一台要走遍整个房间的机器人,终归会找到楼梯的边缘。

制作顺序

**1——在模拟器里让各种策略赛跑。**在这里花一小时,能省下一个周末。观察覆盖曲线如何逐渐变平,并留意三种策略在房间前半程是完全一样的。

**2——搭好传动和保险杠,别的先不做。**把两个杠杆式微动开关装在一个有弹性的外壳后面,外壳向两侧各包住至少 45°,常开触点接地并使用板载内部上拉。把消抖做正确——一次按下会产生九个边沿,而一个做计数的中断会报九次碰撞。

**3——在机器人第一次无人值守运行之前,先把悬崖传感器加上。**在前部两个角上装朝下的反射传感器,每次经过都读一遍。然后按你能开多快算一算:延迟乘以速度,再加上 v²/2µg 的刹车距离,这些必须能装进“看到落差”和“真的到达那里”之间的距离里。

**4——写好随机反弹,让它跑一个小时。**直线前进;撞到东西就短暂倒车,然后随机转 90° 到 270° 之间的角度。随机性在这里是承重的——固定的反射角会把房间变成一张台球桌,机器人会永远沿着一条闭合路径打转。

**5——测量它。**用粉笔或胶带在地面上画出一格格线,跑固定的时间,然后数一数覆盖了多少格。这是基线,也是判断第 6 步对你是否值得的唯一诚实办法。

6——到此才加里程计。编码器和差速驱动里程计能给你一个位置估计。按一个刷宽的间隔规划蛇形扫行,并留出 10–20% 的重叠,同时绕开家具而不是撞上去。

**7——看着这些行不再互相平行。**它们会的,大概在画到第十行左右,因为里程计会漂移。这不是你规划器的缺陷,而是商用机器要带陀螺仪、天花板相机或信标的原因。是否要加上其中一样,正是这个项目真正的收尾。

值得注意的硬件细节

**底盘用圆形,轮子装在直径上。**圆形机器人总能原地转出它撞进去的困境;方形机器人则可能斜着卡进墙角,需要一个后保险杠和额外的脱困逻辑才能出来。

**刷子必须比机器人宽。**这不是装饰。规划器让机身与每一面墙保持间隙,所以凡是机身够不到的地方,就是永远不会被覆盖的地面——在模拟器里,规划器漏掉的 133 格中有 130 格都在墙边或桌腿两格之内。一把向外伸出的刷子能把它们收回来。

**保险杠做成两半,不是一整个。**一个开关只能告诉你撞到了东西;两个开关能告诉你是哪一侧,而这正是决定转向方向所需要的信息,代价只有一个引脚。

**电池预算要按米来算,而不是按分钟。**以 0.25 m/s 跑一小时就是 900 m。一个房间用随机反弹达到 99% 大约需要 540 m。三个房间是不现实的,而这笔账——而不是任何算法上的洞察——才是把整个产品品类推向建图的原因。

做好长什么样

覆盖是少数几个能配上一个干净单一数字的机器人行为之一,而不同策略之间的对比非常悬殊:

策略 走过 1 倍房间面积后的覆盖率 3 倍后 10 倍后
随机反弹 约 35% 约 70% 约 93%
螺旋再反弹 约 45% 约 78% 约 95%
计划的之字形扫荡 约 85% 约 99% 约 99%

这些列的形状就是这一课的全部。随机反弹是渐近地接近全覆盖,却永远差那么一点——最后那几个百分点花的时间比前九十个百分点加起来还长。而计划扫荡大约一遍就达到了覆盖,之后就无事可做了。

有记忆和没记忆之间的差别,用一个数字说就是这样。

测量 典型
扫行间距 机器人有效宽度的 80–90%,让相邻行有重叠
走过 4 m 后的航向漂移 没有陀螺仪时 3–8°,有陀螺仪时小于 2°
十遍后位置误差 纯里程计 15–40 cm
纯里程计的实用房间尺寸 约 4 × 4 m,再大扫行的倾斜就肉眼可见

最后一行是这个项目诚实的天花板。计划扫荡的前提是你知道自己在哪,而里程计的漂移没有上界——所以超过大约 4 m 之后,那些本该平行的扫行就不再平行,空隙开始出现。这不是调参能解决的问题;这就是建图为什么存在。

坏了看哪

现象 一般
永远沿着同一个环打转 反弹角是确定的;把它改成随机的
很快覆盖到 90% 然后像停住了 这是设计如此——覆盖曲线本来就是指数形状
一撞数好几次 无消抖或窗口短于 5 ms 抖动
从台阶上冲下去 速度超出了悬崖传感器的预算,或者主循环有阻塞
扫行漂得不再平行 是里程计的问题,不是规划器。加一个航向参考
行与行之间漏出条带 行距恰好等于刷子宽度,没有任何重叠
角落卡住 方底盘或无后保险杠
永远到不了沙发后面 从一行过渡到下一行的那段路从来没有被规划过

这八条里有六条属于感知、机械或算术,而不是算法——这和微型迷宫鼠的分布完全相同,原因也完全相同。

至于和其它每一台移动机器人共用的那一层反应式逻辑,避障机器人是更温和的版本,硬件大部分相同,而反应式导航路线覆盖了两者底层的传感与行为。

项目路线图

搭建路径

沿着技术树,从零件一路走到一台能正常工作的机器人。每个节点在其前置条件完成后解锁,你的进度会保存在这台设备上。

已完成 0 / 18

100%
搭建

只用两个开关覆盖整个房间

制作

搭建

加入计划扫荡

制作

目标

一次充电覆盖整个房间

目标

元器件

本路径中的教程

接线之前先练习

用在线模拟器把它调好

搭建路径会经过一个浏览器实验台。先在这里把行为调对,再把参数迁移到真实的机器人上。

常见问题解答

这是扫地机器人吗?

它是扫地机器人的导航那一半,也是有意思的那一半。加上吸尘是一个机械问题——一台风扇、一根滚刷、一个集尘盒,以及多得多的电池——它教不了你任何覆盖问题教不了的东西。在底部装一块干布或掸子,它就真的能清洁硬质地面,而它上面的每一个算法,都和商用机器运行的是同一个。

既然计划扫荡更好,为什么要从随机反弹开始?

因为随机反弹靠的是你一个下午就能做好的传感,而且它能给你一个实测的基线,规划器必须超过它才算数。在模拟器里,随机反弹覆盖一半地面所走的距离和规划器一样——差距要到那之后才拉开。如果你先做规划器,你会花一个周末去和里程计漂移作斗争,却始终不知道它到底给你带来了什么。

规划器实际能带来多少提升?

在实验台上对五个房间的实测结果:计划扫荡达到 90% 覆盖率所走的距离是理论最小值的 1.35 倍,随机反弹需要 2.9 倍,螺旋策略需要 5.5 倍。在一个 20 平方米的房间里,用 250 mm 的刷子、以 0.25 m/s 的速度行驶,就是 7 分钟对 15 分钟对 30 分钟。问题在于,规划器根本达不到 99%,因为它会与每一面墙和每一条桌腿都保持一段安全距离。

需要编码器吗?

第一台机器人不需要——它用不上。之所以把它们列进零件清单,是因为项目的后半程需要,而且在做好的底盘上加装编码器,比一开始就装上要麻烦得多。买带编码器的电机,先不接线,等做到计划扫荡时再接上。

什么能防止它从楼梯上摔下去?

装在前部两角、每一轮循环都读取的朝下反射传感器,以及一个由算术而不是凭感觉定出来的速度上限。机器人在开始刹车之前,会先走过“自身延迟乘以速度”那么远,然后再走过 v 的平方除以两倍 μg 的刹车距离。这两项都必须能装进“传感器看到落差的位置”和“车轮到达落差的位置”之间的距离里。

为什么用圆形底盘?

因为圆形机器人旋转时占地轮廓不变,所以无论撞进什么困境,它总能原地转出来。方形机器人如果斜着卡进墙角,就得先倒车,这需要一个后保险杠和更多的行为逻辑。这也是几乎所有商用地面机器人都是圆形的原因。