7 D# _' R' x1 S) F6 O" L* v
# `- i3 n- {# C: W- y- E 作者:
: I" @& J* F J! @/ Y4 Q/ h & T4 _6 Z. L a* y: y/ _9 R' k
: \. d7 u- A4 ~" J$ c
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 , Z I v. `9 G4 x
5 h2 _' v4 K6 U! L$ b/ E& x
+ n: j& n) Q0 d1 ]6 a, j% S0 I2 D
机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 ! A$ T4 D+ q- K8 j/ _
7 S# Y0 ?0 J9 h' C0 v& N" R 7 ]; U) b9 @$ H% D; _$ G+ n
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
( n9 a" h) n8 X7 C0 p8 _ 9 T1 U8 W- k8 o) P: G' _
3 ]6 c% \3 k9 j1 P8 w 机器人、无人车、无人机、AR,无所不能的 SLAM
. r9 |9 ^( ]- |% Z2 z9 F! g7 ~* n4 F
+ y- v0 a) B w% z4 _0 u
$ w, {: u' B8 W1 q 两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 % M3 F* u* B, K# @
- ]1 g0 |: [5 r( i. Z
& d$ R8 R6 L' F; E6 h 4 i- a% g/ z/ v% n
& ?, a& V5 K) P
6 R1 \5 C" Z" u) {8 S% ? 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
% _7 F# O5 ]6 w7 i% P+ F
& j2 b: b. o8 K. X$ k+ k U6 }) q% m: N! E+ f3 W
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 7 ^8 c2 X- a( \! e# J m7 l: K
5 g2 w. d3 @5 p, |7 N& }4 S$ e
. {' L6 y2 u9 l# l, `6 L, T5 d: g 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
8 c. ]0 Q8 p+ l 5 B1 o) N0 y$ o+ t2 x
8 E& I% \* Z" E7 f8 g6 \! B6 q8 d
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 8 p* A7 m5 |1 Q; c% A: N/ e- u
: X, C, D: f: q5 ?9 e8 d
# E3 T' W, U0 G) N+ e : A7 {( ^0 V4 S
0 L9 K5 ^5 K: j; J) ?
8 y" Y7 {8 b; P" m" v7 \ 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 3 d- W! z0 X! Q. M
) Q: w. [5 J6 ^% ^) f
) T5 `+ d8 s" L( f7 K& F 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: , R2 e- V [4 n
0 ?, \- {. T0 T
1 K8 n8 Q/ Q! b, u 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 # p. a7 j, g, S' I! b( t
3 `; M* T" \. a- h: k
: r/ G2 ^7 h Z0 ?" ^( O
( |: B/ B- c) o
2 E- W; [/ F# L7 e0 Z- N/ d! c 4 S. T6 I3 q# q0 {9 j- P( }
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 1 y$ e X: I# O4 {, j
3 q! C) } Z( E, h) _& H
$ ]' v/ T( S3 r2 N* @
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
5 V9 S0 B9 z4 ~7 W. \9 f& ^6 S# E) d+ p ' Q3 a2 E8 [" V0 X3 [: h3 V
9 g% {2 a3 f% e7 `' h
: W( m: E$ U4 h ; C, F9 [4 H+ M8 i2 U& B8 e8 A8 b6 }
2 D/ E$ l: @8 k% e" O7 K& {4 g- @8 I6 ?
由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
# ?4 ~+ i' ~* _& m
7 s5 d6 t# n! x1 q6 d( ^& ~ . A' K( Y5 C, N: n- c0 z2 O& h
激光雷达、单目、双目、RGBD,SLAM 传感器的分类
9 E0 X( F3 S8 @* l+ i1 x
5 |/ t0 y0 V9 I- Y0 n( s9 J( t. ^
. [; v8 L% z: z' V4 R 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 " |% {9 U( ~. z; ^
- Y1 |! ?. T8 Z% d8 |3 h# k+ U
6 ?2 Y' c" d! K2 f
激光雷达 % @6 |+ C5 M. G* {: B; A2 @
: P- b& W8 g) K2 c2 \# r! A
8 o3 }) c8 w, |' Q 激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
3 o5 x1 P9 Y) b$ o" ^8 F9 A( h( T
7 [ ?' I5 |' e) v @, e5 x
: |3 }. |6 ~* N7 g) V! M; G8 h 许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 9 o* b3 q+ n o: @
! ]* U! H e2 x& h 1 {& }5 {. R, _- e, a' |
* _ f( _2 h6 M) A/ A" i
7 u Y" O/ B0 }" Y4 X) [7 B7 T
2 D( E( z2 ~8 g- m! a 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
! i# g' G3 g+ b0 m" e& s+ O - q, {2 c" @, K4 P5 r7 k4 h
) J, v' _ c% X
成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 + g& z g" C; P$ \5 d% H/ @
. z1 O( y9 R3 ? , F# ?( G' j, a% ^& d
视觉 SLAM
3 f0 l9 X3 Z3 c+ i7 r, h5 n
) o( o$ m4 J4 K& j , q2 W4 i# k v- w5 q: i
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 ) V) X7 f+ V! g
) {1 ]/ E) W9 S+ h & b- x) h4 f8 |1 l5 l. ?$ y
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。 8 j7 \8 _( c' s( ~
) c. A& |, [' H) J/ Q # H* z6 _6 n9 ^/ W
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 ; N8 i7 ^; v! d
e; F, O3 z( p! m8 t
+ g! f4 ^/ U4 o# S 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 4 L; U$ t5 x4 v% [6 \$ S8 _
4 G% T8 i9 b! [# G9 Y- G
6 v: ^4 {" U& X6 i9 |4 G! g* f
9 k" j* I, O4 W2 r5 t4 F, e 1 Y* w" ^. F5 r ~- v
! z* _: d$ z( {- I9 N/ g 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
0 R6 s2 X# H9 s# r
3 ` j1 ]& z9 k' x# q1 J P7 [. q 6 ]# B- @* E/ A4 i# W ]/ P4 p
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
, D* D4 w1 {/ ~# ]
, B9 l2 P' a; z ; X) }" A1 q/ q7 P0 y
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
: e4 A8 K$ N& o W( _& u7 X 1 x9 U3 f4 t! Q1 F
! ]$ i" m5 A& I& q$ c 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。
6 a4 X1 J: {7 P* A1 R9 p& K& ]+ e5 ~
4 ~/ M* ~9 A* r) i: G
" d N a5 s6 x/ F; G6 G RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
( j+ {* ]# z9 h, N# L6 C % E2 o( w J, U9 [! q5 @
4 v! g; I. Z) y* T
# R6 x, t0 L5 t( j" \7 _. U8 m+ g5 b
$ F ~& j Y0 w4 C
6 h; T: r6 d% ?( x2 R9 ^9 g 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
2 d, V# N+ v, S( n# J7 ?$ ]& a
3 A$ y- y) z- I+ l8 R6 F ' Y: a3 l: h6 v; S: z. e6 I
OD . {" ^- [) w8 I7 D* c+ R4 e
- G6 ^5 H7 t) }1 b8 A6 @
/ A" e# K/ Y9 u6 C8 C9 _) J
举报/反馈
& c' M5 q6 c+ Q6 x3 R5 w9 W+ ]
5 x; H5 x# C( C% v+ e% \) w, ?5 L. t# @: B' y( }
: }2 \7 l" v6 A
0 f8 e1 f) ]; \' S$ o8 k
2 I7 i i5 k* Y4 E0 |' U( N! S |