! V8 e. l+ |! S7 }( j2 v
# l& j3 V2 N" \' z' `! O
作者:
9 F+ l' u1 b$ b9 ^% J% A
! v# x# ?8 p# x3 i( t' S, J
( n$ `3 e5 s2 Q( g0 u6 D1 D1 e 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 I/ V' p4 k% V: {- @
7 O/ U3 B/ L& A7 P. ?
# G; D5 {, m9 ?1 S. H. \ 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。
% _5 j- J# H: v5 a0 }- S
! x% q. L) Y- C- p
, G( i) ~: E i8 \7 ^1 H) i7 L SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 8 c+ O- [6 C3 g0 e! p/ M4 n5 |
1 y+ h9 ]7 r7 G; y
! t5 g# s5 C4 n( b, D3 w# Y$ l# m4 P
机器人、无人车、无人机、AR,无所不能的 SLAM
8 v" e: J% U) }" k' Y 4 P( P4 `. ^/ K% `; B3 U4 Z
' s) Q5 B( _5 `4 q5 I# D1 o
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 c( Z* e# {8 O; N9 H' S7 }4 K
_" h, @" ~; |( L c1 G K! @3 U
: Y% ~1 I* F/ m. U% t# w4 E
0 o' w+ v6 |. `
: m' u) c" `3 X / u5 f' e! c; ~9 O0 s
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
/ N7 B) B d0 u b7 E ; x0 B8 W4 p F6 B. ?" v
! q6 D/ T# K. b {
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
4 m* C9 w4 D/ [) @% u; ]
* ]; |" t1 _. ]& k8 @! S* }
- C, W# A! ]+ N0 v% P8 y 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。 8 `3 c2 r$ i/ ^+ m7 @& V! b
' S8 h+ ]$ x# m5 s _0 d
@0 O: x+ g5 g
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 - g" D9 T- Z6 o7 t1 u: r+ S
/ O9 K1 B4 N. l$ |# F3 R$ k; B3 R
) e: r k3 K! N5 Y0 }: y. k
$ r$ M7 ~* k0 G, F % m; d8 q9 y) K! _, ~/ \) [+ ^4 @7 ~1 b
% y% k. m* x9 ?- Z4 ]& a 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
3 O2 p; ~% j- P7 O+ F+ Y
; K5 U6 P5 O4 `- J4 E* I, B 1 [+ Y. D& e, O7 n+ c# ^, I
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: 0 ]% E7 [9 B. F# ]$ `+ U
7 g# t0 E/ }! k4 v. `
' e8 H% o7 r( {1 d+ l3 |2 e 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 ! g! j* t9 A- u3 ^7 R( K7 G; @
/ H! V: q( r3 C
4 b( l* B- C* O. f4 M+ h
( H* `/ ~1 j. Y- V$ y; Q
- F$ x5 [% u X' A$ W* D! P6 Z
# U! \# M- S5 E1 |( ?1 F 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
' [2 U* \1 R+ w' E3 {) \ 2 p' N0 e' C r8 N. x
1 I5 A" i: {+ z9 l8 ~) J9 q 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
! q7 D& v6 _% V! J 4 I& H3 @2 a$ L: J4 m) w- s' W
/ U- B- F$ J3 G4 W& E
7 k; H4 R, _3 y5 h5 L* s : V, B& a! h s. }
, I. O9 D# C$ V
由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 - a" c# D8 v0 x s# D. }8 p
! l/ O& `& g4 G$ E
* U& h2 g+ f* S5 Y' m8 F
激光雷达、单目、双目、RGBD,SLAM 传感器的分类
L5 G$ w2 {: Y8 V . z& ?7 G" V* h
' D; ~$ m- ?9 W/ H& I$ x 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 9 x3 Y* O" f9 Q( i8 h
3 U, |1 l- x) P! ]% V9 }
; w% L% z/ d: F
激光雷达
# O8 p1 u& s/ E3 Q) @/ J' r2 I& V
' V. G }' Y4 G1 D7 ~3 L/ t1 S X$ s, p* ?8 o) n3 a! t
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 - s; {/ V% {4 \0 |9 |
^; |$ o( o6 O' a3 h
4 |) R4 K1 o" c2 _5 s6 K 许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 0 f+ ~; q5 |% J6 t. t, X/ _5 s
. J- b( ]8 j- O
: `' p1 c$ y+ A$ v
2 @- z: R# u1 K! O6 E) P& M5 f% M& ] z
7 o& C- m: M% Y B9 i1 ]. `
$ \3 L( U+ ]1 t2 ~! T3 o: Y 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
( p% E ]7 z: @4 k) x
/ k: K& O; I& E. f8 N: {* i
, H Y; f) ]; [% J 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
+ C. }- L9 { l5 n
+ u6 i5 @; B1 m( T ~3 y9 I% z8 R: d( R# g* e# Y7 T1 L2 b) ^
视觉 SLAM
o1 Q% g2 X. X0 V, f& e7 a7 `) Q
; w2 n* U! y3 |7 z' @7 @
( R! R3 p. R" @" U+ t 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
$ z# n7 Z# E3 Y/ S* ]
0 m/ J7 ?3 Q0 I) x
7 K! ^* d) I* k1 a 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。 : d- X7 x9 y9 M8 I: V
3 B% Y7 i/ B+ I+ ~+ Q7 K5 n7 z
o, y2 V: j. J& N7 j+ H1 E8 D Y 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 4 S D' g7 C) T7 G- C9 X3 r2 H
8 x# D" X! u3 b# W; O' [4 G4 x
5 [5 |2 r8 r) O 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
" t; e, z, t1 r6 c- B8 s! I & v! i' [8 |: d! o
. R/ F: U) V: G7 L; ?
$ r2 i( t/ i8 ]. C9 r
+ t B2 v) t! d( K; q 2 `- ]+ N. f9 m/ h7 I
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
* T9 @6 [4 P7 o & o5 y. m: [6 s1 j- f" H9 x
' d, H( g7 ^% D w5 ^. j
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
+ x5 s, _* g4 d* p+ W8 F( ]: I+ @3 [
8 C& b2 l( s3 `( g0 h% j8 L
* C( q4 U0 s* s" U8 s/ v- E 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 : v3 ]+ E$ m$ k( e% @
5 C8 \! M+ h+ k. d
8 g/ q2 |3 y5 q' | 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 % S& N- d" V6 t. q
* J6 f2 z; N6 s5 U' L. i. o
% B2 k) f* c1 O. q1 c% c" W
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
: k& r. N" g3 l3 y' p0 m
* U5 K7 H$ ~8 v7 W3 q
' ~4 V, r7 [! V$ ~/ C( Q) [
% I( S# _+ u3 L; I/ g9 X; d / U- \# k# k- K9 C2 N" X5 x* V' ^$ {
0 U, @" }9 C# e8 l/ @ 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 ! @, d& ?6 p& u
) i0 p- D+ s g$ @
" u! k% Z0 r9 q OD
0 C4 v% e3 F' E( b1 e
8 W; |/ z n" }/ N0 g3 b. g
! ~0 m- D" ^( d- l3 `; s 举报/反馈 + B) k, k; \3 W/ l- X% Z! b
# S) E/ M% t: l$ B2 H; \
% H. I: W" Y' \( h3 x
Q5 x. R$ k$ j5 `: F/ w7 V9 s2 q# r7 o# A0 C2 L
' d2 Q) M4 b3 `+ [3 z/ o5 c
|