1. 程式人生 > >淺析服務機器人自主定位導航技術(三)

淺析服務機器人自主定位導航技術(三)

       我們先來看看SLAM與路徑規劃的關係。

  實際上,SLAM演算法本身只是完成了機器人的定位和地圖構建兩件事情,與我們說的導航定位並不是完全等價的。這裡的導航,其實是SLAM演算法做不了的。它在業內叫做運動規劃(Motion Planning)。

  運動規劃是一個很大的概念,從機械臂的運動、到飛行器的飛行,再到這裡我們說的掃地機的清掃路徑規劃,都是運動規劃的範疇。

  我們先談談針對掃地機這類輪式機器人的運動規劃。這裡所需的基礎能力就是路徑規劃,也就是一般在完成SLAM後,要進行一個叫做目標點導航的能力。通俗的說,就是規劃一條從A點到B點的路徑出來,然後讓機器人移動過去。

  要實現這個過程,運動規劃要實現至少兩個層次的模組,一個叫做全域性規劃,這個和我們車載導航儀有一點像,它需要在地圖上預先規劃一條線路,也要有當前機器人的位置。這是由我們的SLAM系統提供出來的。行業內一般會用叫做A*的演算法來實現這個過程,它是一種啟發式的搜尋演算法,非常優秀。它最多的應用,是在遊戲中,比如像星際爭霸、魔獸爭霸之類的即時戰略遊戲,都是使用這個演算法來計算單位的運動軌跡的。

  當然,僅僅規劃了路徑還是不夠的,現實中會有很多突發情況,比如正巧有個小孩子擋道了,就需要調整原先的路徑。當然,有時候這種調整並不需要重新計算一遍全域性路徑,機器人可能稍微繞一個彎就可以。此時,我們就需要另一個層次的規劃模組,叫做區域性規劃。它可能並不知道機器人最終要去哪,但是對於機器人怎麼繞開眼前的障礙物特別在行。

  這兩個層次的規劃模組協同工作,機器人就可以很好的實現從A點到B點的行動了,不過實際工作環境下,上述配置還不夠。比如A*演算法規劃的路徑是根據已知地圖,預先規劃好的,一旦機器人前往目的地的過程中遇到了新的障礙物,就只好完全停下來,等待障礙物離開或者重新規劃路徑了。如果掃地機器人買回家,必須先把屋子都走一遍以後才肯掃地,那使用者體驗就會很差。

  為此,也會有針對這類演算法的改進,比如SLAMWARE內我們採用改良的D*演算法進行路徑規劃,這也是美國火星探測器採用的核心尋路演算法。這是一種動態啟發式路徑搜尋演算法,它讓機器人在陌生環境中行動自如,在瞬息萬變的環境中游刃有餘。

  D*演算法的最大優點是不需要預先探明地圖,機器人可以和人一樣,即使在未知環境中,也可以展開行動,隨著機器人不斷探索,路徑也會時刻調整。

  以上是目前大部分移動機器人都需要的路徑規劃演算法,而掃地機器人作為最早出現在消費市場的服務機器人之一,它需要的路徑規劃演算法更為複雜。

  一般來說,掃地機需要這麼幾個規劃能力:貼邊打掃、折返的工字形清掃以及沒電時候自主充電。單單依靠前面介紹的D*這類演算法,無法滿足這些基礎需要。

  掃地機器人還需要有額外的規劃演算法,比如針對折返的工字形清掃,有很多問題要處理。掃地機如何最有效進行清掃而不重複清掃?如何讓掃地機和人一樣,理解房間、門、走廊這種概念?

  針對這些問題,學術界長久以來有一個專門的研究課題,叫做空間覆蓋(space coverage),同時也提出了非常多的演算法和理論。其中,比較有名的是Morse Decompositions,掃地機通過它實現對空間進行劃分,隨後進行清掃。

  20世紀70年代,卡內基梅隴大學(CMU)完全依靠超聲波做到了現在我們掃地機的行為,當然造價也十分昂貴。

  前面介紹的從A點到B點移動路徑規劃也是實現這類更高階路徑規劃的基礎。實際上,要從SLAM實現到掃地機器人所需要的這些功能,還是有非常多的工作要做的。

  針對掃地機器人,我們將其特有的路徑規劃功能預先內建在SLAMWARE中,方便廠家進行整合,不需要進行二次開發。