& M) J4 a8 Y% F7 M% {1 d
5 z- K; G$ t' J1 k- E2 ~0 } 作者:
5 N5 i* ~& K5 x: \
" W% N. V H/ A, o# m* l
7 `, i7 x' n' _% d; R 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 , W p8 R) N% w
2 K. H# w3 n# o- M
4 H2 t; }9 t9 t 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。
) E# v5 Z8 D9 ^0 b # o7 w& d& }1 ~( c; J
6 T6 r/ `2 b' I; T3 w* q
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 9 Y; i( W8 G& J# x) q4 g/ j
7 G: R6 K# G5 i' K4 u- K4 {, ?
?9 D P) q# H3 t% W
机器人、无人车、无人机、AR,无所不能的 SLAM $ s8 J' ^6 ~ E
% E4 z. I" q8 d. f
9 Y" w: S% e% I* \* d6 n2 |( X3 `5 L
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 * {% ], m8 W+ H2 Y0 R$ v
# j4 R1 g" C& i" K8 y! _7 q
$ g2 r* j3 k5 {& } H" V' ?/ m3 \$ \ 5 z7 p7 P2 C) D% o% E
% G) t" t5 U, K J+ t) D, l- R/ a
3 E4 S7 k7 L# a; o# h2 V) a7 S) z# j 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 % e. v* M* M% I$ ?0 o# \2 ~$ L; _( s
6 J$ a; S) Q4 r" W0 R; {
' n+ N6 S5 H' t1 p' f5 ]/ H. ~ 一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 $ M/ E) c7 F2 K, W# b6 G
[5 H1 Z$ \- n4 b! c$ }/ ]1 ]8 z5 b7 U
$ |9 H$ a1 k2 K5 t: ^; y 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。 : ]1 P8 N- ^ e/ F9 C
; u7 ]- E# k) S0 Q
8 |. Z* y: o7 ^ q+ }8 m5 J
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
4 {& M) o% X" M" V; C$ j . g2 J+ U8 F5 X2 i
1 G j! U1 Y4 J/ L* H ( D8 ]- S) ]+ @0 ^
$ m' M% R# a: N6 A9 b8 n* R9 L. W
A5 J3 L: B) [8 j
天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
2 l8 ^( T; I1 T2 T6 k) Q 5 `5 Q4 v' r# i% g8 z8 M
# v# U. @" E* P2 o% Y
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
3 _+ x- F- [4 e- |& T" _ + p D' L& L/ _7 z2 @
5 T% y- o4 C( q
所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 0 N: I" Z3 T7 S4 c+ D T
. A9 [8 S& z0 q
+ f/ Q# C$ @; `# f$ ~6 C$ X 3 N e7 t6 Z# H A
6 f7 q( a7 s* @- |0 z1 @
& n- s# a" S5 n0 G$ x" Q
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 + l; U" ^- r2 _, U4 s
- c4 I* V/ B$ U& y
x8 j2 N/ }: p 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
' T/ A- B" |0 ^7 X' k6 r
' T" Z& A% |3 X5 G5 n4 _
8 l4 c7 l/ `5 @1 _4 h5 S * ?! H1 u3 E4 Z- [. [/ ^: C
/ F4 s3 V& z: R) B
/ W2 S5 ?8 X2 K" z4 f% x 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
& _" n! l& ?+ w% e) k9 m# b) C) H : A5 M9 l( m- b
% n- I K8 b/ n$ l. s* d5 J
激光雷达、单目、双目、RGBD,SLAM 传感器的分类
/ X# a) f/ o4 i' V/ N
8 J! M/ \, N, V& u 1 i, L+ J4 |* }" M( B4 ~" ^
实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 0 _4 _3 y/ f- f# y' d7 U5 n1 l7 C) f2 s1 z
, ]1 z1 \6 Z* u# c. G& G2 l
% H _3 S9 ?8 d: c% t6 B6 o 激光雷达
4 e/ o. e$ Z8 F/ Q3 b2 \( v
! K! c; a9 s$ d3 F5 Y$ a7 M, c
- u( A& _; c2 K3 [! Y' v9 @, G 激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 6 [( o' x s& A0 a5 l; _
9 @' Y) R. w% i8 x0 a$ Z h8 l0 R
. H; E5 n) v2 \
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 / Q& B) b3 W. j+ w% C6 D
1 a; M& n2 y7 [8 R% n% |' v# x- A3 ^) Q
9 l" H; h& U- H! B% ] 3 n8 g! @8 [; ^5 E6 Q
& D- m* c, N# h3 M) [6 e6 j4 r( C- n
: ] M' C) c* ?' d) _, k" r 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 4 Q0 O* @7 d& R# d# ~) P$ c( K
0 I+ _0 d$ |$ L, A
, o0 D+ K+ s" G' _ 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 5 v2 c# v. o) X& F; H( T- w1 R
* ~' T! Q- i& j# t) i( U& ]
; X5 N4 }- M" O/ t9 g 视觉 SLAM - X( u: f: {$ I% z
( G c" S9 v% G: W+ ?% \# i* B
8 N1 ]4 `2 W+ y, C1 R9 ^
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 $ { _1 B9 H- V; q
( h/ f5 a$ q ^( U- h" B& e
- W8 ], N9 m0 E8 z m; v% e. X
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
- K* ^* \9 ~$ Z; Y & |/ c8 x" J, A
+ p5 {( @5 _( @1 @2 B* C
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
+ z4 a2 ]- @: m& M/ U
v; H2 q9 U. s% f7 ^/ A
5 w j k( t6 e# v 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 3 z f" Y% j% e1 r8 q
* G( N. G4 x x7 o, F. F& y
. h% i; r/ N+ X# p+ [( k& D" H
$ a; z8 c2 Q$ D k# D: N- i: J; F4 R* p9 b; [
4 x4 L; H3 z" J; {- D' V8 l 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
" z- `+ T' F% K/ h 0 |' i7 b1 }% @* k
) S$ _0 p9 d& f V
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 % b2 B, f ~# I: |
- t7 L8 R; M8 Q! O6 C: n* N4 r
( t* s3 ~! k* M" [3 f2 |
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
1 \ C5 e8 U1 [( C5 C/ o * Q( Y& ?# Z$ u1 g
6 l$ B2 m: e3 S# Q4 Z/ ~ 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。
}. s. \3 Y* s5 d$ L4 K8 i6 L2 ^
. o. m" {* P" ^* l6 n$ i/ y ) Z% B7 Y! I! S0 ^2 y
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
, W I3 E, j8 t! A. {
6 |* q- H% Q+ h 4 X4 a2 l: [+ P0 f Z+ |
3 o- S& a2 ]+ Q
6 o- w8 X2 H% n* M# @& s( ~) V 2 I- P6 t x$ h& a/ s* w
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 9 t6 Q. E6 C1 e5 ]$ c. k) ?
2 E; c5 g/ Y# y- b
: |. l; N1 t- w& { OD
- r5 x) F, d: n6 _
7 Y& E7 `0 z- B* S: l: E4 L+ C V8 F( t# [7 K
举报/反馈 2 _+ U; ]9 f' ~( b' n
5 {! I' C" P' L# |
9 C3 Z8 i8 ?1 r" n0 |5 F u# r! u3 ?8 D. e' Y- Y
+ o I8 s( Z; {
, h1 `! N7 M/ e& h5 ? |