Rollin Luo
好奇心 同理心 责任心

跟苹果学做扫地机器人软件

为什么想着写这么一篇文章,可能也是真的做了产品经理后一些产品惯性引起的。我们很早的时候就会去看苹果的设计规范,大学的时候一个软件是否好我停留在UI和交互,对背后的运行逻辑没有研究,也算是有能力去理解一些表象问题的背后如何实现。

https://developer.apple.com/cn/design/tips/ 在这里我们可以看到苹果给开发者的指引,按照这个做基本不会出问题。做产品经理这一年,我跟研发泡在一起比较多,我发现研发最厉害的不是说个人编程能力有多强,而是他们学习新东西的速度很快,代码对于优秀的研发来说基本是大同小异。研发也是我见过使用搜索引擎最频繁的工种,很多东西他们看看开发指引或者其他人的文章很快就能复用上。这是他们学的算是一些通用能力,甚至是解决问题方法,逻辑性很强。

这让我想起来大学的时候我们用 Original 做实验数据的图像化处理和学习使用其他软件,英文稍微好一点的室友是直接看软件使用说明,基本使用说明里能覆盖到我们所有遇到的问题,英文差一点的同学就找教程了。后来才知道汽车的说明书真的是一本书,基本不会有人看。

这次也是我难得的熬夜看发布会,至少近 2 年我都没有了,不是苹果不够牛逼了,是我对数码产品不够爱了吧?看的时候我就惊叹于苹果搞了个大家吐槽基本没法测试的功能——车祸检测,这个功能真的是将神奇的“算法”功能化的呈现在我眼前,因为我们扫地机器人产品,避不开的就是算法,进入行业的门槛也是算法。我还记得之前有人因为 Apple Watch 检测到摔倒帮忙打了急救电话救人一命,那人写信感谢苹果后库克回信的事情。

写到这里我想着查一下,因为记忆难免会出偏差,结果还真出错了。涉及功能是Apple Watch ECG 。https://www.sohu.com/a/434133283_115831,有兴趣的可以看看相关文章了解一下。我搜索这个文章的关键词是“苹果 摔倒 库克 回信”,我现在处理这种信息也基本就是关键词化了,如有需要再去搜索。

Backtrack

触动我可以跟苹果学做产品的是这个功能,苹果的宣传片里一个人在荒漠大风沙里迷路了,不知道该走向何方,打开了 Apple Watch Backtrack 这个功能,跟着表盘上的路径走就能回到起点。这人简直就是扫地机器人,现在即便是有视觉的机器人在家里面和瞎子也没区别的,它运动是靠实时处理感知传感器(摄像头或者雷达)+辅助传感器(陀螺仪+里程计)的数据,我们简称为扫地机器人的盲杖。机器人其实无时无刻不在一个迷路的状态,只是它的盲杖比较牛逼。

扫地机器人被困

因为机器人是通过盲杖前行的,通过固定的算法逻辑去处理盲杖传递过来的数据,所以有了经典的完全一模一样的 A 和 B 房间扫地机器人定位问题,到底能不能区分出自己在哪个房间,原理上来说是不能的,因为盲杖探一圈发现数据完全一样,会认为是同一个房间;还有长走廊问题,容易发生位姿飘移;实际使用中这两种还都是比较小概率发生的。比较常发生的是机器人被困,我们这里主要聊非缠绕型被困,局限在盲杖问题导致的被困。
做扫地机器人的时候会有几个固定测试场景,来测试算法“脱困”的能力。

    • 四脚椅子/桌子
    • 巴塞罗那椅子
    • 窄道

很多情况下机器人还没判断自己被困,不过从我们人的视角来看,它就是不智能了,被困住了。参考上面视频那种情况, 我们定义机器人无法规划路径的情况下叫被困,我们人如果找不到路了,会往各个方向都试试,机器人最简单的操作也是这样子的,当然算法也会先思考一下,先从哪个方向开始尝试,最后多种可能都试过后还不行就报被困,叫人去救它了。
其实我们不管是什么样的场景,可以归纳为机器人自己走进去后出不来。机器人上的传感器并不比 Apple Watch 少,结合 GPS 在恶劣的环境下也无法起作用,那 Apple Watch Backtrack 这个功能,扫地机器人完全可以实现。16 年石头科技和小米联合将扫地机器人清洁轨迹非常好可视化的呈现给用户,那就是一种 Waypoint,其实机器人是知道自己在哪里的,甚至是知道自己怎么过来,这也是机器人如何判断自己是否扫完整个区域的依据。
脱困这块,当我们触发脱困逻辑的时候,最高效的方法就是原路返回,算法调用前面进来的路径,原路退回去就行。我拜托专利同事帮忙搜过了,其实有人已经申请过这个专利,可是没有一家用起来,这里欢迎其他知情人士打脸哈,毕竟我只是一个扫地机器人新人。衍生说一下,也是关于和研发沟通的有意思的点,研发肯定会问那调多前面的路径呢?如果回去得太多,会重复拖的。产品经理一般都会说:“接受这种场景。”
再衍生提一下“智能”这词,我认为机器人如果真的要智能,需要不断的补充上面这种场景,让内部程序能更多的像人来处理遇到的场景问题。这就意味着,需要更大的内存和算力,在这个 2022 年卷得要死的行业里,可能大家还会继续降本,后面我相信一定会同行做出来的。智能这事我可以再单开一篇章输出拙见,下面一 Part 其实跟智能关系也很大。

