" t7 a! C% @% x% o8 _0 [# y1 g+ U0 E
& L! P- }, N4 a3 {& D! m" B0 t; t 作者: 0 N" o% p& A: w. `
* G" a% ?# `( Z6 s
3 j7 E0 T9 Y5 r; ~+ U 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 4 [1 D$ }. n c; g7 I: o: n
! s7 v0 f' e- r" \2 X
# c$ Z- v2 m2 T5 K8 ? 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。
# Y3 Z& B1 i0 j/ e& `) N6 } 8 T# L* z# S% ~7 T3 t
, k2 z }( Z Y. M6 A SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 / J2 ]. i j7 |/ a' Z& @. |
* b7 O9 J3 U( i% j$ h( k
* `# `) `" }" {' v% K+ N- q+ t* N 机器人、无人车、无人机、AR,无所不能的 SLAM
3 S9 E0 s) l7 l
+ e6 Q$ N% p3 u q" B- N& D . A( \/ y" V% F! f4 T4 [1 w" e
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。
5 g" @: Z. ]- k: I c+ y
1 \: n9 d* i7 Z( D) L
% x4 b, F* H8 o2 e- \+ G% ~8 F+ h4 Y
! E$ |' L# z, A2 W6 E
9 r. M8 H7 }% d* B2 ]; A
6 ]$ p' k7 ^* P! P" l# L7 _ 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 7 d9 s% w# d) H4 t! p* S5 C
2 {1 D$ R% f4 W0 t* c. L ' l$ q* _ z2 M, T
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
3 q1 s# q; X- J9 J. S 2 [( K7 \5 S0 N1 v7 w$ y* v- g
0 g% p. v' V j9 P. C; G5 |# n 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
) Z2 L) ~- t) x+ V; A 3 r6 {8 D6 E1 ^1 g0 q7 ^' V! g7 E8 m
, W1 ?' w; |* v- }; C( `8 A+ ]0 q
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 ! w3 a1 j9 h% `4 ]# G, u5 u
3 _; u e. o0 S; Q' j& q( F
+ Y% a# o2 }( P0 T # M0 C: @; u x) l& |# P& r O$ m
1 R# @$ m/ O L2 h! Z0 `
" @) r- D' z: @* O$ u& w7 A 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
6 o, i2 t! a0 j : Q: R e) S. X+ o
0 B2 j5 Q) U9 `. A0 q 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: : r: A F8 U8 ^
& T3 ]1 G+ x7 h( r
* M% Z: l( L9 g3 g" A& ^
所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 4 ^, D5 M# z. I! r
1 R+ o/ ~3 ]+ G 5 y/ T5 t2 `, Z; x( j
; S9 \" p B$ t, |* G4 u* P4 W
5 x8 e; w0 a6 \9 c( e0 J 8 H# b+ D; t$ D; }: F- n# f0 @
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 # K+ L5 ^4 z6 j K
$ M$ o! s, m4 T# u% C. S9 P; G
' v- E- s; C+ @% w4 X" L$ @( n2 r 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 " W' _ v" k3 h' X2 v
+ v& z8 J3 p2 Y3 P# M
8 l; x5 \6 {# l3 b% C% o 0 }7 F& V$ v! o) N0 Q1 f
- m: M8 W- X# y 6 Y% M4 H% G, c& Z% _2 V, [
由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 ' l6 S# [! E5 E1 i' ^- J
" G# Y5 F9 h2 w( f- Q
" Z/ [ H6 E& l2 y: G0 W* b
激光雷达、单目、双目、RGBD,SLAM 传感器的分类 0 h. m2 k( i7 i. f- t
8 _5 d# m1 I; _: {2 G3 ~0 |
K7 b! q; a! c3 B A: I
实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
( F! v" P" m! i; _+ A: H/ V# m
. m! d6 }, ^# [5 ~& L& n2 j& f
; ?* ?4 l) e: @6 M 激光雷达
2 Z# G+ X" I o' n4 p: r3 G$ G
" q6 d" {5 q. r! u 1 [3 z6 m) K8 d
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 : L2 E* Q0 n( o* E
. _8 j' }, x) a2 s
T1 R; H0 }4 J) o 许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 1 f9 C; ]+ X6 ~' r) q; R4 R" w3 w
, x) B( \2 j$ C$ S* g& f$ i2 u, p
+ s: z9 W9 ]$ T+ ?: H, l4 g* m% f( t
0 h4 z! S! D3 G5 y. s/ J . F% k6 h q! N+ o$ l" Y- D8 d1 a
. [* H" ~- c; r" k1 q 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 2 B; z0 a. W* }: z* n. F: u6 U
3 J" b. A4 r) C4 i+ l( a" l# w % j+ J5 X" @, ~, D. h! B9 v
成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 * |: O n' \# k- x! z0 w8 t3 Q
8 s' l! Z, q3 l+ b& S( { % H/ X2 w( ]% a3 G) `0 u, O3 ?: u
视觉 SLAM 7 [$ L I& _! x+ [, g8 @
+ J8 F" q# S$ v* @# h. H" ?
+ c9 r- ^. P( ~# y0 J
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
+ X9 U# T; \# z7 h% a- ^! W% x1 t
9 t- v2 c- x7 |2 F' D5 C
! }6 _' I- s) ]3 `, T9 K 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
& c2 }3 V. J' I- i" ?' G 2 r- W! J, F: c D* [
) }9 U& u$ ?* S6 M2 {8 S
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 , W; ]/ S/ y3 R- c8 g& o
0 t! J0 f* W* E# m8 }9 l
- E/ H: i4 P2 Q( g4 u$ F' M
没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
5 g! N8 \, ?! S % e+ E p% Z' a0 U, u/ T+ g
5 c4 \5 q" K: ^5 U: ~+ F- O& B" o6 ]( c , ]0 g: ?. R i5 q* O+ c
# |5 l2 \: P: L0 c' t I1 ~2 M
$ z- U7 f! @* ] 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
+ U$ H' ~" c7 E2 U# { Z$ x' Z, z" R
. H2 }/ P9 I' O3 N( I& @- Z' G' [
5 k9 G4 ^( r! ^: N$ C 但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 3 @- L: L0 `+ w. e- w( G
" r( d: Y* f8 W$ Y% ]& X' y
9 R% t" E$ S" Y# [ K% d7 }: r3 h
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
& H8 {5 Q# g- g9 U/ @% R
9 }/ b* c6 O% I: s9 t
1 \7 b0 _1 W' C7 Y, E1 z; a 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 ' p Q1 g( }" Y( q' @& |" M
2 Q- {5 Z' F& U3 r+ |' Q4 X( ]
2 K/ ]% C( w3 M0 y+ n5 w4 L RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
) @9 ` Z) T t7 q1 A6 Q V8 t
2 X' G$ s6 P: F) C7 S * n0 f2 Q9 [6 o; q8 q# O j
/ `" K& S, Z9 c( Y
( O* q: S% d% N" t0 u. W) U
- I1 C- T# v# a* }; O- r
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
$ M' I+ K: m+ i% V3 x
" C% Q5 [4 |! K# w8 W; D# h & h/ I( J4 u1 l. R/ p+ v" K
OD ( x& d/ {7 o2 z2 T
' U0 M0 y+ v6 f# i. |, P6 p! k. E
: v% A4 \/ s, {6 u0 e% V( g
举报/反馈 8 {( E3 d3 n2 x- i$ h; G9 ^. {
, _7 ^9 b- c! C% N" X2 z
; Z" |$ U7 I9 k1 f
1 b2 d/ {! f8 b3 s4 e8 u; Y& L* x/ D1 o4 L* u, ` ~6 p
2 ?1 d7 U+ b3 A* f/ Q7 ?
|