10 秒总结全文:Cartographer 是谷歌刚刚开源的使用激光雷达进行 2D/3D SLAM 的算法库。其算法本身未必拔萃,但从设计到实现都是产品级的,很可能会在 SLAM 相关业界带来不小的反响。相关业者或许需要认真审视技术路线和商业模式。
作者介绍:邵天兰,清华大学软件学院本科,慕尼黑工大硕士。在德国工作多年,深度参与了最先进协作机器人的研发。2016 年夏拒绝了硅谷数家知名企业的 offer,回国创业。作为资深程序员,追求炫酷而实用的硬核技术——当然没有比机器人更合心意的东西了。
“谷歌于 10 月 6 号在 GitHub 上开源了名为 Cartographer 的 SLAM 库。次日晚上我看到消息,顺手克隆下来代码。本来不甚以为意,不意扫了一眼之后倒抽一口气,就靠一罐红牛读代码读到凌晨四点。下面是我的一些想法,主要侧重于非技术的方面。一孔之见,权作抛砖引玉。”
Cartographer 可以使用 2D 或 3D 激光雷达来进行 SLAM(同时定位与地图构建),其中 2D 的算法在文章[1]中有描述,而代码中 3D 的算法和 2D 算法基本思路一致。我认为,Cartographer 的算法虽然算是一流,但似乎并没有牛到让我合不拢嘴的程度。泛泛总结一下 Cartographer 的算法:用 Grid(2D/3D)的形式建地图;局部匹配直接建模成一个非线性优化问题,通过 IMU(惯性测量单元)获得比较靠谱的初值,再用 Ceres 库进行求解;后端用 Graph 来优化,用分支定界算法来加速;2D 和 3D 的问题统一在一个框架下解决。
算法的具体过程先放一边,先来感受一下算法的设计目标:低计算资源消耗,实时优化,不追求高精度。这个算法的目标应用场景昭然若揭:室内用服务机器人(如扫地机器人)、室内 AGV(如机场用的无人电瓶车),无人机等等计算资源有限、对精度要求不高、且需要实时避障的和寻路的应用。而 3D SLAM 如果能用在无人机上,也是非常炫酷且实用的事情。
学术界不少人认为,基于激光雷达的 2D SLAM 在室内、低速、静态环境的条件下已经可以认为被基本上解决了,现有成果对很多应用来说已经完全够用。例如下图是小米机器人的建图效果。请注意,这是普通用户在实际家居情况下自行使用得到的结果。我第一见到这个图的时候,惊得半天说不出一句话。在如此复杂的环境中,整个图没有明显的错位(右侧乱糟糟的房间是因为堆满杂物),两侧的墙都很直而且完美平行——而这一切都是在很低的价格下做到的。据网上消息,该扫地机器人使用的激光雷达是米家供应链研发的,成本或能低至 200 块——又是半天说不出一句话。而在 SLAM 算法层面,Cartographer 的开源使得大家不但有论文可以参考,还有代码可以直接拿来用,因此可能降低了其他厂家在算法上追赶的难度。但供应链的壁垒依然高峻。
图片来源:知乎用户程序鱼 an
我不掌握谷歌内部关于这个项目的消息,这里诛心一点:现在扫地机器人、端茶倒水机器人、无人机等等火的不要不要的,谷歌要插一杠子进来。虽然暂时只是一个 SLAM 库,但后续发展谁知道呢?会不会出现机器人的 Android 系统呢? 谷歌在 Andy Rubin 离开后,对机器人行业的整体规划让外人看不明白(很可能他们自己也不明白),所以后续的发展也只能拭目以待了。
而且读代码之后,我认为 Cartographer 这个库最重要的东西还不是算法,而是实现。这个库实现度很高,而且非常谷歌 style。例如算法的核心部分仅仅依赖于以下几个库:
Boost:准标准的 C 库。
Eigen3:准标准的线性代数库。
Lua:非常轻量的脚本语言,主要用来做 Configuration
Ceres:这是 Google 开源的做非线性优化的库,仅依赖于 Lapack 和 Blas
Protobuf:这是 Google 开源的很流行的跨平台通信库
没有 PCL,g2o,iSAM,sophus, OpenCV, ROS 等等,几乎所有轮子都是谷歌自己造的。因此整个开源软件栈在事实上都是由谷歌控制的。这明显不是搞科研的玩儿法,就是奔着产品去的。前面说过,Cartographer 需要的计算资源少,依赖少,而且代码质量也很不错,因此几乎可以直接应用在一个产品级的嵌入式系统上。以前学术界出来的开源 2D/3D SLAM 算法不少,但能几乎直接拿来就用在产品上的,恕我孤陋寡闻还真想不出来。因此,我认为开发基于激光雷达的室内 SLAM 算法的门槛被显著降低了。
这个库其实不需要在效果上成为最牛的,现在看起来已经完全够用了。开源、需要资源少,代码干净拿来就能使,而且效果还不错……呼,幸亏在下是搞机器臂智能系统的,不是搞 SLAM 方案的,要不然岂不是要睡不着觉?现在创业者除了担心BAT模仿,还要担心谷歌开源。当然现在只是有基于激光雷达的算法,基于摄像头的 SLAM 仍然是很有挑战性以及实用价值的。
借 Cartographer 这件事我想斗胆分享一下我开始创业以来的一些思考。
现在机器人相关领域是创业的热点,其中一个原因就是来自学术界的研究成果逐渐接近了实用的门槛。例如前述的基于激光雷达的 SLAM,还有基于视觉的 SLAM、机器视觉、人脸识别、智能规划等等,都是基于学术界近年来的成果。
创业团队的配置也从移动互联网时代的英雄不问出处,变成了标配大量名校海归、博士、甚至博导。我司也是其中之一。学术界背景的团队有时会习惯性地从技术出发思考问题,但是产品形式、商业模式、和产业链地位对创业成功的影响很可能不亚于技术本身。学术界的成果通常会以论文的形式公开,单一团队(包括谷歌等巨无霸)很难对整个业界长久保持 25% 以上的领先,更难有碾压式的领先。
退一步讲,技术上即使能保持领先,除非恰好位于实用门槛的两侧,否则也很难形成真正的壁垒。因此有了领先的技术后,产品形式如何、商业模式如何、在产业链的地位如何,是值得花大力气研究的。特别是产业链地位,如何没有想好,很容易出现受夹板气的情况。而且也要将心比心:如果用了某产品,会使我处于产业链上很不利的地位,那么我很可能就会另谋方案。
发布短短几天,Cartographer 就已经是 GitHub 上所有有关 SLAM 的 repo 中获得 Star 最多的了(见下图),一举超过了许多诞生多年的知名 repo。就问你怕不怕!
前两天刷朋友圈看到余凯老师呼吁大家避免使用谷歌开源的 TensorFlow(用于高效机器学习的库),我当时——
结果才两天就被教做人了。。。。我只能算是深度学习的初级应用者,对 TensorFlow 的态度更多的是坐享其成。但是 2D/3D SLAM 对我来说就更为熟悉和相关了。熬夜读 Cartographer 的代码时,我似乎有点儿理解了余凯老师的想法。
当年微软等公司不开源,招致 Free Software Foundation 为首的键盘侠们(无贬义)的口诛笔伐。如今谷歌恨不得开源一切,搞实际控制:例如 Android(手机操作系统)和 Blink(浏览器内核),虽然都开源,但事实上都由谷歌掌控。对此我只能说:
来自:将门创业(thejiangmen)微信公众号