+ ^7 I3 S6 X# B& x6 a
3 B+ o4 i4 O; s' _. _# }
作者:
# n4 g0 T9 h+ v
; N* C4 T- g: g0 M8 M1 z( S- _ 0 e/ B+ p8 u+ `
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 - V) X. X3 c; l' X1 Z4 G
; ^3 u$ k% l4 g1 a. d# ^8 W
: ]5 B3 N3 A8 \' ~ 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 ! q2 T7 k' _# v0 f
o/ N& O! h# O0 I; P
' W, p, }# J3 }8 l SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
0 a4 G) P! S6 D+ B8 N$ U2 B* x1 P ( Z1 T- t% d, q8 Y
+ N4 Q0 u. E, o" g( r6 p- j 机器人、无人车、无人机、AR,无所不能的 SLAM
, I" f1 O% d: z8 o) K
0 g6 h8 Y3 v3 `3 ?* n& Y$ ] 0 M9 ~/ o$ u" I: `
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。
\' H+ T& L. p d5 D
c' X; G- @9 B' W9 c M, R& T
% @$ [9 P# g, U( \) E D) u
5 t% l( U7 a& }' J6 E * F+ d8 n1 l1 b0 R$ ]6 k9 H
1 H, C/ Q# K- p- ], A2 M: `4 G# U 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 ) Q) r" s0 a, @4 B
7 {6 q, e- R, J5 Q0 B . K1 U3 x# E) ~8 s% p
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 4 A4 c5 k9 w# c5 C/ {
" Q1 ]7 h( S* ~+ }' F* _$ B8 p
9 t& }# C5 k) |$ \! a 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
9 |; L2 q# p7 y1 a7 N, _( \2 ? ( w* ?, U) u7 }# d; P. Y
0 } t# f8 ?; i9 g
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
; b7 q6 h# T/ W5 u1 _
$ [0 M* e- [% u" w( C n9 Z; Q, k3 V! O3 D
8 `* G4 N+ l0 E' f' o4 @3 F/ L; i: |
5 X* R3 m( V N/ _0 E# [4 l* w
7 _+ Z& S9 D- H4 k 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
2 j0 u8 @4 v& Q, W# ^& Y
5 g' I, s1 h; f r# c2 y. c, |* D* z0 y
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: 6 h& g# D" P7 R9 b% p. U' j
$ v4 G! x f& k# |. s+ i& x 3 D7 ]4 v. [' z9 \- I: v6 }
所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
+ c& E0 k3 H. h8 g' P+ k
2 m4 | h* g& I5 N) S* V
$ [* l5 c3 t" t 7 s6 L5 |+ V, H$ w. W
/ ^! Y) [$ q/ R" x& }& ]+ R$ z
) \ W5 P: l8 N% o 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 9 O) Z; o, s2 ~0 |$ f
4 M; V7 o8 ^, Q3 B$ n: U 1 A& b& z0 o' e9 C
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
- f/ X! q8 }% I8 e4 ^( F! l# |
: x" Q& D3 E! f, j , k* W/ {+ c- Q6 R7 j
$ `0 x( E4 y3 d6 x
3 n! d! X3 a; W4 W, w7 A
3 E ]0 C! p9 h2 h' u, U: p 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 ! c( I7 }2 X! \" \: C% g
; \, ]3 O. K3 u3 m" o* P
3 d! m; [( f& w. a: |8 { 激光雷达、单目、双目、RGBD,SLAM 传感器的分类 7 f, f$ f5 s& h
% S. q! O; F, [1 J+ X
) q9 M$ p9 x1 R$ \- R& a8 C 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 / O# k! ]4 R/ x3 I! n
" Q% X, Z6 G8 I) n* A" M3 I
3 x8 I, l1 f. E) e% L
激光雷达
+ T# M1 m+ m: F
6 [0 F8 \" @0 Y. y& S& L
+ \$ W P0 Z- @- ~ 激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 7 H+ l2 e. H, e0 [
5 j! J- O+ J' e y
4 F1 `+ o6 Q2 o4 |3 | 许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 ! O( W j9 O6 ]$ W7 T+ D
. B ]3 {8 [. @$ q/ r
2 ~0 G- `) r6 @( }# N " s2 e! `" s, a2 A
8 R5 [' B B! o
# e3 V& q3 D S. o8 }, Y( } 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
+ q1 o: J4 S. m: L + a# s9 u6 [# z0 |
; r& Z9 V4 D8 G0 j0 ` y! K I' S 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 # n- I& o9 R! Q
( [: ]9 R1 K8 ^+ W; x; V& _
1 Y6 K2 W: d X7 e4 d1 q4 t7 [ 视觉 SLAM
" [ ~+ C: B! k& F8 r/ I7 G. L
6 L) @3 h. i5 Y9 d3 l: V
! a+ n: \$ p/ m1 K 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
$ I+ ? z2 |! |
9 Z0 ]) F: |+ ~/ n# j6 h% C* o( T
1 u7 n. X2 v0 x2 R+ ?3 t 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。 , s1 L( a. [4 I8 |9 t& x/ h
' r; D- i8 G4 M2 C- Y# x+ T
, x9 N$ b6 q. M5 w, J3 e+ j q
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 J7 n* i* a7 s1 u: K: a
# V" k) X/ p. A5 ^: U/ t: g4 K
+ ^9 p8 T% g# ?% _2 I' F) [5 p" f 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 . N! _4 p- r. Z( q* x
/ |3 b7 m! s: f Y # U8 T/ u* ~% y7 s/ Q* E: T
# R0 R! u0 U; b5 S. b7 A! c" j/ F ; _+ G8 L5 k* d) C7 Q) {
' F7 X! M& i: q1 e3 F* U8 g 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
) q, H' ]. I7 U7 E$ O ! _' j( u' S$ v
" Z: c4 w4 I$ {/ `( E! s( c. M
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 " s& t4 I, J2 ~% n$ \
/ I* L, \6 x" O! D w
4 t8 W( E% g0 V A$ v, I 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
$ J- r3 _: C6 M2 V Z6 n8 b; n ) N: c! `0 u W7 A/ F/ a# F, ]
1 U7 `# X2 n! D6 \ w 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 9 j# U4 F" j/ Y
5 v3 m2 n' z. s+ }
% N" S+ R: G. M% Y" I+ }
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
7 b- a t9 o! |/ ^7 M3 _- T, G 5 L* P% {) W7 u; R: \. e& j3 W! {
5 k6 i0 Q8 f( V n7 ^; H) |) j% U
: o+ }2 F; R; N1 Y1 E! G$ h6 \2 A
h/ C; W7 T' |, a1 H/ [# Y
( k/ ?9 v [: {0 ?+ S6 b$ u 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 9 V' c+ Q' z2 e; J- I5 f
Q& V7 ~/ }7 u# ~4 o, K
8 @) c9 ~- p& e2 _; L6 k
OD # d) p& b _/ A) Y! ]; F: B( [
: g8 ~& `, O8 b) A" R5 P
) M+ {6 A* P& K" P
举报/反馈
* D* {1 H. j, E6 T ' [ ]3 V+ B( o
8 u& y7 d3 T$ J
- R ?; F9 v7 r3 U$ S- @' ?/ ]
4 U2 R4 X5 c1 @( P! s
3 M# h. p( W1 g' y: c |