: x' e0 ?* {$ y* y- V9 M, m
, ?: c7 d: f7 {* P 作者:
% r( M. g0 W+ Q9 ?7 d9 F( b6 v* j
! }$ ]6 u, F2 M0 M, k! T/ O
3 k" M' ]' l3 V4 L7 n; }5 N* s% H 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 ( F! z! J: v/ w/ b+ q
* E- g5 q& q" z ^' q5 I
* f9 R4 E" {9 S2 ^+ I: [4 W" v 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 / J4 ]$ H9 w' m$ K1 j6 M% S a
% J4 N% y4 |2 X- \1 x- V3 ?6 p, s
! ~- d0 @4 H) e* @# h1 D
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
2 Q3 X- \! A1 S5 F+ l
3 j% z! k( K* u8 r8 I
* S" Q/ ^& L) f3 e/ [ 机器人、无人车、无人机、AR,无所不能的 SLAM
- Q) \9 ^; P) w1 f5 |& ^; ^ / t/ X! X2 j/ e* B! I: j
5 U2 i& l3 P8 G% e4 \" F
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 ! T- n& D2 `! S! H& R: Z o3 F
" \9 y5 a1 _8 r7 E! c. f R
: Z3 a! A! T9 h8 P' W$ Q; Y
8 n3 h0 p2 I# O/ ], B 1 N% z% F0 ? f5 t
0 q4 m2 S8 \; v% O+ t7 ~ 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 : a; k/ C6 u( J3 n
, y: _% C( P8 w; W
+ m2 C4 s4 i4 D 一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
: H' F, d" d8 m) |! J7 y ; I- u6 e* a# ?; V9 m3 @% s
# F" o8 u- S6 x/ Z* d1 \( B
而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。 & _9 N Y3 T. _. Q8 R
9 D) W) _% I6 r1 N+ y7 K) p; o) H 8 @ v7 F8 O* t4 J. i/ P
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
+ |- A: @! i6 D& g |1 S2 X
/ {! H0 g* @2 s9 _ 5 s; i/ P+ U3 i1 L/ N
2 W7 _4 ^& @" q0 X" E, _* p& i% Y# q( v
4 A3 b# {' q; e. ~, g9 L $ b$ T" S" N9 L9 `5 H- [' \* }* V
天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 z8 l* e7 I8 c6 d4 q( L+ L
4 W: ~7 N) M" c2 j& V
. B7 e# n& [, I 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: ' Z# `% z9 Y1 g7 c
$ S+ r' Y; l7 o3 E( T $ c% |& E/ ]: Z6 T" F
所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
$ ?0 i& w- q/ } - c! w2 w) s4 ? \$ E
2 w+ |# d5 X$ R: b7 U, b- s1 q
3 m, P0 M2 [0 |$ Y) @1 F
; T z3 m2 D; r/ e# w. d
7 G# r8 T- N" r; s 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 : J$ X; l( g( C7 h0 ]
* Q F& h' \: w& {
" ]" }. r9 R* M2 M/ K3 [, L) P 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 9 ], O/ A3 y+ M. I3 N( [2 \* q
/ s5 C! y Y$ [2 H2 y$ ]
0 }. \. H3 W/ s5 t0 t& D/ i0 N : e7 {: g7 f7 }8 F% |
6 Q$ F' g5 P- x
; t( T% f. ^5 Z, b
由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
7 ?( y2 [2 y' e. J4 ?. u # S9 e4 ]1 g& Q+ H9 f9 J
) Z% T# s3 Y+ ` 激光雷达、单目、双目、RGBD,SLAM 传感器的分类 & s6 ?- B' @% i. {+ y/ g
9 y* r y4 M L+ v X) V5 |1 Y
3 `! J5 P* R5 k% a6 T 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 ' p" c! K$ F( l; ~3 Q8 T. V
$ h1 v5 b+ `) j+ [8 x! E$ U$ _& z8 l8 m $ o, k0 ^! n. m- b& Q6 f
激光雷达 4 n8 h: D/ c# E" z# n" s! s
" z/ L' {6 Z4 h8 k- _8 H- C I
?+ t9 g2 d9 C9 }( C/ E" ~ 激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
% z+ j# \; t3 a$ H" u% k
/ Y: L9 G/ I4 l" ~4 x 0 B2 r& s+ W# d9 }7 f. Y
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 ! z+ X$ _5 h+ F0 _3 G+ P6 H/ u) F% X
$ g( m; p7 G* n" [9 `. E: ]
7 g. c: S6 b- A - ^$ p: A* P) u* u4 a
) h! L2 [) I5 k/ e 9 N8 E, ] N* J ^! M; s8 |
不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 " j' M" y. H* X, N
8 t/ \/ d5 z" K- N8 l
% _- q+ C' y& a$ x& D
成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
: j3 D/ S8 U+ O% Q+ g# F# m
" s! [* v- L- [% F% @
$ I. c4 }+ S$ {% D( ]" X 视觉 SLAM * {& b* Z7 y$ j, r; p
6 m* w0 ]# s4 b8 N$ G A" w
! Y4 U8 l' s9 s# D! R: H" p 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
/ ?4 N3 _4 ?3 j7 U4 x$ X' {
" T8 Y6 Q; z' K5 i7 \ ! B% z: |* a7 `- e; P
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
+ h9 Q) b# Z: @ & B4 X6 u M) P$ C J0 f
& M( ~ o- W6 _% ], D6 m9 f8 t 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
! A/ r/ }, W$ s4 A) c
! S7 q" |9 d! F1 i, X4 P: b( G j' z! Q
0 ^! g x+ B1 k8 ?$ \1 k 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 + N9 p% e) w" o6 `+ ? n, C* p
) y& d5 L& K& ?# [! B$ W
+ c" i# n- z- i4 D
3 T, t& J* |) I* P* N; u % p8 Q5 ~8 {- a$ }
! A+ n. b W! u3 F$ s: x 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。 * O; I% Q! H% w$ U
+ H, x% d5 k. @( U2 f+ x. ]/ V8 U
; {. j# |0 l/ s$ _: P( `1 w 但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
5 v& ~0 u: J1 T% H6 R/ V 3 R+ x" Y) @2 Y% S
# f6 c; ~) G) p! i
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
d- n# z0 }* Y& E+ g* W8 L
0 V. D, C3 }: J) W0 u! Y 1 w) E; x. ?: P. P" M' H5 `
但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 6 w' Z+ V0 x: V! Q& K3 ]# U% a
6 K( Y6 w: M- U4 [- m" O 5 y) ]- I- q# d
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
! y5 i7 q) ~7 L! { p5 ~2 ? % q8 |& ~4 a$ K. Z0 `4 ~% E
! }9 a) `# D5 c, T
) u2 Q! q- I# z
: H$ z" {$ D" K3 T& z & P X) H( c( L# m6 Z
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
/ P7 s! s4 Y6 e! | % w }# A7 }: u' o3 y" |# @2 w% ]
1 m( T! y" G( o2 g
OD 1 `7 Q1 \+ j1 R- ]
1 V8 D. K) E. L5 ^, X S6 G2 p
0 X; X& A9 N$ }
举报/反馈 " i/ M5 {, H' ?9 x% W$ a) R
/ H2 N) [/ ?* N3 E* V$ B# U
4 l- j8 c5 J7 S; V' z5 e k5 \
1 p0 K; R5 n6 j. Q- X3 K( w* o4 w/ ]! w
6 s6 Q' b; e; k( E( v. A# m2 L6 ~: Z
|