# X' Q; ? y$ L& R1 T$ y# S8 ]
/ a4 u" ^! D# F a. r
作者:
3 j2 D9 d4 b- S& N. l/ A3 T x0 [6 |" N$ I. [. e! G7 f6 t# L
]. q6 S0 P* b# Z
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。
3 `' n7 A8 C$ ~
# w- N {& Q+ r + y6 c0 e" w2 \+ i0 X
机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 5 ?! a1 m2 v1 [+ U% `
3 Y9 T i, `/ \( h. ]) {5 ]1 v
3 k* U \3 l6 H; L/ [5 v
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
/ I L6 ]$ G) \! y8 g 0 f, {# O& u& ]: l! ^6 D, }
. @& w2 ~- e) q& S; @# Q. k 机器人、无人车、无人机、AR,无所不能的 SLAM
" H, a: `5 o. U, K# ?
! g6 p: M" ^7 Z6 ?: M$ S
' e1 R9 i0 n" H- D0 B4 h 两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 / o" R. K- w" s6 c j
, y" S, m# W3 W7 h
) O' o) ]+ B: t0 i U: g
! T' E9 u9 S; P7 ?' x" i; L ; E* I# e2 \' G' q0 B
: @- p, o" Z" P; @+ | 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
1 U! \# | {, W; l: C, N 5 L* ]+ \9 Z8 D+ b
) A7 i: ~$ n! d6 O7 V 一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
8 P. @" v* O! t0 }# G
& c8 `3 v- T$ q, |$ J
* k0 l1 y, ?) @7 f' T! N# S& F 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
! X2 w/ @( K. X - H7 e" G: G# P& H2 P8 t, D
+ _. G( i* g4 K 也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
, I5 y5 n* Q3 {# H( ?# Q% _
G; m7 T8 O* F' t" G , m9 d0 w+ P9 [5 I
1 E3 z$ E" ]* Y+ b3 K: T
$ V+ y$ ]: A5 n
7 }2 U x8 H' P9 [7 L) I9 ` 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
; x! r7 t% e( @9 X
& l) S, g" S+ x
c8 w1 X8 G8 D 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
; U' S& Y& k; N5 ^9 p, f
. O3 k1 g1 n) `9 ]
. Z! x4 ~7 B, h+ P3 l& q% d; P' @ 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 2 |1 B2 z2 S5 s; o7 r0 Z& J
& ?6 X5 b6 M5 | 1 i$ h" I, u v B/ T
( E8 x% F/ I X1 j1 o( C* g8 V, z
# _6 t; h" N; r' b1 \$ A
5 R3 |7 y& S# X& R1 h6 E' w 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 * a9 x, X$ r2 N% {- x; c
0 W3 v- u7 ?' e) X
7 f8 h4 v/ R2 `9 o
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
' O/ K g; h+ T& Y( i# h* \) Z& T! I : F5 C' y$ u- c% ]0 r1 w W3 E
3 F9 D, d! C6 |1 H4 S# o$ v; v! L4 ]. O
* f" Z6 E8 R1 {+ ^
{' Z9 [; X* _" T$ y
% E. D$ N+ J* z D- p 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 2 u" |* I$ ~& w0 d- ~& x# `. \' O F
1 o+ I& ]- d9 [# H- V4 t( q) V/ g ) P4 W) Z' ~7 K( d
激光雷达、单目、双目、RGBD,SLAM 传感器的分类
# ~/ i2 |( U2 j- m9 ]9 S0 q! ` # \! Y2 \2 O6 l
/ |7 C2 n# W& o/ k9 G$ i/ v. F
实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
. p/ Z+ B6 ~0 T( C) ] ) x* R; V( y! f3 P8 \
# o _) F1 b. t4 ?) [$ v
激光雷达
* O+ m# \3 f G
d: t) {5 f' C$ ^) S, E 6 j5 Y% E2 F$ _. d% _
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 , V- D" |7 @* i- T0 q
( e" S) Y* p3 Z. j
, e* q6 Q. J7 r5 H; N 许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。
& @4 T, g+ b; L6 d! m
: X+ K# D, N" j) T6 W4 j ) L1 k* P/ f# p2 f
/ D. m# q$ b2 _& f' B6 }
4 N5 ^2 r& T# ?6 M" x* H- e U
+ z' S& [2 }0 M- ~% |. ~' I 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 8 T1 Z3 v0 o1 A" p
' A# p& ?/ v7 ?0 {
( z; t/ y/ V& O7 L3 K 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
1 Z- ?6 ]$ ^- \% _6 f/ h
( Q6 s1 w. O7 {9 R X: ^9 O 1 A$ ?. o% [; R* q! X
视觉 SLAM
`- E. f1 Y% I+ d1 p
! `$ U: |/ j' G9 g% ]- D . z+ F3 I' D# A. K
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 v! n; N. \ r8 W" n# ]
; p, G0 X& o6 D : _8 A9 g4 \- D
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
3 _6 C+ e) ]6 l1 o4 A ( J& ~# r7 B0 {
# C/ t' ~. t. c2 X3 R) o 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 & M% v) r. J7 }+ U
' t/ S6 i& a; X& _$ K( {. | 3 K% l1 W5 I4 O& Q R# V! d
没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
9 \/ J2 f; V1 q- Z$ r# b# r
9 m2 z" f2 h, `2 V" y4 y" I0 M " X/ q1 J$ c! b; @1 M
* V4 B5 a5 `. w- q9 l( W4 m
' |9 r) O7 \9 b/ p9 b
% W' i) N M' |4 o 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。 $ i% G! s- X/ w1 K
4 s4 m) p% I7 {7 L
$ F$ a; R/ F, a) t
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
6 D) I! f8 V. A- i1 l
( G* b) q; {) u; ^/ X4 ^
" r" x O0 O3 h! p+ E5 w 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 # c; Y4 k1 O6 g8 }6 }/ D
4 W# S4 u& f* o; b; p/ ~ 2 @+ v* U4 e' I$ S* [
但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 ; ~. Q& U3 [7 f5 B6 E
F* _' P, U8 T; ?3 J* S4 c- Z
# q; f+ K' M' Y
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
) f7 W( y/ p, \3 Z% Y9 }
1 @! i$ k0 M" P" Z 7 T9 |, n2 d% [; \+ v
0 x3 z) { a! ^& L
3 X2 @9 b0 h5 R1 ^, E
. e f: u7 E; D; ? i/ v 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 6 l r: Z9 _: j3 b% L
+ Z% y, s7 l7 t$ @1 t
9 I! [4 X0 o( Z1 u& j3 V# ? OD
8 [7 h z8 e# [( a3 ^ h; l7 p
. t* [/ h1 C: m* C4 D" s
. P0 W* l5 B* E/ ^7 Z$ Z0 u- G 举报/反馈
2 C2 ?; T% ^, p" ]$ @ 6 G& C9 Z2 N0 i) m
5 N# F! c& `" \6 c0 z5 Y7 T
( x: _3 G+ C2 _. j8 z
- x3 B) M" v- q) W" Y' ^
% @8 S7 s! G% S0 R" \8 S
|