forked from cartographer-project/cartographer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
readme
36 lines (23 loc) · 3.86 KB
/
readme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
邵天兰 搞机器人的代码狗,创业狗
222 人赞同
现在深夜四点,熬了一夜粗读了Cartographer的核心代码。忍无可忍,提前填坑。
Cartographer的算法应该算是state-of-art,但就我读文章[1]时的感受,感觉并没有牛逼到让我合不拢嘴的程度(当然很有可能是我太愚钝了)。泛泛总结一下就是,这个玩意用Grid(2D/3D)的形式建地图;局部匹配直接建模成一个非线性优化问题,利用IMU提供一个比较靠谱的初值;后端用Graph来优化,用分支定界算法来加速;2D和3D的问题统一在一个框架下解决。
算法的具体过程先放一边,先来感受一下算法的设计目标:低计算资源消耗,实时优化,不追求高精度。这个算法的目标应用场景昭然若揭:室内用服务机器人(如扫地机器人)、无人机等等计算资源有限、对精度要求不高、且需要实时避障的和寻路的应用。特别是3D SLAM,如果能用在无人机上,岂不是叼炸天。
我不掌握Google内部关于这个项目的消息,这里诛心一点:现在扫地机器人、端茶倒水机器人、无人机等等火的不要不要的,Google要插一杠子进来。虽然暂时只是一个SLAM库,但后续发展谁知道呢?会不会出现机器人的Android系统呢?
小米扫地机器人研发了两年,SLAM效果非常好。Cartographer有可能降低了友商追赶的门槛。
而且读代码之后,我认为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? - 百度),当时
才TM两天就被教做人了。。。我只能算是DL的初级应用者,对TensorFlow的态度当然是坐享其成。但是2D/3D SLAM对我来说就更为熟悉和相关了。熬夜读Cartographer的代码时,我居然似乎有点儿理解了余凯老师的想法。。。
当年微软等公司不开源,招致FSF为首的键盘侠们疯狂的口诛笔伐。如今G家恨不得开源一切,搞实际控制,我只能说
[1]:Google关于2D SLAM文章,发表于ICRA 2016, 链接:https://research.google.com/pubs/archive/45466.pdf