% `1 Y1 C; M$ m/ |3 C- ~
% [! A e. ?: X
作者:
+ T* i) P( j9 z4 @# T. s 7 S5 z R' J9 Y9 v9 I
% U E+ Z5 E8 D1 I$ f, q 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 - a3 [+ S4 ?' J+ W
* T6 g2 C4 o! E4 L# k
9 s! l# l b/ Y* A, y# P 机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 5 K& ? j1 B+ M! X4 ]% k# M
$ M4 Q; Q& E6 Y+ }
$ Y# j ~7 t- e
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 ! Z6 Q3 b Y/ k% ~6 I) y( [. G
; J8 \0 b4 q; l" x# w7 \
# p7 E5 z% S9 o
机器人、无人车、无人机、AR,无所不能的 SLAM 3 n9 l( c( z: @% j
- `/ O! d) c0 \* o
& }6 e: E4 {/ X- j( C# Y
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。
! ^; J* |8 I! e5 Y
+ T5 Z- U6 C) Q$ U1 A/ y
2 i- h: B4 r! E( ~) m
- C+ g: z; S1 @; w8 }
! A$ G5 @0 A8 ?( f- L! } & L& Z; Y& c5 ~3 `/ O. B4 C
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
5 k; P6 @9 M; U: O' {
. l- F. a: I" I2 j " d5 [# v" w1 T5 \
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 $ z% O6 K6 W! K
1 Q, ?5 B% D8 P9 w6 a
$ j: N+ R! m' G 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
' N3 J1 M# O6 |# E " c! O- y% P+ w* |2 {) f& n
+ X1 d/ }8 d: B7 q1 R5 m% T( _ [; E( V 也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。 ) W& E5 L. M4 b
8 `1 o' k5 O6 T0 g3 J, D
2 a) ^# g% w/ L7 _' b
6 O8 q/ a# v+ F5 ^5 W 2 V' t. v5 _+ ?% g2 t
& o& v$ _; D2 b4 S; y$ l- t 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
, S7 T7 ]% m) Z3 B; _ 1 ]& }0 h4 h2 s% a, h! T: {
0 W: T! ]8 y2 Y: y! X4 N: O* X
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: ; ~5 P6 s8 ~4 M0 N% o. y2 U6 Z, \
: z7 c! J1 h4 ~0 {3 i
8 |" m/ c& l; P/ \- } 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 $ E2 y/ Y3 K9 _; s) ?: f
( m& z0 K; \" X4 n, ?
1 H* e- L- A- g. X" x $ P! ` U% d, p1 Z' F* c# p' y
! p% y9 _1 d. b2 p . n" _+ W; I: S/ } F/ k
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
9 e( w, F# o" j5 M+ O' n / E1 Y; F5 {9 M) g; h# d5 i
1 b; d/ U9 ^% N% K+ U 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
2 F5 h( d* H7 _! M: L
! e' x5 H2 _/ x. J b* T
* l/ o- e1 Z: Y: r0 ?2 R
9 v) ]! s: D$ b2 _+ e; j % |) s( E9 W$ B! P4 b" \, W
+ a/ Q4 [. F! b3 n9 R' b- Q
由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 $ W. r" `; H" F4 j0 ~& @
% P! l1 ]' L0 P1 B
) q; F" N6 {# S2 U: |# w 激光雷达、单目、双目、RGBD,SLAM 传感器的分类 ; s; W& I; c" h& ?" G# E
' U7 }% C$ J0 z( Z3 u
. |8 s% f5 {" b+ A1 ] 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 * `4 S8 L4 F. V+ [4 w: [! G
% I+ I! Z3 l! b& {( |
: m3 n5 B' a5 P3 }: z 激光雷达
7 Q; ^% j# W( q5 U+ a
( L( D9 L9 G3 @ 7 U# T6 r& ~9 x
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 2 P3 V: @; d. a# p) O* Y. a
! B2 R, j o1 i! l8 j / [$ @; V% [, y+ F
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。
1 z" I1 F* D! M# ?( B" K2 ` , f5 a; G* J$ K6 S$ i% [
0 X5 Q( M4 ~$ M$ ^
4 M; T6 v2 y6 [: g+ R
2 N& z' A& t2 L$ G7 c8 _% ?9 \' u* q
! z I. M! s# Y6 X% x6 m" M 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
, Q+ ]4 f% c" r% d7 { _7 K / K3 u# J/ x$ J1 D! ?+ p
, D& G! M* f, C+ \1 S$ b( S 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 ' G) C0 z& P6 G( n9 ]. K* k
. Q' k7 u) X" w4 H4 L+ ]
2 o3 Q4 c1 h, ]& L4 P6 C
视觉 SLAM
: M* G" H: |' V- b ) E" s1 T1 R/ g8 A
+ T5 T8 F8 a, U8 L1 @ 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
" k( T6 L3 l7 H - z: t) F2 J. G1 e$ [9 @5 a
) G8 F: y! c8 \, m- Q+ w7 e, [ 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。 8 `8 {* c- T2 c
2 G+ {$ o! V7 O
. g, x% U6 Z2 c1 D 单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
0 k" T! U& |1 a5 F8 ~ ! \: {& d8 O1 P: l5 b' u
- J3 V) C% e6 D 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
! x: W' e" x1 S$ a; c. N! s
( v/ ?. l4 g; x6 R2 d
; S+ A' G& g+ v* r 8 ^0 W% J$ ^3 Z2 z7 M3 Y9 b |
# J" k3 p4 V7 t$ T# r! A# [
# m- J% t# ]" |7 V/ T; Y+ N$ W
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
3 A2 {2 U( p l( i0 r( p( B2 N' e; e 0 A/ i. d! Q$ ?8 l
* Q$ m$ C& d0 k/ M
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 p' ?& a" x8 }2 U3 `; s# C0 K
% x6 T i/ S' t2 b& \) r! q4 p
3 l, Y' N! t+ C: Y, N+ K! a 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
1 j& z; J! L' T8 a0 O5 l
( X5 T& }* h5 d 5 j& M9 e( {5 A
但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 + s7 G9 M0 `; [2 F8 X% U
- y5 g6 c+ I( G7 Q# ^ S / I# r; g9 H- m a* l- P! I
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。
' e2 h0 J0 p V' U" U" x( w
& L" q: v7 _& s/ l0 G5 _4 N ' `- P& ^& v* d1 p" E) G2 L
8 R; o8 e! U4 t; }7 A& e
3 o9 p3 ]$ p- M( p- R O$ j5 `* F1 h. j* s
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
2 U# z1 b }7 n* y
. D3 y) f( }0 A
8 N5 k. U3 P9 {# r/ [0 q+ t# q, y OD
) L) D1 y+ f, {) v( R ; G, ~" _7 y5 H& f6 T! ?; u. _
7 _$ h4 }7 a1 G/ @
举报/反馈
2 c- D$ A! o* F7 l
/ R$ j0 c# \, A% B. ]4 e+ p* ?8 P/ {% D. K
" u3 m) \/ V, m; H" P& i D# [1 [& J$ B( u+ `4 h" C* \7 ]
. x* p. g/ w6 {& X |