7 J3 N# M0 }1 ]. F
& B: y2 Z) R$ r$ @# Y$ K- }6 Y6 C+ S 作者: 7 E7 p7 O6 j7 W0 _
1 Q9 w( `" f+ r6 c
- Q, ]" C+ Q6 ~) j# Y2 ` 当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 5 Z" u! B) A7 m( D! G+ |/ p
( e' f% j- \1 U
3 T( o! Q% R/ V
机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 . [! Z; @3 _- Y. r
v& {, c; q6 r* V+ C T
! r5 |! e2 t7 S3 o1 O SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 0 i4 @7 t+ u% F
& b4 v; h$ L/ J& s7 y
' x$ w6 q$ Z$ y* u9 g( t 机器人、无人车、无人机、AR,无所不能的 SLAM : A' h; l8 m( T- L9 x" J6 T( q1 F& c
$ a4 k, \4 |& }* D. C5 J7 |- l% a
+ e2 O+ }! @3 Y/ O+ z 两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。
& b$ g x3 ~: Z* e5 c+ o5 B
* g% m+ v0 T2 _; n/ Z7 x + g4 c" Y7 T2 W6 F& @, n8 Q
7 I) i1 s0 J/ f/ q6 r; _4 \
/ V; | h2 M) C
4 L* x- r' ?5 _% ~' T1 X 曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
7 l& \, q; ]4 _! ]& x2 h. s
5 ]: V+ b" _8 u + G" X( }9 D; A2 U5 y( y
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
% u( }& W7 N' W8 x: M ; O0 }: B& W' d7 g/ q! Z" ~
! R% T7 j8 V3 ]( G/ |( W* c 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
8 z0 F! y/ H$ O: t ) s' I! ~8 v3 o& B9 J4 l3 S( w9 d
% D* z* F8 M( V8 }- f* }4 j
也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
1 R! d7 K$ V. z/ p
! N9 ~: Q& F4 A5 h/ w ( A! ^* C' `0 L' s: Z" a
) r" `' b4 o1 Y
3 P8 P$ j7 ^) G0 \
- x, f9 }; T+ z1 ~( B2 \3 u2 M 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 6 X) q5 c- ~+ N8 b; j- Y$ M% U9 y
R @0 P* Z8 d) m4 H# h5 \# T
) y% Z/ a# F9 } 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性: ; Y9 d7 k" t$ a" P# |& I" M
: M' e' i1 @( j. j( {6 t! T
* F# p! W7 N$ U0 @; m& e& Q 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。 4 J9 e- r. u. ^- d
& q6 ?& Q5 R, O9 N. e% Q r/ _
! ?+ o t. J% w5 I6 g . x5 ^: f/ l) |7 T* q
% `( ~# ^+ s7 ~ 3 K6 f& E9 @ |. M$ O3 y
无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 $ g) k4 O' i4 I6 `" m+ L' y
8 a3 |9 ]" |# B- Y
: S Q# C. L$ R- C! v+ [2 A* [ 如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 + k- l7 ]% z' H2 @( L
; I$ ^5 ^' Q/ x, c/ W) `2 A$ h @
) r! ^+ O5 L6 f! A. o) Q2 h# |4 G
. {0 R& R( D W5 ?* }1 n- t
9 T& P( c& S+ Q2 _1 g5 y
" P8 O, s- ?/ [1 } 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
' R6 I" q; h5 ?
: l! U- ?, M1 q, k + T7 }) @' W6 E1 {1 _7 I
激光雷达、单目、双目、RGBD,SLAM 传感器的分类 ( j3 S6 P& o0 A4 q8 f, P
# Q/ [# D- j0 M- Z6 W4 V
9 ?& D+ v e: l' |$ a& W 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
, y" U: ]& x. v6 K: m5 w( A
2 `& a+ G" \- z8 b3 D $ A: _. B9 ~! q# R; S7 [( Z% R
激光雷达
% L$ H3 L9 S8 L# g P/ P/ W 6 l' q! Q9 G# B1 T
5 K% n% b, d$ w" D: Y7 Q
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
5 {, ~0 {8 e9 D3 F2 d! T 3 Q+ D* s4 T9 |4 o( z: p! N1 D
/ H/ }" u, L7 n8 e 许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。
$ E% n% P0 V2 m- {2 H" V. _ + f* T2 a m) \: t5 ^, @
( {8 i; Z9 W1 B$ }7 G5 N! K* W* X - [( N2 z# z/ n( g# t. v! R" J
% Q e( {& Z8 n. \; l6 S5 } 5 ~5 K0 x9 N U; A* a
不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
* n2 B# ^' F- n, z/ k% U3 u2 Z& w* S ( g( K" D- u+ s( u
" _3 [ V7 a" @; v
成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
1 S4 E+ _. j& T9 z. q( p 1 j# g9 p6 C- K3 i' v1 f+ @. Y8 l# S
; B* h1 C; Y; y9 |* @ 视觉 SLAM
! r% l. H* p# @& u5 \0 }/ ^2 o $ C3 ]! W: ~% r* [5 r4 L
$ i! ]1 f. R5 _9 g$ I# f 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
$ u, C1 `2 F! k 6 {) N6 \- f: V8 v' {
u' L" U, I7 `8 i 按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
" Z! b* w$ I! S5 N
: S+ N" T o9 W 7 ^6 Q4 |8 g' V0 [3 H I
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
$ P _$ J7 e. z' l! l
* K6 u3 v( r/ o9 L: y' c - t" d# V: y1 F& h: ?% x {7 K% }
没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
4 A. x1 _5 n& m L; I* T
5 N3 G: E0 X+ M; @
: p2 O& } |7 B+ X6 J
2 o9 d2 [ u: `/ _# k
- _ T2 Z- c8 s. Z3 P4 K* M9 l
1 ?$ v2 @! c8 Y) R/ L$ L 另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。 / T/ C- ?! {6 _# r" P/ ~* t& L
0 ~( @+ [* |! x7 x- p
0 h# D) ]5 Y8 I- @. j* c 但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
, j' V, o. w; {5 I) x |* V
' I6 l% n! h b$ [. H 6 l5 W7 N2 E, }! j
双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
: K& k: T! F% w* }* J A2 R 7 U+ j' u- i/ C5 e) i1 N
, H+ h3 O6 N. I- L! @4 j, A
但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。
5 e u# ]# S# u) ]2 W3 o9 y# q
' q6 W8 C! B ^
3 z: P; a. u6 [8 Q5 _! h7 r RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。 ' a# L" w6 V! y8 |, ?
) `. d. Z) L0 n
% ^5 v0 ~1 X2 L* u: y3 P 4 g+ _6 B# f# X% d) Q
" I; i6 w$ x6 Z- }* f+ Q ; p# H) I" e6 \- Y
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
3 T( `# _0 `5 G$ B. n 8 a8 N/ g. g4 L" D. ~- C# c
( w+ n" O3 ~- w& X OD
- a3 e, L9 M/ b
; s* N! @( [' u) P& K
1 M1 X* D2 D6 z& f 举报/反馈 , Y/ E1 g# l9 j; Z4 M9 `# q
+ ~* }4 V0 U1 z" J4 t' @. X- B, f9 a
: ^4 J: R. J0 X) G4 l: `# E( Y. n$ g3 Q1 c8 r+ ^& l" W+ D3 @
+ h/ e0 }! _+ j
' t0 i4 S! R2 W& q4 h+ T |