- a( W) \' I c+ z& J- D/ V
' O4 i. ?& |0 N1 N4 e/ w5 k( [0 W 作者:
& ]. h# v. E0 c3 j
" G- S* [) K c" `% q
* `' `& ]8 ~. ]' a. S! S4 d 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 N2 w: @9 M% ~+ E2 v
+ {$ {9 C- {6 d+ g" s) a1 }
6 V1 w2 _: g I/ \4 c" y Y 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 9 a( K* Q5 m2 B2 N) w
8 F7 u a9 y9 M% I' T
+ _$ ?1 R) b Q9 N
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
4 J) O* u; M# }. M( L( l0 y 2 a8 w3 C B' |3 h3 W* I* I) ?
+ |$ V ?* _- h+ f 机器人、无人车、无人机、AR,无所不能的 SLAM 2 ` b8 g9 _ x6 @8 H# Z; j
' N8 J( q- h$ T2 @+ C: i
% P2 T" `8 C t1 N, @ 两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 ; c/ J* K: ~! {8 F* j* ~
: ~: M! L! J) b0 y 6 m0 f) a I0 N6 z. Z
6 | q- B- m+ F4 j
- h1 O% Q3 `; Z4 t3 q; T
8 o# j/ [ M; L& m% Z; F/ i
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 4 Q+ p5 t- K+ K9 v6 k5 g9 A& U
" z2 W; @* J6 o, Q# b
& T! d# g2 _' d" i! C 一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
3 \& ?% A+ H7 m4 O& n" u) _; d 9 M, @# F; W$ x. ~4 y$ u2 _
5 C1 j" t5 D% L* X7 r/ [
而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
6 B% ~ F- y5 R7 O6 M; E 8 R$ i1 T+ `, j, |4 \
% D) F s. |: E! E' }# k, m
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 0 m7 ?% ]4 {( T
4 {: b; R9 J) X; @. h, w 8 n# b( K0 x4 z7 r f; r7 o+ \
/ U# d7 c/ }* @! N
: y( ^& |% A9 s- [ ) _7 D. Q" U1 }* i, ~
天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 % K9 t! f* o- h0 Z' ^1 e2 ]
q3 v, }6 x; D* W3 G 6 L( Z) b8 O. m. ^. n
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
* j4 k; p4 V" |$ P. [& X2 T2 x m 1 B" f2 C& F) A* }$ G, y5 F0 ?
4 X8 t+ x1 R7 M: y( ?0 a4 ~+ \
所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 4 I! J3 r& ~7 b2 M9 {/ }
4 K; s' I: I+ R f: X: h
; t# X5 W! t4 [% g! C" S
( _+ B9 F( G, a; y) g7 F9 ?5 S 3 b: G; E) l" R3 _" U: W* S
5 \4 b3 U* N9 s8 Q! s
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
7 ~, f. e _9 A7 Y( J/ Q 2 V" T, E! b5 W1 {7 n ^8 J& p
9 `9 B3 |- Z8 h+ l0 G
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 * o7 F) N1 X* d* ^
, [- f) B! X5 p% U
# N2 ~3 x$ o, }0 }' f" M+ Z; n Y/ c) l( c1 n" H0 e
( Z; y) Z6 k3 U0 p
* t3 s, p; v8 h# D 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 # b. A# X7 v& Q# \# b/ |6 C( r
- t( X7 _( A1 z' ~0 s% ?, V3 x, f5 p 9 Z" L% t6 M3 p/ l, {( Z
激光雷达、单目、双目、RGBD,SLAM 传感器的分类 0 H M! Y9 r% q* X9 @9 y
& I, _% `1 [4 D0 g( ?: }0 C; X
' v# ]& z$ v. p3 F" c& {5 ` O/ h
实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 ( @. H- Q% t7 e* [
$ F+ \5 k. O% ?) L2 K
5 c, l8 n1 u5 H, F/ d' o 激光雷达
@' c! I- Q% L4 |* j* F ' ]3 \5 F! T0 ^2 k/ ?: f* v
* `/ Z/ w3 w! z) O8 J0 ^2 R8 q1 b 激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 - e/ y! O* L% L2 S2 U* f, Z
/ j/ S% V1 j, b. w* K q
8 G, d9 i& l9 U1 q& J- w
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 9 M" l5 H& A7 J9 n/ @6 P
; R( ]( J. ]4 R) @% _4 T8 z) z
6 a9 D( [& ~4 ]3 K$ s% j( _
4 b* J- J T/ U$ x% A6 g5 x & D1 q& F Y% B0 e8 L: ^- m2 Z1 c
8 M1 q, [* k" C( R: C/ A$ U; q
不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 ! D6 j# k1 h3 }' `/ T6 |, c
% g# s7 q* k, v, m7 l6 ^
+ h, L/ a0 f" ?) F7 U% z' Z% o 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 , E& S, P2 d- |1 C/ p
) m. E+ _9 ^$ |' o! Y! i2 f ; f* Y0 N# h* u; ?' H7 R' S
视觉 SLAM
1 y; C0 o' k0 I; @) C
+ L) x; ?1 C1 b/ Q+ q1 W
! {; [8 o, T# w k/ u8 p! L; q0 ] x9 @ 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
7 x& u* N; L. c T5 |2 V$ D
: x- O0 X. K3 i @; s$ ~
; Z$ e1 M. k9 F0 w% l# g" u; Z 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
2 x' ]) \8 c5 d- c X # I& b& @2 v2 H1 x5 z8 E$ q! Y
) S% N: r. w& ?" d% D+ a: k 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 ) o* Y$ G$ M" O7 q& I7 y
! e: R# @4 `7 g
& T! }, J/ ~! h1 V7 H 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 : m9 z% C- c" ?# _8 W
# ~$ c* I& @9 z, R/ P
4 H( \/ ?. K# j% D4 O# M
, y& S A9 \% k/ B1 N
* [$ [. i8 T) _- ]
# |% S) K7 B9 L' l) M 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
5 J" g E$ Y8 B7 m# |5 B
6 s) J d2 b! i' I * O, o5 c8 q. d- q- Z
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
( h0 ^) Q+ p& z6 ^ * ^5 P% O A ^! h
' e' s0 B9 i5 f0 E
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 1 y* ^2 S% l U ^7 o+ p$ n8 Y
- [% s6 x' V3 x r
+ ~5 K. D; h- W4 E1 s1 n
但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。
1 V' u+ p% ~% H/ T: m3 [ . _+ X f$ p2 L9 ^8 P, a
- o0 e. @, \/ U+ b2 K$ C RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。 6 W5 B5 f3 E; i E3 s* x$ P
" `0 E t2 \2 G+ w$ J# q6 A
" i1 q, O, D! O ; e& J% J+ h0 l
2 X- R- }0 r" B1 S
& L7 r2 @) O3 y2 ~4 a Z; ` 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
+ k2 ^8 e( o5 [. K! N
' ?; V4 R5 L& g- X2 L
& f4 J/ u7 s2 ~* U( H, N) k+ R) `: ^ OD
! i' F( b/ [# A9 Y. N7 j
8 O7 m I' L, a 9 s9 i# f, \3 q/ T
举报/反馈
; d8 ~: s( }! M( R- u; }, K6 x # F% L3 } b) R" f
+ P% X) T2 M5 z& D- i: `0 f5 U- L
, C. k8 R+ v6 F1 Q
8 e; x( t) y* n- M; m
i! z7 n1 L% X- \" c |