RoboCup中的機器人自主定位——從理論到實踐(一)

第一次接觸RoboCup是在一門實踐課上。
當時選這門課時完全出於對機器人懵懂的好奇,現在回過頭來看,雖然結果稍有遺憾,但是絕對不虛此行。由於只有一個學期的時間,因此我主要做的是robocup若干模塊中的一個——自定位模塊(Self-localization)。接下來我會先從宏觀的角度介紹整個比賽及項目概況,之後深入細節用代碼實現相關定位算法。

概況

RoboCup這個比賽在國際上的知名度和認可度還是挺高的,但礙於昂貴的啓動資金(一個機器人真的好貴)和對計算機視覺、機器人學等都有較高的要求(更不用說Linux、C++這種基礎),國內能參加這個比賽的基本都是那幾所理工強校,普通人想要自己入門更是難上加難。但同時,像阿里、華爲、騰訊等的機器人實驗室都對有RoboCup比賽經驗的同學提供了優惠,因此秉着市場的需求就是我們前進的動力,能有機會學習一下還是相當不錯的。

RoboCup這個比賽經過了二十多年的發展,逐步向正規化、智能化方向發展,現在國際比賽通用的叫 Standard Platform League(SPL)。每個隊5個機器人,一個守門員,另外4個進攻+防守,比賽更側重於軟件開發而非硬件改進,比賽規則都和足球比賽類似。

可能得益於對足球的熱愛,德國人不光在世界盃表現出色,在機器人世界盃(RoboCup)同樣表現不俗。比如之後章節要提到作爲代碼模板的B-Human(做個人吧)和HULKs(無敵浩克),前者是不萊梅大學和德國人工智能研究院組成的球隊,曾狂砍7次世界冠軍,最近一次奪冠就是19年在澳大利亞悉尼的總決賽上;而後者是漢堡工業大學研發的機器人隊伍,由於標準、簡易的操作平臺及清晰的代碼框架,特別適合新手仔細研讀。好好品讀大神們的代碼有一種“高山仰止,景行行止”的感覺。
RoboCup比賽現場

研究對象

Artificial Intelligence 做成功的才叫人工智能,做不成的那都叫人工智障

一開始以爲機器人也能像人一樣帶球過人,後來發現能整場比賽一直不倒就很不錯了

整個項目使用的是由一家法國公司研發的Nao人形機器人,現在被軟銀(對,就是那個阿里爸爸的爸爸)收購了。Nao身體雖小,“五臟俱全”——擁有25個自由度,裝備了相機、麥克風、聲吶、觸覺感知、慣導、壓力等一衆傳感器。尤其有特點的是它的“眼睛”,你覺得的那雙大眼睛實際上只是紅外信號燈,真正的“眼睛”是眉心處和充當嘴巴的兩個小洞,裏面是兩個視野互不重疊的普通相機(劃重點,之後要用到這處特徵)。搭載的CPU是Intel Atom Z530(1.6GHz),沒聽過的沒關係,你只要知道這塊CPU很爛就對了,這也決定了開發程序一定要考慮到計算資源非常緊張,一不小心複雜度太高機器人就傻站那兒半天沒得動了。所以上課第一天老師就提醒我們“別做夢想在這實現嵌入式的機器學習了,比如那些像YOLO之類花裏胡哨的物體檢測神經網絡”。
在這裏插入圖片描述

獨特的操作系統

一個機器人就相當於連接了一批傳感器和執行器的電腦,而任何一臺電腦想要運行程序都必須依賴操作系統,Nao的操作系統叫NAOqi OS,它是一種嵌入式的Linux系統。當你用網線把機器人和你的PC機連接上後,在你的Linux終端輸入ssh,就能登陸Nao機器人,把你電腦的靜態IP地址設置成與機器人一樣的,就能連通了。這時候一按機器人胸前的按鈕,它就雙眼一亮,說“Hello!I’m NAO! My internet address is xxx.xxx.xxx.xxx”。之後你便可以燒錄你的代碼進機器人,由於此次代碼開發是基於現成的HULKs的代碼,所有需要使用的底層接口都已經寫好,因此對於NAOqi OS並不需要做太多的瞭解。

課題引入