Race Route

One of the most exciting features shown during the “Far Out” event is the ability to race against yourself while on an Outdoor Run workout. Apple says this feature is coming later this year and will help you practice against your best runs.
这个功能如果是玩过跑跑卡丁车的朋友肯定都懂,一不小心暴露年纪?在练习某个地图的时候,系统会在记录我们跑得最好的一次成绩的同时把地图内运动轨迹记录下来,在下一次进入训练的时候生成一个虚拟的你跟你竞赛,简直就和 Apple Watch Race Route 一模一样。我本身也跑步,对这个功能肯定就会比较喜欢了。不过这个强调的是一个固定的跑步路线,我大多数时候跑步路线都是不固定的。
回到扫地机器人的运动上,可能是我没有接触到现在最顶尖的算法团队哈,我知道扫地机器人是没有类似的功能的。因为它的运动轨迹是跟着任务走的,每次任务都是新规划运动轨迹,不会去参考上一次的,这就很不智能。视觉的用着用着路径规划会比较好的原因是地图信息它补充得更多了,规划路径的时候更合理罢了。
扫地机器人现阶段不存在说更熟悉你家里环境了,更不存在说存在学习你家庭环境情况跑得更顺畅。它只是实时处理各个传感器传过来的数据,然后调用对应的逻辑去处理。不会在启动这次任务的时候不会去看上次在同样的地图下轨迹是怎么样的,这次有没有哪里可以提升的,更不会去历史数据里对比哪次的路线更合理。其实是可以做的,哪怕有宠物、人等活动的障碍物干扰,或者说可移动障碍物简单位置变化,做这个事情都是有意义的。
在扫地机器人系统中加入 Race Route 这样的功能,扫地机器人的智能才能更进一步。

Crash Detection

Crash Detection is designed to detect severe car crashes—such as front-impact, side-impact, and rear-end collisions, and rollovers—involving sedans, minivans, SUVs, pickup trucks, and other passenger cars.
这个功能就更有意思了,苹果利用手表和手机上的传感器数据,应该是做了很多实验把车祸检测的算法搞出来。属于那种超低频但超有用的功能,大家开玩笑的说没法测呀。苹果有专门一个视频讲利用了哪些传感器的数据来做这个功能,可是每个传感器数据跟这个车祸场景的关系是什么样的,彼此之前的联系是什么样的,要各自满足什么样的条件才能作为车祸的依据,这些就是算法的魅力。
其实上面 Waypoint 里我们提到扫地机器人被困这件事,我们已经可以通过传感器的数据来判断是被困了,结合 Race Route 来说,我们没有在地图上记录这个地方我被困过了,下次路过的时候注意点,进去后就原路返回出来得了。
扫地机器人还有个非常棒的场景可以应用 Crash Detection & Race Route 的原理来做,那就是越障。
因为装修历史发展原因,导致很多家里面有高低落差的地方,不管是门槛石还是滑轨门都是需要越过去清扫的。在越障的时候我们扫地机器人上有很多传感器数据变化,比如悬崖传感器、超声波传感器、陀螺仪等。这些传感器的数据完全可以告诉我们机器人在这里越过了一个东西。有摄像头的朋友别着急说话,要说的话私聊告诉我,你们用摄像头传过来的数据判断门槛的事情做得咋样了?
讲几个我们遇到具体场景,这些场景可能是其他同行没遇到的,因为我们做这个机器之前没有做过扫地机器人,犯了一些很愚蠢的错误,当然也就是经验了。
我们的机器屁股比较重,导致每次越障的时候头翘得很高,地盘设计高度能越障 20mm 绰绰有余,碰到一边是黑色地面的时候很可能就傻逼了,触发悬崖传感器,认为是悬崖就不过去了。也有高处往低处走,因为悬崖传感器一致性的问题导致, 20mm 左右的坎,他概率性不往下走,认为是悬崖不下去了,之前的清扫任务中是有下去扫过的路径的。还有一种是触发超声波往后退的,超声波是用来检测地毯的,当机器人冲上坎的时候一下子打到空气上误判前面是地毯不过去了,其实它之前也过去过。
首先我们是可以通过海量的测试来将现在越障算法做得更精准,在地图上把这个“障(槛)”标注出来,再适配一些对应的清扫逻辑给这些槛。又回到上面说内存和算力不够的事情上面,现在的硬件配件可能无法支撑我们将清扫逻辑写得太复杂,加入的变量多了,算法会变得不稳定。
至于这个智能可能会误判槛的问题,我们可以把槛上传到 APP 让用户去确认。现在没有自动判槛和记录槛功能的时候,我们是上了一个虚拟门槛的功能,让用户通过 APP 主动去标注需要越过去的门槛,这真的是人工智能了。
如果用户允许我们读取他的地图数据和清扫轨迹的话,还能做一个人工智能的事情,请专职人员去看用户的清扫记录,通过运动轨迹和路径去判断哪里容易被困、哪里是在越障,设置一下禁区、虚拟门槛给到用户,请用户确认是否采纳,当然还可以更精准的分房间。
已经有上百万用户的同行们,考虑一下,对于你们来说拥有海量的数据,做个专项应该能提升行业一大步。

