/ Y8 e/ E* C j% l) w& c
9 ^" ^, n+ v7 I* h B" h 作者:
. t/ K9 x; A1 L
/ K( Z! S2 p% \. @7 v& d ( K& x3 z! [* n5 \' h% H2 a3 l9 |
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。
& f% Q: h$ J. k
% D4 i1 x- _7 w( g" r4 J. E . Z* D! V8 f; U* G; Z; \/ o! u5 _- l7 X6 ?
机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。 1 ]8 C3 n+ e9 {. K- m
, l* U$ }4 l7 H; @
; I/ O) I. \# _. |$ q SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 * {1 O; E% @( f' H: H% ^
: B) O) s% ~" [: ^+ n3 o# q
1 ^: w! R+ e" T: U8 \* o% f/ x
机器人、无人车、无人机、AR,无所不能的 SLAM
% `& U1 T$ Q2 k) R K4 Z4 L 1 I9 h. u0 O) L2 e
( J- |1 [ ~$ Q, [
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 4 I1 R7 U$ c3 ~. z) q
& h3 m# N" I0 J- g' \5 A
: V, u+ k; }8 [: j' u5 o 0 r0 s5 I# w5 e9 Z4 @# F
# g, C: u4 t- m L2 Y c ( P. k- X& X0 D# ]& [ G# {, M$ G- T
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章 % P( b6 n; Y7 Q/ C1 ]6 M
. x1 f2 |! O* \+ z7 z' `- n 0 w r- i' i+ r& b7 e
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。 1 Z, i: _( `# Z1 w3 q- i
! @ A- x; T# `* u4 }) y% J
5 J5 V+ D6 m6 n8 b7 M 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
$ ?( u! c& w( I9 I5 i - k, |! T& e. a3 M3 u
7 E% Z: U' S N' N 也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
! j8 x5 B1 W& n$ a0 ]) k) r. \* _
. ^& i# u+ ^& j+ H3 u" c4 z
+ r( \5 \$ c( F" N7 H & t" x$ H9 x0 t& p- `/ L
5 e! c6 d% }& H8 z$ z! M/ w
- B, h4 n) ]% Y7 ]& K2 {. h1 h 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。
: c+ o, f6 g: N
* ~2 H) l; }3 Q! P5 n 5 Q; z, e; J3 o( ?. O, F
香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
' R+ D! H$ g S' c6 P, B2 d4 m
/ f5 W/ M2 H% T: {+ n' M
5 i2 q% v5 `# v |6 G' B/ A 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
6 @% o* X6 I5 s0 y$ \" Y 6 g+ H$ G7 v: B" T- D3 \! J% G: V
% ~3 y, ~9 _: i2 z
2 ?, `% C0 u% ?+ P; S" ^5 Z ( C# V( ~* N+ X( {
" H1 N* Y! b5 T- o 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。 ( O) z6 v: l! d) c* ]
5 J1 g% @$ G. v% F 9 p& W8 t$ T2 I8 b' m0 d( V( I
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。
' ^2 c8 S( r) a- R6 [; m2 }
U1 Z! V( P, o& T . }9 S0 k3 S* H! c- f
0 d7 {. `/ y. I5 M" c
& z& x/ Y& \6 A5 S) J9 `( d
9 S6 u1 |0 j% a 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。 " m3 t# o0 w e( k" O6 D
1 P+ c) V+ J) f; c; H3 E
$ |4 [, d' m# I3 t3 B 激光雷达、单目、双目、RGBD,SLAM 传感器的分类
/ x8 R1 Y$ t, N+ s1 [4 G ) H5 e) x/ Z$ F/ x; H. ^
l0 V. a' j9 q 实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
8 A# x5 I' Q- w3 J+ p
& O" U+ u" o1 @# e& C% j! t
V# @ E3 \; l 激光雷达 ( F: |# }8 f+ V* b( d
& @- @( H$ \4 [( |( t 7 L8 U" |. B0 [: k6 B M5 R) w
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。 , _/ c6 W3 m/ J/ P" \. S9 x
) e3 [, Z+ u6 D! V5 Q
0 G& w2 \* e9 \2 F% s# `& d
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。
5 N( h4 h- \3 g+ Y8 E 3 |' L4 Y- z& A! f2 o
1 f+ k) l7 F1 l" A- d3 P
% F4 i6 x+ d% H3 F, r6 n# k3 C
1 P0 ?% `. C, X4 _2 {
, V) F' a# i3 a8 Q7 @0 c. x) v 不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。 / `. X, D3 ^7 }) d3 s/ E
: J4 M& Q; x) @7 U9 F, g
3 |/ z; j; {! `. D) {9 w% u- q 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。 3 ^- h! \8 \3 C! |9 l( z
- ]: [8 @" S ~4 _$ K ' P l% \& V6 x, M' ?7 x( }1 X
视觉 SLAM
f" m) d: m! H% U$ Z9 U; d$ c
) v5 {; j' D6 ~+ E" Z0 R
% A* }# ^& K2 a. T& G' g 视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。
# K4 e% [- q8 S8 g9 N 0 d' W7 v! M! z8 J9 G2 J! N
! J# \" q5 E- {6 z2 y
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。 ' V T9 S" k; f1 }3 Z
# \1 h0 V+ l) k+ @( Y
0 @6 Z: o9 c6 S: Z/ j
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答 / a+ N) |# [: p' r) z4 S7 B) w
& \9 w7 D" I/ D2 i/ ^) y. d' o
+ G- r0 o, L' i A
没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
+ b+ y8 `# L L( r! h( q+ S
) J/ M" d# X# J$ B9 h' j 3 h$ [* k- R- {6 S3 H. J
8 d% R8 o$ X H
. @4 a6 j/ M5 k- ~$ c L 1 H5 R1 _* F' u3 m+ ^7 _( C
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
- b# S; z7 s3 t/ G! `9 B
7 h" W) g* \% V5 l8 M% ]; h& f& h5 ?# D1 b) ] / Q% v3 E* s5 @8 `, b
但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 * F0 U5 m7 `# k2 s; v2 j& U( J4 ]
2 z8 H* u6 J: J$ Q5 T. p; p9 x
( g9 S% h2 J, {! e! |' U6 j 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 : |0 M' Z6 f3 w- W% F
, B' f% o3 {- u: \
, Q# e4 h/ f. ]. k1 P/ m 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。 . p/ q, Q9 e$ D. V
& _2 t; O( x1 Z: ?! p# e2 p
/ ^, ]1 a7 Q( K7 L
RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。 ) t0 O2 |3 s2 D
7 a1 e ]" f5 I, }8 k, `- s. L
# o9 Y0 v6 i% z. u0 J' v % L6 b0 o2 | ~6 w6 c1 Q) I
8 z8 Q% i( X4 w9 X9 J1 h7 @- r4 [ , x* M1 A$ \! b+ {9 S1 T; U# e1 P) }
总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。 1 u( R( U8 U- _$ A6 ~9 C
) n( t7 B# [* S' \& E0 z
" q$ U% }0 |# L% p3 B. W F
OD " n: d" t4 v9 y0 v, P1 z3 _! U
; H8 F3 T9 N6 m4 K' E' E3 m2 a
6 p* I* z' d1 ?: \3 \0 G8 S/ ^
举报/反馈
! {- Q6 I) H8 \3 L6 }3 V; s2 Y( z # Z+ Q9 @ _1 R& o2 X
$ K N9 X% U: V1 Y' K% H
# d U9 |: y3 A. t. q
+ h) q7 W* Z8 T+ m8 S( L
$ M: K K% R7 E- o |