A-A+

如何看待谷歌在10月6日开源的SLAM算法cartographer?

2016年10月10日 robotics 暂无评论 阅读 4,802 次
作者:邵天兰 梅卡曼德(北京)机器人 创始人,CEO
            感谢作者授权ExBot转载
20636162

现在深夜四点,熬了一夜粗读了Cartographer的核心代码。忍无可忍,提前填坑。

Cartographer的算法应该算是state-of-art,但就我读文章[1]时的感受,感觉并没有牛逼到让我合不拢嘴的程度(当然很有可能是我太愚钝了)。泛泛总结一下就是,这个玩意用Grid(2D/3D)的形式建地图;局部匹配直接建模成一个非线性优化问题,利用IMU提供一个比较靠谱的初值;后端用Graph来优化,用分支定界算法来加速;2D和3D的问题统一在一个框架下解决。

算法的具体过程先放一边,先来感受一下算法的设计目标:低计算资源消耗,实时优化,不追求高精度。这个算法的目标应用场景昭然若揭:室内用服务机器人(如扫地机器人)、无人机等等计算资源有限、对精度要求不高、且需要实时避障的和寻路的应用。特别是3D SLAM,如果能用在无人机上,岂不是叼炸天。

我不掌握Google内部关于这个项目的消息,这里诛心一点:现在扫地机器人、端茶倒水机器人、无人机等等火的不要不要的,Google要插一杠子进来。虽然暂时只是一个SLAM库,但后续发展谁知道呢?会不会出现机器人的Android系统呢? 小米扫地机器人研发了两年,SLAM效果非常好。Cartographer有可能降低了友商追赶的门槛。

463cc43486050611b42ea534b5278e08_b

而且读代码之后,我认为Cartographer这个库最重要的东西还不是算法,而是实现。这玩意儿实现得太TM牛逼了,只有一个操字能形容我看到代码时的感觉。

2D/3D的SLAM的核心部分仅仅依赖于以下几个库:

  • Boost:准标准的C++库。
  • Eigen3: 准标准的线性代数库。
  • Lua:非常轻量的脚本语言,主要用来做Configuration
  • Ceres:这是Google开源的做非线性优化的库,仅依赖于Lapack和Blas
  • Protobuf:这是Google开源的很流行的跨平台通信库

没有PCL,g2o, iSAM, sophus, OpenCV, ROS 等等,所有轮子都是自己造的。这明显不是搞科研的玩儿法,就是奔着产品去的。前面说过,算法需要的计算资源少,而且因为依赖很少,因此几乎可以直接应用在一个产品级的嵌入式系统上。以前学术界出来的开源2D/3D SLAM算法不少,但能几乎直接拿来就用在产品上的,恕我孤陋寡闻还真想不出来。因此,我认为进入相关领域SLAM算法的门槛被显著降低了。

这个算法效果看起来完全够用,但根本不需要在效果上成为最牛逼的。开源、需要资源少,代码干净拿来就能使,不用ROS、PCL、OpenCV等庞然大物也能做2D甚至3D SLAM,而且效果还不错。

呼,幸亏在下创业是搞机器臂智能软件的,不是某某、某某、某某等公司的,要不然岂不是要睡不着觉?现在创业者除了担心BAT模仿,还要担心谷歌开源(笑)。

发布短短几天,Cartographer就已经是Github上所有有关SLAM的repo中获得Star最多的了,一举超过了许多诞生多年的知名repo。就问你怕不怕。

前两天刷朋友圈看到余凯老师呼吁大家少用TensorFlow(参见:如何评价余凯在朋友圈发表呼吁大家用caffe, mxnet等框架,避免使用TensorFlow? - 百度),当时

452cc07953c8586fc59685f46e499f19_b

才TM两天就被教做人了。。。我只能算是DL的初级应用者,对TensorFlow的态度当然是坐享其成。但是2D/3D SLAM对我来说就更为熟悉和相关了。熬夜读Cartographer的代码时,我居然似乎有点儿理解了余凯老师的想法。。。

当年微软等公司不开源,招致FSF为首的键盘侠们疯狂的口诛笔伐。如今G家恨不得开源一切,搞实际控制,我只能说

f7c6d691c95b3fc23d92b08d48e97ed6_b

[1]:Google关于2D SLAM文章,发表于ICRA 2016, 链接:research.google.com/pub

 

链接:https://www.zhihu.com/question/51348391/answer/125450382
来源:知乎

标签:

给我留言

Copyright © ExBot易科机器人实验室 保留所有权利.   Theme   Robin modified by poyoten

用户登录

分享到: