/ {( q9 l* U# D0 T
! ]2 Z1 Q u- h! z 作者: 4 L, }8 A8 r0 z; p- Y
2 @! S' A2 q: D8 D, Q& G2 I
% ?/ [' q- C* `+ y2 @+ \ S
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 * ~/ w+ q! l8 _7 P
0 l6 }0 C7 ^, j- O
" o9 O. G0 ~3 L" W! i5 u0 y8 l
机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。
, T: E9 Q& j- D* D) u+ i1 x
- i. _" n+ ~0 w. ] w* O& U, s5 p
9 }* n( Q' b1 w( n* Y8 t/ _( C SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 ' n! P) d; w- H( }! m5 f$ a# C0 G
) k) q/ z0 x. H. V5 y% ]5 ~ 5 A+ e% G4 {7 j9 |! \
机器人、无人车、无人机、AR,无所不能的 SLAM ) V- Z0 D9 q. }+ {, |
|# _9 ]0 Y' j* G; `" g# B
$ {3 B' R% V5 k: D 两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 4 C) W) {: q1 W0 z! |) M
( a5 x0 Q' G: b$ G ; L" o% W/ \7 i6 ~9 \
) ]) E) |! M- f. z D$ L
# a% ?4 F+ H! u
) i) [" N! q9 l8 G4 P
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
0 [/ ?/ o; U; R I1 u
( b- {2 s, O* m: Y. ]5 \* z& L2 R
3 H7 B" I. ]2 W) s) W4 r9 z3 J 一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 / s3 f% ]9 N! U6 w. V
; Q3 A5 _/ A+ B q5 d4 X
" R6 q1 j }. B! M$ t; f$ {5 V 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。 2 F3 I; X; b! l
/ r0 ?6 c, I b( |$ V* O: n# T3 O! @
" p @' O8 k* q2 \9 Z+ `6 r
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
" P8 r5 K) I2 z6 k8 z
6 V( H9 D) w: r4 A# Q {: W& [% W 9 K) ]5 b0 b) \" i# \$ P* n; N a6 R
3 I2 z" n, {- h% v3 p& l5 R4 T
/ l" J+ w; Z$ I& ^0 @$ V- N& [ | 4 m' R) i( h0 K7 u: ]
天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
. v! D* k# E7 X. W; L 5 ^+ z A8 h1 _2 N
$ F, W* R6 l* j% m# x" ]. S# G [
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: ]" a4 p2 W c4 I: O4 u4 ] h8 c
0 M; K# [4 s! e! H/ g) Z! g4 h
1 ~7 p( I- u3 u* C& Y2 _+ m3 g. x 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
' o0 O% k K% @2 g! f$ ^2 |) G8 C1 n ! n! L4 r3 a4 _1 C$ R# m
9 f p M# F7 V7 Q
6 q; O# x$ P) l4 S" |8 \3 y
6 }( t& n0 h8 i : Y0 K5 H4 l `) B& `# O6 K- z
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
" a8 M' V# A6 k3 s
7 Z: O# i' Y X) ^" W
* }+ g8 j6 e4 u* E 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 . i% c& }# D+ e3 }5 O; J
+ w3 V) `; j2 @& V
' p- Y6 t6 k o
: g/ T; l- _$ {9 z8 X" a ~) o2 q) z
, `: E, J7 z5 C
( w2 p7 l6 y! i: r9 L* ]% C. U 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
+ x# \6 r' t4 h) m! j6 p
& b! i7 V/ B6 |/ j
1 T' S, R- N. ~9 [4 Q3 ^ 激光雷达、单目、双目、RGBD,SLAM 传感器的分类
t+ j& N0 j m2 E8 s2 D - `/ x4 u9 u/ Z
) V; X+ n1 o! k 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
- {4 N6 l% V6 P) m ) p8 }/ b9 p( n7 a( ?
. E r" S7 D0 q5 N 激光雷达
, p1 ~* p/ N8 U' H5 B. ~) o 0 T! D* y8 ?- W) L7 M
* C; `( Z" D# A8 [$ ^
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
. T/ R9 u3 }0 ?* U% d' i; k
; H2 s m, h9 L) V* v7 J/ _+ p 5 J: _+ _6 g! d
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。
( B3 ?. ?" X7 c ? / x* I( F2 x2 r1 I- @4 G
, |3 y1 O3 |. i. G
, E8 [1 a0 G1 m
5 z; l4 Y5 ]) p3 p . ?4 g+ _5 X( ^& r# l
不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 ; ?$ c" c' X- N2 j* w7 j5 _
6 c+ P( U* e+ K( g + i# ~9 ^; d- N& M& {/ \8 v, N
成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 / } s- G! K5 J4 ]4 H8 t( e
8 }* m5 }# v- c0 u
7 i2 d9 v2 L. M5 w; L* D2 C2 b 视觉 SLAM
# \8 W7 N/ P& m& W8 W- b 9 H2 O8 |( s1 S! `1 A7 {7 N [
5 _$ d$ S' s$ d; a; b
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 " u' E- l- N- g- h* V2 W
( U4 @# h- h! @$ b4 T9 O) J1 ^1 q
7 [. D/ ^6 f6 _# Z( x4 L 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
4 r" k- H& ~9 f9 A & J' V0 f9 e& C1 U$ d
9 |8 b/ A" I; E) U 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
3 l9 `' o# P0 e" `! B0 o0 H2 |
# X* ^- o. V- a8 Z: S: g 4 s; t( I/ C4 y
没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 ( j, G2 @9 D3 @" H
0 `' A9 A0 `$ h& T2 N; j
5 r% [* |: U8 Z! j* E& p: d
; {" B: U/ t0 D( f. O. h t
! ~0 P5 l6 A3 i 5 x1 C6 }- R: |8 o* n6 T6 D* V2 c
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
' s# }6 N( v8 P9 i1 ]8 b
# K) D3 a& U& ?" O A - } _) K& l% @4 ?* F8 `
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
$ T# }; z: R) ^ J( @7 F P5 j
. d; x8 b; v/ h8 r 6 D+ N* s- l- ]- q
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 $ G- k9 } z; O* a
7 d! b. a& l( v* [9 t ( _( K5 c @, j8 X8 f! O, T* {
但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 " X/ [# h; l+ L v) _* f/ K
1 [* C$ a; O% A, l , R. a1 l4 }0 }9 K) Y Z! H
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。 6 s* ^) ~) d) q% k+ k( O
9 g( {- ^/ U) ^' V
# D# G' s. W$ q: U5 e0 v
$ H9 C$ Q" d) j: y ) _9 B8 a6 t% J$ T
: p1 ~7 g& I' ?& K# y( v7 o
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 A5 Y1 s% W6 h" p
+ X; u9 C% f& ?: B. N' |# K
1 u3 M7 x, ?2 t1 d5 D# q. E# d/ P OD
( S" p& r/ C" I. p3 e, F8 J
1 ?+ ?" l8 F' x1 v( ~7 O
' f2 v2 \; k+ k 举报/反馈
* g$ ]# d9 s) c6 P9 `& } # j/ x x i; t/ B) G* ]
H( ~$ s4 h0 n5 j) |4 g4 P8 o" D9 k
8 }* Y6 l, v2 I Y2 W+ O
2 D) f# K! n. ?2 |, t+ V) `
|