0 n, s% r% o3 \: F , R( X/ \- u9 R# a. I& B/ X% b
作者: 8 B; Q" t& t1 D( J9 {) C: {
: A7 T. g* a7 C- z8 n 3 m$ i# w9 m D/ e: G2 Y) I
当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图 app,然后定位、输入目的地、规划路线、导航。 e% q; c" P: w: \, M
: V0 P" E: X+ X2 {4 q
7 B5 Z2 P7 N8 k- K( P w4 x: f
机器人也一样。当它们身处未知环境时,一样要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图 app,而是 SLAM 技术。
9 a1 B* b# C# C- i2 {
, \0 n- S& t) g 6 H& F: M. W6 s
SLAM 全称 Simultaneous Localization and Mapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。 " @) s) R0 V# P' K) r. a
& C2 m9 p; m8 K P4 `
7 ?, r) Z% y: U( t+ |
机器人、无人车、无人机、AR,无所不能的 SLAM ) ~+ f4 M5 k9 Y
! M. N" u& K% s- `7 P1 `. n& j
0 t' ~& Z! Y! m" E0 t6 K$ I
两年前,SLAM 最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及 AR 的兴起,SLAM 作为其中核心技术的一种,正变得越来越重要。 , D: s2 z ]7 R" ^; |7 E
+ N' X* l0 _4 c' l0 @4 w( b: l $ g1 v- h8 N% v) ~2 j& R
# Z& ~9 i* S+ M: W + ~; l+ V; {6 [' l9 v4 M: m& @
* Y/ {/ U- g* r% i+ G. v; V
曾引用 SLAM 技术发烧友 Guang Ling 的话,来强调 SLAM 技术的重要性:雷锋网过去一篇文章
u1 K* D1 K& M$ D: t
; v1 L. [8 W- c4 I9 ]4 N% R! u# ] , W' N1 Q3 V; D+ s
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、 跟踪技术、 路径规划技术(Path Planning), 还有就是控制技术(Controlling)。
( q# J6 g1 }+ \' x # Q4 O8 Z5 E b* P0 P- [: B2 `
* }6 @: t5 @9 v7 ]2 ?9 \2 m' J; n1 A 而这四个问题中的前三个,SLAM 都扮演了最核心的功能。打个比方,若是手机离开了 wifi 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
, s* S% T+ n, X6 L2 j / v* f' Z- e& ~0 y4 }0 @8 d8 P0 W
$ ^1 t) V+ s% x 也许有读者好奇,为什么无人车也非常依赖 SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的 SLAM 主要是基于激光雷达传感器,后面会详细提到。
% y8 k5 l5 ~# F+ A
% A' j4 F% z9 e" J) h6 A : ^! ]) x8 W7 W9 X
7 N1 c; i) F! C
7 }0 u9 Q0 {3 x/ k5 b1 l
% k2 @& d- H1 [: S' } 天上飞的的无人机同样需要 SLAM 来「添翼」。SLAM 能让无人机知道障碍物在哪里,进而实现自动避障的功能。 3 b$ ?# m+ [/ u8 v; I+ J" L. ~
* \4 I: q `( p `- l
1 t1 m# ~) d' S' }* v+ t* C 香港科技大学助理研究员徐枭涵曾在知乎上如此形容 SLAM 对无人机的重要性:
$ p& D) Z# F2 N3 [- q d, S: d# z / Y8 N9 N8 O2 Z( J- y8 b. r
& H+ n- v7 p: I, p( M 所有的关于无人机的梦想都建立在 SLAM 之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
. O6 r1 D6 y: ? f, ~; g- ? ! ]5 d& z% N' ^( c
0 d2 z: G; G8 _* X/ K5 C
0 B& }9 ?2 {7 v. K% Q4 o
! U7 P3 o. N2 p! A Z
8 z7 m" _* N0 z0 h( K% y0 n 无人车、无人机,都可以算作机器人的一种,依赖 SLAM 很好理解。但与机器人没什么关系的 AR 设备,其实也是 SLAM 的一个重要应用。
! p$ C6 A S8 X. p4 W) d, A
9 l" S' A1 c- X: G' P& a- K / \/ H$ v8 k- s. c2 F8 r
如果没有 SLAM 加持,所有头戴眼镜就只是一个近眼投影设备。有了 SLAM,AR 眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是 AR 设备人机交互的基础。 ; c8 i: A" C" A/ c0 w) K
8 f7 h/ W( {3 g- I* X- B " \0 k8 c+ l* }0 _; f2 ]+ O
5 m' h: S# c" J( W' |' f' a/ ? 0 B! K3 r( g8 D/ G1 j5 i: r% H
# C4 X2 |8 [7 o" V6 z 由于 AR 是将虚拟图像叠加在真实物体上,所以 SLAM 的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR 对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
+ ?+ r. L/ W& A9 s3 z 6 n' i+ C# m* O& z9 {5 {7 z) t
7 M; i# P8 \' ^+ G, ?
激光雷达、单目、双目、RGBD,SLAM 传感器的分类
5 I% u( }+ \$ x/ ]8 Y
3 K' z6 J- e, N, D# d1 ` [+ I* D" R$ C & y$ F3 u. j. T! R' q
实现 SLAM 的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。 $ r: i4 h8 g% `$ F. {
' X- P8 c9 l' V6 K2 `0 Q$ y
6 | P8 S T( S% t 激光雷达
, w( Z: ?/ }5 V4 h& Z+ a 8 Z& W% E6 J# B% P
) [9 q0 U* W% q2 F+ {- W+ z* i. y
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时 SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
) m: K+ Z Q0 j, _( w * A8 J- _( W7 M. U& l% {
: a0 S, O4 l: K% }9 d5 @ X
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以 Google、百度为代表的企业认可。 # p9 e0 V1 l2 M
6 H; Q$ O- }) q+ h `4 U
4 l" h% y4 s8 Y6 Y4 p5 t6 W" W
, r7 k0 n$ P; Z: j1 v
$ \& v" w0 [1 i3 k7 Z " Z+ w/ Q; W, g9 o2 d+ q K/ N$ o) \
不过,激光雷达制造成本高,价格十分昂贵,比如 Google 无人车目前使用的激光传感器单个定制成本在 8 万美元左右,百度采购一台激光雷达也要 70 万人民币。
- ]# Z# T: \3 G . ]( z; Z2 M7 m6 ~+ [
- X. b0 r( W, u( O" m1 M L* a 成本已然成为激光雷达普及最大的拦路虎。2016 年 8 月福特和百度一起投资了激光雷达厂商 Velodyne LiDAR 1.5 亿美元,目的就是帮助 Velodyne 降低激光传感器的成本。Velodyne 希望将激光雷达的价格降到 300 到 500 美元之间,以满足大众汽车市场。
/ q2 R, t5 ^! | }# d / M# `: W) W' Y1 o( t
; w* v9 N) Y" [
视觉 SLAM # q A3 a# v3 [7 p( M
; |* {# I+ Z: ` # d$ z' r1 g4 U" C1 x/ p2 s4 \' d+ ]
视觉 SLAM 是 21 世纪 SLAM 研究热点之一。CPU、GPU 处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在 10 Hz 以上的速度运行。 : ^8 r1 o: p% \9 k1 L- R
_, y; S; L6 k
: B" [ k& {% E! O. q# W. \& x
按照摄像头的数量和种类分,视觉 SLAM 分 3 个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
7 j+ |9 X- \/ A. N( ?, a+ E % i8 E6 g* ?9 ]
$ R) W: X- X4 ]- E" R" S u
单目相机 SLAM 只需要一个普通的 2D 摄像头,成本优势大。但普通 2D 摄像头没法获取深度信息,它捕获的仅仅是一张 2D 图像。深度信息缺失有什么影响?引用:知乎用户「半闲居士」的一个回答
8 n' Y" K, {5 P; ~5 p
! Y/ _$ v# R0 @" e, N3 `/ w
# ^9 a) Y) _" A 没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。 1 }3 h, q$ r9 e* q+ h+ O6 _) ?' J
0 O3 e+ ~ q3 f, B! E4 @. i
7 \9 _6 m. B: b& X
: K/ ^; X( l1 \: g! F: V: _( M/ D
l' ~2 u" L: a1 Z0 O& a 9 h; O% N3 |2 c" e
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。 ! G# z8 d- k( ~% z
: G t0 I3 F* m. |$ f
$ N1 ^7 U m. I2 ?/ ? 但这两个问题都有对应的解决办法。比如,通过借助 GPU 和 IMU(Inertial Measurement Unit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。 " X2 N* ~) O8 s$ e* l
! {8 y4 u* @ Z6 x0 E
9 Q# F1 L# G$ e/ ` 双目 SLAM 消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。 - V( j7 S1 [7 |# L; H. L# [0 M( ^
. b% Z6 ]9 k3 P( ?. X w
[4 c1 x6 V% ~/ e4 j7 Q 但双目 SLAM 的计算量非常大,通常需要用到可编程门阵列 FPGA。而且其其深度量程也受双目的基线与分辨率限制。
0 v+ ?" K& `- O" }1 Y# w& r 3 n) x: A% h# b1 {; I
; f. _& S/ n6 E4 _8 B" {* O- T RGBD SLAM 的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或 Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect 就是一种比较常见的深度摄像头。不过,现在多数 RGBD 相机还存在测量范围窄、噪声大、视野小等诸多问题。 ( _, T: v; v% f" e; o/ ~8 m! o
# H/ I2 ?% M& u. l. N" ^. D
2 G/ g$ k# E. o" y% { $ @1 ]% G' U1 X; ^( c$ Z: ]4 H* h
) x6 O& t( Q r9 | d8 {
: `9 v8 ]3 \! G- q e( I 总的来说,SLAM 的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而 SLAM 相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。
: A% V3 _' K+ N" p
5 ]# X; g! C) o 8 Q! R; S/ u/ m0 S2 e. M! k
OD 8 r5 q; y3 D5 ?2 R
, v/ l5 ]' F; O0 m# b
, R! Q4 S; H& N7 e 举报/反馈
0 t/ c3 v4 @# C n, z6 b, Y ) l- Y6 B% _1 c, s. \8 [! x5 } V
* ]0 K/ n ?7 _: u
) ]- _) X5 x& a$ y3 B+ G+ x0 n$ h, K6 S0 p
2 }/ k, }4 S5 R7 H0 d/ _
|