無論是無人自駕車、無人機或移動式機器人都需要具備兩種基本能力:一是「自主定位(Self-localization)」,另一是繪製地圖(Mapping)。而「同時定位與繪圖(Simultaneous Localization and Mapping, SLAM)」技術就是在沒有GPS的情況下,提供這兩種功能。雖然在沒有GPS的環境下,SLAM也算是廣域(Global)定位,但與GPS定位相比,SLAM定位就得退居為區域型(Local)。由於GPS無法完全覆蓋全球的所有地區,只能在室內使用的移動式機器人,例如掃地機器人,必須靠SLAM而非GPS定位。不過,GPS其實可以結合至SLAM中,藉由GPS提高SLAM定位與繪圖的精確度。
自主定位
圖1為自主定位技術的分類。自主定位技術除了GPS以外,還有「里程計(Odometry)」。運動感測器(Motion Sensor)將數據傳送至里程計,接著估算位置或速度的變化。里程計包含車輪(Wheel)、雷達(Radar)、慣性測量單元(Inertial Measurement Unit, IMU)、視覺感測器(Visual Sensor)或相機、雷射(Laser)。由視覺感測器或相機構成的里程計,稱作「視覺里程計(Visual Odometry, VO)」;若再結合「慣性測量單元」,則稱作「視覺慣性里程計(Visual Inertial Odometry, VIO)」。
視覺SLAM的架構
圖2為傳統的視覺SLAM架構示意圖。「視覺SLAM」和「視覺里程計」最大的不同是:「視覺里程計」主要專注於保持區域的一致性,估算自駕車的路徑和姿態,也可能執行區域的最佳化工作;「視覺SLAM」則以獲得廣域的一致性為目標,估算自駕車的軌跡和繪圖。視覺SLAM使用閉環迴路(Loop Closure),讓自駕車能自動發現已再次來到先前去過的地方,藉此保持廣域的一致性,這些資訊能夠降低估算的誤差。圖2(a)為視覺里程計的內部架構,(b)為視覺SLAM的內部架構。其實,視覺里程計包含在視覺SLAM裡面。
傳統的「視覺SLAM」包含下列五個主要單元:
.視覺感測器:從相機的視覺感測器獲取影像數據,並進行前置處理。
.視覺里程計(VO):也稱作前端處理(Frontend)單元。VO是根據相鄰的兩張影像的變化估算相機的運動,這個功能稱作「自我運動(Ego-motion)」,可以產生粗估的區域圖。
.後端(Backend)濾波/最佳化單元:在不同時間點接收來自VO的相機位置與姿態資訊,也從閉環迴路接收檢查結果,進行最佳化作業,產生自駕車的軌跡和地圖。在SLAM系統中,此單元的主要功能為使用濾波器或最佳化估算器去除雜訊。
.閉環迴路:檢查電動車是否回到之前去過的地方,以避免座標「漂移值(Drift)」的累積。若發現「迴路(Loop)」,亦即有回到之前去過的地方,便將資訊傳給後端單元,進行更嚴格的最佳化作業,藉此降低定位與繪圖的誤差。
.3D重構與繪圖單元:根據估算出來的軌跡,繪製完整的廣域地圖。若是使用3D相機獲取影像數據,還能產生3D影像或圖像。
GPS與SLAM結合
GPS和視覺里程計(或視覺SLAM)結合的方法可區分為「濾波」和「最佳化」兩種。前者可使用擴展卡爾曼濾波器(Extended Kalman Filter, EKF);後者可使用非線性最佳化的程式庫,例如Ceres Solver。
圖3為使用EKF的鬆耦合式(Loosely-coupled)多感測器系統,結合GPS、慣性測量單元、車輪速度感測器(Wheel Speed Sensor, WSS)、相機的數據。圖4為使用EKF結合GPS和SLAM的緊密耦合式(Tightly-coupled)多感測器系統。所謂「鬆耦合式」是指IMU和相機各自進行運動估算,最後結合,得出估算結果。「緊密耦合式」則是指先結合IMU的狀態與相機的狀態,共同產生運動方程式(Motion Equation)和觀測方程式(Observation Equation),最後得出狀態估算(State Estimation)。
圖5是使用「最佳化估算器」將GPS和SLAM結合的原理圖。GPS和其他廣域的感測器提供數據至廣域估算器(Global Estimator);相機和IMU提供數據至SLAM的區域估算器(Local Estimator)。區域估算器輸出6個自由度的姿態數據(Six Degrees of Freedom Pose, 6DoF Pose)到廣域估算器,最後,廣域估算器針對接收到的所有數據進行最佳化,得出比視覺里程計(VO)和視覺慣性里程計(VIO)更精確的區域定位數據,以及消除因GPS漂移而造成的廣域定位誤差。順帶補充說明,所謂6個自由度是指物體運動時,6個不同姿態的動作:前後、上下、左右、俯仰(Pitch)、偏擺(Yaw)、翻滾(Roll),也就是在三維空間的X、Y、Z軸上直線運動,以及在X、Y、Z軸上旋轉運動。
圖6和圖7是結合GPS和SLAM後的自駕車定位與繪圖效果。圖8是使用或未使用「最佳化估算器」結合GPS和SLAM的自駕車定位與繪圖效果,並與空拍街道圖進行比較。其中,紅線代表使用「最佳化估算器」;黃線代表VIO,並未使用「最佳化估算器」。從圖8中,可以看出紅線軌跡與空拍街道圖較為吻合,誤差較小。
SLAM基本原理
如果自駕車在二維平面上行駛,可使用XY座標值[x1, x2]和一個角度值θ來代表其位置及姿態。自駕車在時間k - 1到時間k之間的「運動方程式」,可以公式(1)表示,其中Wk代表雜訊(Noise)。不過,在實際計算上,輸入參數不能只有位置和角度,還必須包含速度V或加速度。例如:安裝在自駕車上的2D雷射感測器觀測到路標P,而自駕車和P之間的距離為r,角度為ϕ。感測器觀測的時間是離散的,以時間k=1、2、3、…、K表示,自駕車在時間k的位置為:
其中,[x1, x2]代表在XY座標上的一點。另有N個路標,在地圖上分別以編號j=1、2、3、…、N標示,其中編號j的路標P座標位置為:
其中,[y1, y2]代表在XY座標上的一點。觀測到的數據為:
公式(2)為自駕車的「觀測方程式」。若自駕車使用視覺SLAM,則觀測方程式需要額外處理拍攝到路標P影像內的像素(Pixel)。
……(1)
……(2)
公式(3)為SLAM的通用基本式,其包含並簡化公式(1)和(2)。其中,f()是運動方程式,其中Xk為自駕車的位置或軌跡,uk為輸入命令,Wk為雜訊。h()是觀測方程式,yj為自駕車在Xk位置所觀測到的路標P座標位置,Vk,j為雜訊,Zk,j為觀測到的數據。k代表時間,j代表路標P在地圖上的編號,O是一個(k, j)集合,自駕車能觀測到的所有路標資訊受O限制。由公式(3)可得知,為了定位和繪圖,亦即為了得出自駕車的位置Xk和路標P的位置yj,必須利用輸入命令uk和感測器觀測到的數據Zk,j。然而,由於輸入命令uk會產生雜訊Wk和Vk,j,因此形成「狀態預估(State Estimation)」問題。解決的方法視運動方程式和觀測方程式為線性或非線性,以及雜訊屬於高斯分布或非高斯分布而定。例如,線性高斯系統可使用卡爾曼濾波器;非線性且非高斯系統則可使用擴展式卡曼濾波器或最佳化估算器。近年來,由於晶片運算速度增加,最佳化估算器逐漸取代擴展式卡曼濾波器。最佳化估算器的基本原理來自「圖論的最佳化(Graph Optimization)」。
……(3)
姿態圖最佳化
姿態圖(Pose Graph)的最佳化,亦即從一個或多個感測器在不同時間所獲得的動態相對姿態訊息中,分析得出最正確的軌跡圖。由於為即時計算,其運算量十分龐大。圖9為廣域的「姿態圖」架構,每一個節點(Node)代表一個從影像估算得到的姿態,包含位置和方向資訊。相鄰兩個節點以「邊(Edge)」連接,「邊」代表區域的限制條件(Local Constraint),從執行區域估算的VO或VIO得出。其他「邊」屬於廣域的限制條件,從廣域的感測器得出,例如GPS。圖9中,共有n個狀態,自駕車的位置或軌跡以xn表示。圖10為使用三種不同的最佳化演算法所得出的軌跡圖。原始輸入的圖有誤,經過實測,使用新提出的演算法(Proposed Method)得出的軌跡比其他兩種更接近基準真相(Ground Truth)」。最佳化演算法的核心可採用能求解邊際機率分布問題的因子圖(Factor Graph)算法。