: v& N( X1 B6 m9 M1 L- z! ` - v1 \' E; H9 W
作者:
O+ ~( S/ H7 A: A: p7 r ( Q7 X! C- H$ V; v
/ ^) y8 ^ B# { D
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 - q8 n: @/ x+ D: S7 d
5 {& v) V2 b6 u( q3 V
9 o: a. x8 h, O3 u( {- W# N 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 ( U) W) R& q k0 Y
/ P/ R. d- W* n8 C
9 w! q6 @( T% f- T/ t
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
# t! B4 E' s; d; _( o0 r, b ' _3 X0 d! J6 z5 x6 t
( _7 b2 q% A# ?4 U* \8 T 机器人、无人车、无人机、AR,无所不能的 SLAM
+ H" h5 \, C5 k9 O) Q& n- O / f4 _" A1 o; k/ k* @" c
9 }* d% M7 `+ F0 s, u 两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 5 _1 Y0 t& L% Z# q2 S
' ^% r$ T- T1 n0 w# u) ]6 G
( U( _- L4 F& { m . s1 H9 d7 x* w' H5 c- S
{! b+ s+ ]- J; K- C$ U
0 M7 s; k, g5 Y
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 4 b* T# Y4 Y6 [+ A
: r, v* X* ?: {* Y) y " C! z! s! }5 y- Y
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 ( L% w5 P5 Y0 c2 }& \0 e" u8 G
1 ~; D# }* ?/ m: I' T% _: Q9 ^
' m8 S1 A" [3 ~ 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
# }, }1 r! y, o' I. {3 X
% }% ~+ `) N; l4 e 5 d' e8 h- ~( V/ }# ^4 h# B
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 ) v7 S3 a9 N0 b& H* B
% t( E. L3 t1 p
& o5 O4 ], S: H: `) F* T/ ~$ C) I5 ]; g 9 V1 O$ h+ ~ v) _4 r
9 L. P2 F2 S) I2 W2 o" M
( C9 s5 ^: d! n7 ` N0 u, ` 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 2 F, ]( D, T% Q0 L* @
! |3 E: a ]6 y* h
# Y- e( p* H1 O5 W8 N8 E3 B 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
2 P& u' n2 H: G: C, F+ F
# H" N) Z+ x& N* j
1 m: o+ |$ f' d& z 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
* ]/ j9 l5 r% `' q6 P - T3 A: \* K9 e! R8 @' ]0 A
8 h4 C- ? Z7 n4 e& b0 J$ R& g7 O3 n
# E1 D% ]9 D; _# B& j
7 b$ l% D. z6 k5 @8 E) |
( }& ~0 x, ]+ |2 ^8 c 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
) B, m, V3 T Y9 _8 P' ]! e, P
$ i' T: p4 G+ \0 w
8 T' I( e3 ^) n8 z# t, X2 H 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
. {/ K0 @+ M8 L$ | * ^& E8 Z5 x) N4 @5 I/ _
! P3 f2 W3 p& P% k" T+ g. {
0 g5 w$ Y; {! J; b* L $ v. G8 f8 T5 z& _' i. R! C
* ^3 }( j2 {, G; Z' [# F; q. q1 ]1 r
由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 # @2 y$ d/ x) q
+ M6 Z; h! R* y1 t' T; p- g 6 i* b! @2 K5 I* _7 S
激光雷达、单目、双目、RGBD,SLAM 传感器的分类 . K9 K" p u$ L! T2 K3 }: s2 L
+ j' @- f3 I6 K7 i& ^
. D# E/ q/ v$ r8 P1 D+ B4 g 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 6 X1 p+ Q$ b8 ?4 w% i
0 Y, I9 S U3 F8 l* g" D l+ k. i5 L# Y+ c7 I! E" c1 ^
激光雷达
0 b- c3 n- J% \ {2 u4 \% E7 C
7 U7 }8 B) V* C; `' l 2 \# X% @. {3 _
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
8 o- D% M" }+ K6 | V+ ~ ; }% S! N' C% [
8 _& y! [, b1 s) T# Q* j
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 * m/ e! X/ y7 [$ P. t. ]
9 x+ L+ a6 z+ ?7 [% o + P% f2 L& }, k. ?; d0 t7 l( G3 F
$ w$ L& L! x4 l
* u& |/ [' Z* `1 }2 B! [" g
% ~7 Y# e: Y8 f0 G }0 {, m& P 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 ; f; a, R3 D9 \+ g& E V9 ^
3 J% V- G5 C8 w6 Z% v* S4 X8 c 6 F, `4 V- ]* P' d& b
成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
) `$ |5 H4 `' W: b& V# `9 d
: a1 Y7 T/ [- j4 p( s+ q% N 1 a' G0 ^; E: k1 _! [% B
视觉 SLAM
5 j# u# E% q5 S3 [0 u* S # ?4 K6 j3 I9 t+ ?/ c
8 Z- `1 V/ j% F; d/ |
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 - B3 J0 o. z; d3 l; m' ?
A+ k% Q4 t% M# T! i2 L E1 z$ Z* S
/ |! c6 Q% c8 x
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
. P [! |7 N, i9 E
& g" ]) u7 v/ S Z
8 e: ~" B! N0 _# L# O# J 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
}7 q; A2 A p# j) u, ~1 e 8 w" g( _2 z! K6 O
$ h( v5 L7 M, q0 q" T2 ~ 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 + L' P2 H$ O! v" _' O: m
/ l' {! n' b, ^" [) u8 f
( s4 D1 t8 F1 |( {1 |: H# h 7 Y$ e5 R$ {/ h9 y
\1 t3 [* a" F7 Y
0 g6 O) `: p6 o# l7 l5 ?* x% D 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
+ U' N: e6 ]$ P$ E3 q1 `# n
* M# N) m4 a0 X" u: u" e8 I2 G
7 P$ a2 Q$ B0 v0 j/ Q7 p$ P. ? 但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 , m% o) K+ G+ N
% f6 P5 f6 l- L* u4 G' s + r* w: g1 G& @# p0 A" W
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 1 \" M" Z$ F" |# @6 ^
7 W( P4 s8 A! Z
}$ X3 E1 I+ L \# h4 i) ] 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。
9 G, S6 ?% w4 v1 J% l' p, N- D9 O& n A
P% V, b2 K9 u$ z" e
, D F8 u* E3 X, b: j* r RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
5 H9 F" S' N2 l, b! b4 T ! L7 E9 Z6 ^$ I2 H
0 p2 J& }, c5 f
/ R* }: s" Z8 t, k# g
6 z0 _: m* o1 H" D - v5 {+ p/ b/ E+ ^( n
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 0 G" d, r9 x4 V$ b0 Z4 R7 ^) \0 }
; Y) a% u3 w1 e6 ?, X0 O
% q- ?7 w( |" |
OD
+ Q! S& u, h4 {2 o$ `) k9 z, B4 ] $ L, X9 b f8 E
2 Z K1 K' F. ]: {% M
举报/反馈
0 }: b, p \3 _2 ]. u
; O _! H6 h) U8 f% T5 \& M% a: l. ?2 S
* B$ j8 Q( Y0 v" }1 S. w+ f: c% L/ @! e4 ~& M* Z0 n
& H( e! f+ e" }! t |