番外:

写到 Waypoint 的时候我遇到了一个问题,我想把之前我剪辑的那一段打动的视频放到文章里面,我需要一个“图床”一样的东西把视频转换成链接,一圈下来发现传到自己的博客是比较方便的方法,结果后台文件限制大小为“10MB”,难受,搜了一下解决方法一时间搞不定,搞完就耽误写文章了,我就先继续往下写,后面来补充资料。
更新:改文件的方法我试过了,现在 WordPress 后台我没有找到对应的文件(.htaacess),有个一 config 的文件里没有对应的字段;站点健康那个方法我也试过了,我没找到那个插件,最后我用一个插件解决了我的问题。

当我想去把那个插件的名称找出来放到文章里的时候,我遇到了新的问题,我后台登录网址死活进不去,就是 Nginx 404,头大,搜了好几个解决办法都偏了。最有用的是让我通过 Nginx 代码解决掉 WordPress 伪静态的方法,可我不知道在哪里输入这个 Nginx 代码,我先饶过了这个方法,又花了好久时间我才想起来在阿里云后来看到过,抱着试一试,大不了挂掉重新来过的心态弄了一下,果然可以,还没有遇到缺少 wp-admin 目录的问题,比较幸运了。

WordPress官方的伪静态是通过 .htaccess 实现的,但 Nginx 并不支持 .htaccess 。
上面这对于会写代码的朋友来说可能小菜一碟,对于我这种零基础的只能用时间来堆了。
回到那个插件的事情,找到了那个插件的名字,同时发现了新的问题。
Increase Maximum Upload File Size 这个是那个插件的名字。
我上传的文件在媒体库里找不到,再传又提示我根据服务器的异常响应说这个文件已经被上传了。大概率我后台登录页面 404 就是这个插件冲突导致的,果断先禁用它。
换另一个插件,果断成功了,试了一下页面不 404 了。

另外一个大乌龙,我把 Backtrack 和 Waypoint 没有区分开。

Apple Watch Backtrack 这个功能是可以用来地下停车场找车了,我直接复制文章里的一段过来。

原文链接:https://zh.thefilibusterblog.com/kak-najti-priparkovannyj-avtomobil-s-pomoshhyu-iphone-ili-apple-watch-zh-tw/

用 Apple Watch 找車

假設此功能適用於您的 iPhone,您還可以使用 Apple Watch 查找您的車輛。最簡單的方法是使用 watchOS 9 中重新設計的 Compass 應用程序。

為此,您需要配備指南針的 Apple Watch Series 5 或更新機型(包括 SE 和 Ultra 型號)。啟動 Compass 應用程序,然後尋找指南針面上的藍色航點。

您可以轉動數碼表冠來調整錶盤,以更好地了解您的汽車距離。單擊一個航點以獲取有關它的更多信息,然後單擊“選擇”以查看將您引導至航點的指針。

使用 Apple Watch 查找停放的汽車

您甚至可以在錶盤上添加複雜功能以指示停放的汽車。長按錶盤進行自定義,點擊要更改的錶盤上的編輯,然後向左滑動至複雜功能界面。

輕點難度槽以對其進行自定義,然後滾動 Digital Crown 直到在 Compass Waypoints 下找到 Parked Car Waypoint。這種複雜功能將始終指向您停放的汽車,並顯示距離。

 

本文最后经过编辑发表在少数派网站:

https://sspai.com/post/77282