移動機器人的定位是一般性定位問題的一個實例,它是機器人技術中最基本的感知問題。 這是因爲幾乎所有機器人任務都需要知道機器人的位置。
————Sebastian Thrun

熟悉了我們的研究對象之後,就該着手考慮具體做哪一方面的研究了。之前說過,RoboCup是一個系統工程,單從一個機器人考慮他就有感知、決策、執行等各個問題,更不用說足球本就是個團隊配合的運動,還需要考慮機器人與機器人之間的通訊、戰術的選擇。綜合自己的能力和興趣之後,我們選擇了自定位(self-localization)作爲研究課題。

關於自定位問題的思考

由於之前有SLAM方面的一些基礎知識,一開始我是想做一個機器人的SLAM系統,但在瞭解了幾個戰隊的方案選擇後發現代碼中並沒有這一塊的功能。這引起了我的思考,因此想寫下來給大家看看,純屬個人想法,歡迎討論。
先說一下SLAM(同步定位與建圖),最近很火的一個技術,主要用於機器人、無人駕駛汽車的自主定位。乍一看名字感覺非常對得上,正好拿來解決Nao機器人在球場上的定位問題嘛。別急,待我分析分析。
按照高博十四講中的劃分,SLAM問題可以被分爲前端和後端兩個部分。其中前端又叫視覺里程計,工作原理是根據相鄰兩幅圖片之間的差異求得相機的位姿,從而獲得運動軌跡;後端起優化作用,主要依靠濾波器方法或BA進行全局優化,提高前端計算出的座標精度,實現精準定位。
而實際上在RoboCup中只有後端優化這一塊的代碼,並且使用的也是如卡爾曼濾波、粒子濾波等傳統方法,我認爲主要是以下兩個原因:
1)球場環境並不複雜。相對於佈置隨意的室內空間或者完全開放的室外空間,RoboCup的賽場有較多的路標點(Landmark)和特徵可供機器人蔘考。無論是邊線、球門亦或是罰球點、中場圈,都能較方便地被機器人採集並做出判斷(當然,這一判斷是否正確得另說)。檢測這些已經儲存好的路標點要比判斷兩幅圖片之間特徵點的變化或是光流的變化來的容易的多,後者還會在提前特徵點上耗費大量計算資源,請時刻牢記,我們的計算資源很緊缺,因此,這可能是視覺里程計被棄用的一個原因;
2)兩個相機獨特的擺放方式。很多人可能和我一樣看到兩個攝像頭就想到了雙目方法,可是具體問題真的得具體分析。還記得在介紹Nao時我特意強調的事情嗎,那就是兩個攝像頭上下排列且視野不重合。當然這麼設計的目的是爲了上面的攝像頭專門看隊友對手,下面的攝像頭專注看足球,因爲移動中的相機經常會跟丟足球。這就導致了雖然它長着一雙眼睛,但其實只能做單目,而大家都知道單目SLAM是最爲複雜的,還需要滿足初始化條件,這在計算資源本就不夠的機器人上是難以實現的。
因此,綜合考慮各方面因素,SLAM想要在Nao機器人上實現不太可能也沒有必要的1。這也給我們平時做科研提了個醒,還需多結合實際應用部署,可能你的算法很好,但無法部署到實際物體上去,就還需降低算法複雜度。

以下是部分參賽隊伍在自定位問題上的方案選取

HULKs B-Human HTWK TJArk
18年之前用的是粒子濾波,現在改爲多假設卡爾曼濾波 無跡卡爾曼濾波+粒子濾波 迭代最近點(ICP) 迭代最近點+無跡卡爾曼濾波
模塊的輸入包括路標點、里程計數據和運動學數據 定位丟失時可依靠傳感器重啓(Sensor resetting) 沒有使用概率的方法,專注於視覺 ICP匹配特徵,UKF進行優化
在誤差和運行時間方面遠勝之前的方法 定位準確和可靠,經受多屆比賽考驗 在比賽中表現出色 暫無評價

之後的文章將從HULKs的代碼框架入手,一步步實現self-localization。


  1. 當然這也和各個隊的代碼架構設計有關,有個別隊也使用到了ICP(Iterative Closest Point)來匹配路標點,然後再送濾波器優化。 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章