) y x' n: g: g9 R : X5 @2 u$ e j( |% @
作者:
: ?5 J" U; u1 |7 k" ~
4 p* s+ w1 ]* R( L {% ] & Q) Q# n3 l7 S6 J
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 4 P. D( }) j* Q* [+ B, c
; h4 M# h T+ I0 b5 I/ \. ]$ f
% o! _8 q: G" W& H4 ]: O 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 # ~6 g4 R: \8 w! ^! N3 h
9 d2 \1 U+ C8 I+ c3 l
/ l5 P8 m; L+ H- j, v SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 # B) Y( s( X q+ F. o7 G1 V
$ b5 i0 Z! |, O% [$ }+ F ' |% L6 M' W7 M1 V3 _4 X) T6 F0 _+ I
机器人、无人车、无人机、AR,无所不能的 SLAM 9 J' S: Z/ V! r0 T" K* O
Y' |! o- c4 ~% n4 G2 a + h9 |* M2 f5 \) U# I( \& O
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 * k9 G3 J7 o1 r6 ]# p. I
* d* A# Q4 t. q0 U
3 P' I6 z( `+ r % ?. u3 I! |" g( j* h* u5 O
! z( d' D+ K6 x6 n" o3 ^" H
- a! M- ]+ i. n( [/ a 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
; I3 v% I- l$ o 2 N6 `7 |6 B ?% d/ ~, ~) `# p9 s* o
. F9 ^9 m2 t( t8 X 一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 ( @! `7 L. X* p6 u- w
3 Z0 Z( r' s; w1 {6 s0 O0 M( K5 T 3 P8 X9 ~% O. G7 Z1 C3 x
而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。 9 {" m# y% o1 i$ a5 X) d: i
/ r& c- W' v/ `
5 a3 o P- L' H1 `* U" } 也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 ' Q' H% c; s7 Q
5 N% Y9 e0 a6 {* }1 O2 t
5 a: ~+ F) w, {+ U * H1 ?' M5 ?- @. g' I
" Q4 j9 y+ l$ {2 o9 w5 ~+ ~5 H/ c 4 M' n4 I( Z2 X/ H+ I
天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 ' S, R+ I9 M6 U& J2 |
1 V1 u6 k& g; R+ z' z, a& |
- K6 v" Z& s/ p2 ? 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
! D* f+ v- ~: V" _- D 8 R" ?+ Q0 c% M( ^9 x# o6 c) E. r
* j) _- S. d( ~# u4 [ 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 9 o2 O, q# t# _% g. _
6 J1 n6 M0 T! m2 x& q; Z$ ^
; c5 K, V1 I: `# n7 k. \ : [0 \4 k6 L; b8 ?/ V# u! _! Y1 ?
) K# \0 P" n1 p1 p, z
5 v7 K& ~/ j' `. P. q/ }: k" w1 g 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
8 \' Z, ~8 U0 _8 X
7 {5 X O# s4 O! ~8 t- p8 ~' N0 x7 h 5 ^5 x9 b- a4 Y: G8 Y
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 ; y1 o9 ]& o$ n# G. C' M
' s+ F+ M- [& h, K, \# ^, |
5 T! X; B: S* R; q6 u
+ [0 u2 U( N; V/ }7 C$ z6 _- p/ V7 R
6 ?, S; M% V$ e+ E9 o5 D" [
7 U, M( J& B) c1 X. z 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 5 K5 q2 p1 |6 X3 g) G8 u
: T3 A& h% p+ }, Z$ \6 ^( ] Z) ] + i: Y' ?0 ~, Y3 `6 ~+ G
激光雷达、单目、双目、RGBD,SLAM 传感器的分类 / ]3 z9 j. v0 N# c
3 I8 k# q7 Z% ?1 Z
* H' _; Z, F- V6 N- w% x 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
' n. _# Z" I! T
R2 P( O5 B- M* s. ? & c" C% S1 @' _9 ^# I$ v! e4 A0 U
激光雷达
" o9 F5 J& z r
! j' @& B# L! Y) ]' q* Z( c
. X( K% A+ ~- _+ F/ R+ V 激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 " A" R6 y* `) `% h! v
I2 f) W/ Q9 f5 j o1 T/ M * s" e* w: O. E3 |+ G/ T: n
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 , k5 f: E2 S9 t, u
' G" h4 k* |! e" ^
* F* ?8 \; M6 D% @) }! H% {
" {7 U. l! D8 ]$ T% a. r
4 H7 G2 c+ r E, M: X! X5 X
+ H6 O* m7 T9 X' h0 r 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
F. h/ z, t9 O O: i, e9 E . {# k% L9 P3 b! W0 D6 T
/ A0 g( ]0 m( M 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
* a+ n1 P0 W3 f
" ]% d9 B& ~! Y& T 5 V0 n0 M/ h) K6 H, v, c+ Q
视觉 SLAM
2 P: [. [' t8 ` l7 D8 f
! e6 J3 L. y) X& P& Y" I ( `4 W$ U! T# Y% M7 F0 N
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 9 c( ~9 P" {7 a$ H
$ h, R9 R5 x' [( R- M7 l
& R- j5 \; ?5 ^0 d3 ~9 D1 R
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。 7 c2 J2 y0 t2 e) G! e
8 m* R' H! w. P7 q: _
4 s9 A; S7 H T8 i" ~( \$ P 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 % T3 N1 G8 K' z0 v' z# l7 X
7 l6 C, M G1 f
1 a+ o" U2 I/ Z. J" E. q* ^* f 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 ( X5 T% g- M3 p
& e; x$ L8 i5 V0 i% I! k+ `
R" T. T, ~$ l* m1 i + T, ]) M5 E8 U' l8 H7 t
. g1 X2 A0 A {1 n 1 T6 z2 E/ K. r
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。 ( A9 P) h1 m0 Z3 F8 f
4 A% p9 m9 I/ C- A6 z8 A
: Q# w+ O2 d# q0 V0 K% Y0 q/ [. V& N 但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
. f; \7 R- g. s5 u 4 d1 t- i8 I, o4 T
" l( J; D; v8 J4 R$ s/ j 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
5 h: x# b1 u. d) f, s! @0 Q9 d
% N, M" `& e/ w# _. ^+ f. V
) B5 H" b% F7 t1 w/ t 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 4 F% z* U6 j9 u. t: k: a
% e0 g1 m M9 ?" `
" z V" q# t" z RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。 ) c4 A( o) }1 b1 S* n7 D# V% j2 P
5 A# {, P! Y" S& j6 I8 g' M
- m2 `! ]1 j( L0 c0 S% T1 _ / H) L T4 e% F& T* |: o
# h$ [* J2 j p3 \
7 \" R& a# J0 V" [. I; I) X 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 $ ^2 Y' P& t/ {
% k1 Z7 s4 n' [- {0 Z
# V) |8 C5 X, ?, P, m J
OD : g6 F( @6 S# w) @4 L
: y, h9 C" m+ r7 }
& Y4 N s1 |* a+ E
举报/反馈
" N, ]1 j- h4 L0 o1 A
) D% ?/ V, ^0 {
+ M R' v/ G! q% f* m- e6 ]/ Q* m A8 l) y
; W6 H; b* G, B
/ X) b. U% Z5 g, O# t
|