智能服務機器人正成為行業的風口浪尖,從清掃機器人開始,家庭陪伴機器人、送餐機器人等陸續進入公眾視線。
0 G6 E) ~: c; x s 3 O# t' W1 p6 @; w0 ?
在討論這類機器人是否能解決實際問題時,自主定位導航技術作為機器人智能化的第一步正不斷引起行業內的重視。同時,作為自主定位導航技術的重要突破口,SLAM 技術也成為關注焦點。 , j$ m2 n/ I. D) M) W8 c' u S
正如圖中所示,機器人自主定位導航技術中包括定位、地圖創建與路徑規劃(運動控制),而 SLAM 本身只是完成機器人的定位和地圖創建,二者有所區別。
9 M( X6 J8 W& p( t! f+ x' f; H1 x3 T, H' I7 V
那么,SLAM 技術究竟是如何實現的?它有哪些難點?機器人如何實現自主移動和路徑規劃?到底什么樣的掃地機器人才算智能? 4 I; v# T6 g. P# h" W
這些問題,小編將為你一一解答,帶領大家了解機器人自主移動的秘密。
" z3 o T$ |5 G- \
今天,我們先從 SLAM 說起。 ( X& Z2 J: m# C& L$ f
什么是SLAM技術?
, U2 g" i! ?+ w% f4 V
SLAM 是同步定位與地圖構建 (Simultaneous Localization And Mapping) 的縮寫,最早由 Hugh Durrant-Whyte 和 John J.Leonard 提出。 - f# ~4 L1 N4 \: l, b- {+ c
其實,SLAM 更像是一個概念而不是一個算法,它本身包含許多步驟,其中的每一個步驟均可以使用不同的算法實現。主要用于解決移動機器人在未知環境中運行時即時定位與地圖構建的問題。
5 X8 e( b1 U8 W
當你身處異地,怎么準確找到想去的地方?在戶外迷路時,怎么找到回家的路?沒錯,我們有導航軟件和戶外地圖。
, J6 `) E; C) j7 D3 D
和人類繪制地圖一樣,機器人描述環境、認識環境的過程主要就是依靠地圖。它利用環境地圖來描述其當前環境信息,并隨著使用的算法與傳感器差異采用不同的地圖描述形式。
7 z6 ^+ ~% V8 B; V2 A" b
四種常見的地圖表示方法是什么?
" e# g9 i; F1 r; c- _9 T
機器人學中地圖的表示方法有四種:柵格地圖、特征地圖、直接表征法以及拓撲地圖。
) \: M0 c8 d. h! @! D* D柵格地圖 ) R. g: O8 [, C6 S. V
機器人對環境地圖的描述的方式最常見的為柵格地圖 (Grid map) 或者稱為 Occupancy Map。柵格地圖就是把環境劃分成一系列柵格,其中每一柵格給定一個可能值,表示該柵格被占據的概率。
~- @. \& q% Y
: N& y; b$ E4 f! R3 r5 s" o
這種地圖看起來和人們所認知的地圖沒什么區別,它最早由 NASA 的 Alberto Elfes 在 1989 年提出,在火星探測車上就用到過,其本質是一張位圖圖片,但其中每個「像素」則表示了實際環境中存在障礙物的概率分布。 7 @% N; \: K1 [
一般來說,采用激光雷達、深度攝像頭、超聲波傳感器等可以直接測量距離數據的傳感器進行 SLAM 時,可以使用該地圖。這種地圖也可以通過距離測量傳感器、超聲波(早期)、激光雷達(現在)繪制出來。 & o9 M# R/ [' C) A4 w
特征點地圖 # E j1 u, ]6 F& w9 Q
特征點地圖,是用有關的幾何特征(如點、直線、面)表示環境,常見于 vSLAM(視覺 SLAM)技術中。
+ w5 ~9 x, o+ _( v$ R4 N7 I" G
4 k+ D8 x; m! f相比柵格地圖,這種地圖看起來就不那么直觀了。它一般通過如 GPS、UWB 以及攝像頭配合稀疏方式的 vSLAM 算法產生,優點是相對數據存儲量和運算量比較小,多見于最早的 SLAM 算法中。
( O5 v; ]8 ]# V9 [5 R. H" k \6 S w直接表征法
. V3 N D7 a. c u# S* S& g9 c8 I
直接表征法中,省去了特征或柵格表示這一中間環節,直接用傳感器讀取的數據來構造機器人的位姿空間。 5 u$ f, k; a+ x( y' g j/ v
N' ~5 L! `5 R% K8 r3 a9 M/ w
上圖就是直接記錄了屋子內天花板畫面的圖像地圖。這種方法就像衛星地圖一樣,直接將傳感器原始數據通過簡單處理拼接形成地圖,相對來說更加直觀。 . o& b; H$ z( I! G b Y
拓撲地圖
3 }6 r$ I8 t5 I
拓撲地圖,是一種相對更加抽象的地圖形式,它把室內環境表示為帶結點和相關連接線的拓撲結構圖,其中結點表示環境中的重要位置點(拐角、門、電梯、樓梯等),邊表示結點間的連接關系,如走廊等。這種方法只記錄所在環境拓撲鏈接關系,這類地圖一般是由前幾類地圖通過相關算法提取得到。 & d+ q5 {) E8 S. G
比如掃地機器人要進行房間清掃的時候,就會建立這樣的拓撲地圖: : g) `2 | ^: x: b# q: {0 a% D6 F
小結 . x) ]' U5 h9 C8 w0 ^; H- b
在機器人技術中,SLAM 的地圖構建通常指的是建立與環境幾何一致的地圖。
! }9 g k W% F: E% l# @
一般算法中建立的拓撲地圖只反映了環境中的各點連接關系,并不能構建幾何一致的地圖,因此,這些拓撲算法不能被用于 SLAM。 : [0 [# ?+ F" l8 q3 r
直接表征法類似衛星地圖,它是直接使用傳感器(一般是圖像傳感器)構建得到。這種方法的信息冗余度最大,對于數據存儲是很大的挑戰,同時,機器人要從中提取出有用的數據也要耗費一番周折,因此在實際應用中很少使用。
' ]# Y7 x, Z- ~. u& I9 U: _$ E0 ^
特征點地圖又是另一個極端,雖然數據量少,但是它往往不能反應所在環境的一些必須的信息,比如環境中障礙物的位置。vSLAM 技術中,多采用這種地圖來解決機器人定位問題。想讓機器人進行自主避障和路徑規劃,還需要額外配置距離傳感器,如激光雷達、超聲波來完成。 6 |3 z* E1 f% r3 e$ F
柵格地圖,或者 Occupancy Map(占據地圖)恰好介于其中,一方面它能表示空間環境中的很多特征,機器人可以用它來進行路徑規劃,另一方面,它又不直接記錄傳感器的原始數據,相對實現了空間和時間消耗的最優。因此,柵格地圖是目前機器人所廣泛應用的地圖存儲方式。
$ ?$ I& B2 Z9 C9 L, c) R t0 i
思嵐科技的 SLAMWARE 系統內部也采用這種地圖方式。 - B/ d1 ]/ D$ d9 i6 L* M, ~: s
& R7 S) R1 s: S1 i5 Q. {- W
當你打開手機中的導航軟件,在選擇前往目的地的最佳路線之前,首先要做的動作是什么呢?沒錯,就是定位。我們要先知道自己在地圖中的位置,才可以進行后續的路徑規劃。
5 o/ C" ]% v* O0 m( K- N! ^
在機器人實時定位問題中,由于通過機器人運動估計得到的機器人位置信息通常具有較大的誤差,我們還需要使用測距單元得到的周圍環境信息更正機器人的位置。
1 d* H& S( ?6 @; U
目前,常見的測距單元包括激光測距、超聲波測距以及圖像測距三種。其中,憑借激光良好的指向性和高度聚焦性,激光雷達已經成為移動機器人的核心傳感器,同時它也是目前最可靠、最穩定的定位技術。 ! Z# X! y# R$ a/ C- W
自 1988 年被提出以來,SLAM 的理論研究發展十分迅速。在實際應用時,除配備激光雷達外,還需要機器人具有 IMU(慣性測量單元)、里程計來為激光雷達提供輔助數據,這一過程的運算消耗是巨大的,傳統上需要 PC 級別的處理器,這也成為限制 SLAM 廣泛應用的瓶頸之一。
+ g6 s/ p$ E2 e2 p
那么,實現 SLAM 的過程中,都會遇到哪些坑呢? * W. r, U- u& C+ o' O8 G5 Q
SLAM 實現過程中的難點有哪些?
) M! ]) V$ |9 u- TSLAM 主要解決機器人的實時定位與自動建圖問題,那么,在實際應用時,SLAM 究竟是如何實現的呢?在實現過程中有哪些難點? + A5 v% b2 l6 s+ l
這是一個完整的 SLAM 和導航系統的主要架構圖: 3 i2 n" o/ {+ e( i& Q7 p
9 c# Z+ d! Q1 N% q: U% u: L3 U; S
其中,SLAM 核心過程包括 3 個步驟,第一步稱為預處理。我們知道,激光雷達和其他雷達設備一樣,某一個時刻只能獲取它所在位置的環境信息。
' ~- O. K) B. a H1 K
這就是我們所說的點云,它只能反映機器人所在環境中的一個部分。第一步預處理就是對激光雷達原始數據進行優化,剔除一些有問題的數據,或者進行濾波。 # J* Z% t9 X. W
2 n7 i$ g- ~3 ~
第二步是匹配,也就是說把當前這一個局部環境的點云數據在已經建立地圖上尋找到對應的位置,這個步驟非常關鍵。
& g! I* Z9 P! W) Q0 s
這個是 ICP 的點云匹配算法,用于實現匹配。說這個過程關鍵,就是因為它的好壞,直接影響了 SLAM 構建地圖的精度。這個過程和我們玩拼圖游戲有點類似,就是在已經拼好的畫面中找到相似之處,確定新的一個拼圖該放在哪里。 M @% ]( e" @& y0 Q) }
在 SLAM 過程中,需要將激光雷達當前采集的點云(紅色部分)匹配拼接到原有地圖中。
7 B# S$ r. S1 r4 W0 q2 p
+ J) \1 y: L6 h; C9 X
; T% @4 b ^$ S$ I2 _% W如果不進行匹配過程,所構建的地圖可能就亂成一團,變成這樣。 . V/ S2 A3 v4 K+ R3 l- {
$ j9 U/ [; Z5 _1 Q. n0 [1 R2 Y在這個部分完畢以后,就進行第三步,地圖融合,也就是將這一輪來自激光雷達的新數據拼接到原始地圖當中,最終完成地圖的更新。
% _" N! r/ J# P, X( i5 f
就像這個圖一樣,這個過程是永遠伴隨 SLAM 過程的。
8 O9 c4 g c& f
0 x2 o( N" k1 _數據融合和簡單的貼圖是有很大的差異的。因為實際上傳感器描繪的世界存在一定的誤差,或者正巧在這個時間環境有了變化,例如機器人旁邊闖入了一只小貓。
+ b( y; V! c4 M3 M# [: {
因此,實際要進行的過程會更加復雜,需要用很多概率算法,并采用濾波的方式進行融合。將上述這個過程逐次執行,就最終產生了我們看到的柵格地圖。
+ q) Q: F$ G Y: K' s " j- g! O Y( u, C1 M+ V& ?
這個過程聽起來其實并不復雜,但是要處理好有很大難度。這里舉幾個例子,比如叫做 Loop Closure(回環)問題。如果匹配算法不足夠優秀,或者環境中存在很不巧的干擾,當機器人繞著環境一圈后,就會發現原本是應該閉合的一個環形走廊斷開了。 ) P$ ~ }1 r; ^, u/ q! j
比如正常地圖應該這樣: {4 h: ~7 S/ i
# T# a9 W3 D/ ~6 a" W如果處理不好,實際地圖就成這樣: ! Y& ~6 o3 \# X2 ~2 T$ [4 s& B: A
" N/ `2 T6 x1 Q7 h, [! G對于環境比較大的場景,回環問題是不得不面對的,但現實總是不完美的,即使是激光雷達這種高精度傳感器,也難免存在誤差。而回環問題的難點恰恰在于在一開始出現少許誤差的時候,并不會被發覺,直到機器人繞著環路一圈,隨著誤差的累加,發現環路已經無法閉合時,此時已經釀成大錯,一般很難回天。 3 F7 `# g i* V0 j" R1 p
當然這個問題并不是無解,一個好的商用化 SLAM 系統,回環問題是否能很好的解決,就成為評判這個系統實力的指標了。 5 q3 T2 W1 A6 @# o' |: p6 p& S& S
這是前兩天在我們辦公室進行的測試,左邊的視頻是基于開源的 ROS 機器人操作系統進行的地圖構建,右邊的是基于 SLAMWARE 構建的地圖。 4 C1 G& k# Q; B# S+ @
5 q, w- C" M3 g/ F
3 V) N# n( R8 h9 m
- J2 u4 Y9 A% d6 T7 i/ \當機器人已經繞場一周后,ROS 構建的地圖出現了中斷,而 SLAMWARE 構建的地圖是一個完美的閉環,它與我們辦公室的設計圖完美重合。
9 C( F- U2 K% `: G8 D# K. f/ V3 f) _
; q6 d+ G% S% J/ c/ x- P: _! ?* |: X
除了算法層面的回環問題,SLAM 實際應用中還有很多這種坑,比如走廊問題與外界干擾問題。
: F- F! @7 Q' L/ ?* C' x- @$ T
以外界干擾問題來說,通常,激光雷達作為機器人的眼睛,一般是安裝在底盤上的,它能看到的視野很有限。當受到外界干擾(人類或者寵物等等)后,機器人很容易丟失定位精度,無法正常完成后續的建圖工作。 5 F- S9 E/ [# G' V' H
目前,SLAM 的開源實現代表多為學術界,實際應用有很多 Corner Case 要處理,需要傳感器、系統參數、其他輔助設備的聯合調優。
) G8 P, h: O( J
一般來說,上述的 SLAM 過程對于運算消耗是巨大的,雖然并沒有達到像訓練神經網絡動用服務器集群那種地步,但傳統上需要 PC 級別的處理器。
7 _$ c1 ^8 [3 `( N, \
除配備激光雷達外,還需要機器人具有 IMU(慣性測量單元)、里程計來為激光雷達提供輔助數據,否則 SLAM 系統也難以得到運行。總的來說,SLAM 算法本身是一個對于外部系統有著多種依賴的算法,這是一個切實的工程問題。 ! ~: k7 V0 u. U, g8 h
很多機器人,比如掃地機是不可能裝一個 PC 進去的,為了讓 SLAM 能在這類設備里運行,除了解決激光雷達成本外,還要對 SLAM 算法做出很好的優化。 ( n# \6 @' C0 J( p: k
那么,機器人利用 SLAM 技術得到了有效的空間信息后,它是怎樣實現路徑規劃的?SLAM 和路徑規劃之間關系是怎樣的?
5 U/ [: d' p5 i3 W
機器人如何實現自主移動和路徑規劃?
5 h5 O4 H C3 A' ]8 t9 N) d
上面我們已經知道了 SLAM 與路徑規劃的關系。
& |+ N: l# I) d+ W實際上,SLAM 算法本身只是完成了機器人的定位和地圖構建兩件事情,與我們說的導航定位并不是完全等價的。這里的導航,其實是 SLAM 算法做不了的。它在業內叫做運動規劃 (Motion Planning)。
- \6 o& k$ _/ P2 F! w- l+ M
運動規劃是一個很大的概念,從機械臂的運動、到飛行器的飛行,再到這里我們說的掃地機的清掃路徑規劃,都是運動規劃的范疇。 ! d1 Q9 u0 d( V3 R1 d4 x
我們先談談針對掃地機這類輪式機器人的運動規劃。這里所需的基礎能力就是路徑規劃,也就是一般在完成 SLAM 后,要進行一個叫做目標點導航的能力。通俗的說,就是規劃一條從 A 點到 B 點的路徑出來,然后讓機器人移動過去。 * k3 ^9 R3 E' p) Y H$ @
要實現這個過程,運動規劃要實現至少兩個層次的模塊,一個叫做全局規劃,這個和我們車載導航儀有一點像,它需要在地圖上預先規劃一條線路,也要有當前機器人的位置。這是由我們的 SLAM 系統提供出來的。行業內一般會用叫做 A * 的算法來實現這個過程,它是一種啟發式的搜索算法,非常優秀。它最多的應用,是在游戲中,比如像星際爭霸、魔獸爭霸之類的即時戰略游戲,都是使用這個算法來計算單位的運動軌跡的。
9 w- A8 P1 \+ C. F1 {
當然,僅僅規劃了路徑還是不夠的,現實中會有很多突發情況,比如正巧有個小孩子擋道了,就需要調整原先的路徑。當然,有時候這種調整并不需要重新計算一遍全局路徑,機器人可能稍微繞一個彎就可以。此時,我們就需要另一個層次的規劃模塊,叫做局部規劃。它可能并不知道機器人最終要去哪,但是對于機器人怎么繞開眼前的障礙物特別在行。
" W5 u* s0 z& |1 v這兩個層次的規劃模塊協同工作,機器人就可以很好的實現從 A 點到 B 點的行動了,不過實際工作環境下,上述配置還不夠。比如 A*算法規劃的路徑是根據已知地圖,預先規劃好的,一旦機器人前往目的地的過程中遇到了新的障礙物,就只好完全停下來,等待障礙物離開或者重新規劃路徑了。如果掃地機器人買回家,必須先把屋子都走一遍以后才肯掃地,那用戶體驗就會很差。
' W3 a, Y- J# g$ ?. ]: C" M) a' d
為此,也會有針對這類算法的改進,比如 SLAMWARE 內我們采用改良的 D * 算法進行路徑規劃,這也是美國火星探測器采用的核心尋路算法。這是一種動態啟發式路徑搜索算法,它讓機器人在陌生環境中行動自如,在瞬息萬變的環境中游刃有余。
$ H- y; T- `. Q
D * 算法的最大優點是不需要預先探明地圖,機器人可以和人一樣,即使在未知環境中,也可以展開行動,隨著機器人不斷探索,路徑也會時刻調整。
3 |* D% F9 {" H8 e* z7 M' ?. {; E- {/ j6 y1 C2 g8 t! r* I
以上是目前大部分移動機器人都需要的路徑規劃算法,而掃地機器人作為最早出現在消費市場的服務機器人之一,它需要的路徑規劃算法更為復雜。 4 P s% A2 ~$ ]+ L6 T
一般來說,掃地機需要這么幾個規劃能力:貼邊打掃、折返的工字形清掃以及沒電時候自主充電。單單依靠前面介紹的 D * 這類算法,無法滿足這些基礎需要。 ! u; ], V7 Q- A( V5 X. {8 w
掃地機器人還需要有額外的規劃算法,比如針對折返的工字形清掃,有很多問題要處理。掃地機如何最有效進行清掃而不重復清掃?如何讓掃地機和人一樣,理解房間、門、走廊這種概念? 針對這些問題,學術界長久以來有一個專門的研究課題,叫做空間覆蓋(space coverage),同時也提出了非常多的算法和理論。其中,比較有名的是 Morse Decompositions,掃地機通過它實現對空間進行劃分,隨后進行清掃。
; c- e6 {7 j; [7 M1 ~20 世紀 70 年代,卡內基梅隴大學(CMU)完全依靠超聲波做到了現在我們掃地機的行為,當然造價也十分昂貴。
9 V' A, [2 e- J
前面介紹的從 A 點到 B 點移動路徑規劃也是實現這類更高級路徑規劃的基礎。實際上,要從 SLAM 實現到掃地機器人所需要的這些功能,還是有非常多的工作要做的。
! C( X% L; h% }5 M. X4 v1 r v0 f' o3 `
V: d/ b2 O, k& w& P; V* \0 D6 A* I9 B, o) T
|