3. 視覺感知系統(tǒng)
另外一種替代品是視覺感知系統(tǒng)。1970年之后,隨著數(shù)字成像技術(shù)的發(fā)展,相機作為一種傳感器開始被廣泛研究。因為人可以通過自己的視覺估計視野中物體的位置、距離,而相機的原理模擬了人的雙眼,所以研究者們模仿人的特點,利用相機的二維圖像反推圖像中物體的三維信息。這種和二維圖像推算三維信息相關(guān)的技術(shù)和數(shù)學(xué)理論發(fā)展成了一個獨立的學(xué)科——計算機視覺,也被稱作機器視覺。
視覺感知系統(tǒng)是目前世界上最熱門的機器人學(xué)和機器視覺領(lǐng)域研究課題。其原理是利用一個或者多個相機構(gòu)成的視覺傳感器系統(tǒng),采用復(fù)雜的算法,通過二維的相機圖像推算出視野中物體相對與視覺傳感器系統(tǒng)的幾何中心的運動信息,如果假設(shè)這些物體都是靜止的,那么相對運動其實代表了視覺傳感器本身的運動。理論上,計算機視覺技術(shù)能夠單憑一個相機就可以準(zhǔn)確測量十五個狀態(tài)量,但是與其他傳感器類似,相機也有很多的缺陷,包括無法恢復(fù)尺度、成像質(zhì)量有限、計算量消耗巨大等等。幸好,我們還可以把視覺感知系統(tǒng)和其他傳感器結(jié)合起來,互相提高測量精度。
聰明的讀者肯定能夠想到,把視覺感知系統(tǒng)和之前說的所有組合導(dǎo)航中用到的傳感器融合起來,GPS信號質(zhì)量高的時候用GPS組合導(dǎo)航,沒GPS的時候用視覺感知系統(tǒng)替代GPS,不就解決問題了嗎。這確實正是目前工程師和科學(xué)家們正在努力解決的問題,也是精靈4上初步實現(xiàn)的技術(shù)。在介紹精靈4是如何結(jié)合視覺感知系統(tǒng)和組合導(dǎo)航技術(shù)之前,我們先簡單介紹兩種已經(jīng)比較成熟的視覺感知系統(tǒng):光流測速模塊和視覺里程計。
光流測速模塊顧名思義,只能測速度。通常一個光流測速模塊由一個相機、一個慣性測量元件、一個超聲波模塊構(gòu)成,它的主要原理是計算機視覺技術(shù)中于1981年被發(fā)展出來的“光流追蹤”算法。
“光流”的概念最早在1950年代由心理學(xué)家和生物學(xué)家提出,指的是一個觀察者和他在觀察的事物發(fā)生相對運動時,這些事物在他眼前成的像會產(chǎn)生“運動的模式”,人腦利用這種“運動的模式”能夠更靈敏地感知周圍什么東西在動。比如下圖中,讀者一看就可以直觀理解“光流”的意義。
后來計算機科學(xué)家布魯斯-盧卡斯和金出武雄在1981年發(fā)明了Lucas-Kanade算法,通過算法計算出連續(xù)拍攝的圖片上的光流,并證明了光流可以反解出相對運動的速度。雖然三十多年來,Lucas-Kanade算法始終被公認(rèn)為最好的“光流追蹤”算法,但是它有比較大的局限性,它包含很多假設(shè),比如假設(shè)連續(xù)圖片的平均亮度相同,比如假設(shè)圖片中的物體只發(fā)生平面運動等等。另外,光流算法算出的速度是沒有尺度的,因為相機圖像的單位是像素,所以光流算法只能給出“你現(xiàn)在的速度是10個像素每秒”,但是沒法算出10個像素是1厘米還是1米。恢復(fù)尺度的方式是增加一個超聲波模塊測量平面運動離相機的距離,這樣就能夠把像素運動轉(zhuǎn)換成真實的運動。最后,如果要讓光流測速模塊在晃來晃去的多旋翼飛行器上也能使用,通過慣性測量元件找出圖像所代表的平面也是必不可少的,這一點需要在算法上進(jìn)行兩種傳感器很好的配合。
光流算法原理上只可以測三維速度,不能直接測量三維位置。我們同樣可以通過把光流測速模塊測出的三維速度積分獲得三維位置,但是就像慣性測量元件積分會發(fā)散一樣,光流測速模塊積分得到的位置也會發(fā)散。好在它不會天馬行空地失去控制,和組合導(dǎo)航技術(shù)中除了GPS之外的傳感器妥善融合之后,它可以做到懸停時測量的位置不發(fā)散。因此可以說光流測速模塊只在有限的條件下能夠替代GPS。
光流測速模塊已經(jīng)形成了非常標(biāo)準(zhǔn)的解決方案。大疆悟以及精靈3上都裝載了自主研發(fā)的光流測速模塊,另外著名的開源飛控產(chǎn)品Pixhawk中包含了一個叫做PX4Flow的光流測速模塊,并且開源了所有的代碼和硬件方案。所以光流測速模塊目前已經(jīng)廣泛出現(xiàn)在了各大廠商的多旋翼飛行器產(chǎn)品上。視覺里程計相比光流測速模塊,增加了直接測量位置的能力,所以才叫“里程計”。視覺里程計比光流測速模塊能力更強,性能更好。
讀者可能會問,為什么聽起來視覺里程計和光流測速模塊參與的傳感器數(shù)量差不多(光流測速模塊甚至還多一個超聲波模塊),但是視覺里程計能力反而更強呢。這里的原因不在于傳感器硬件,而在軟件算法上。前面已經(jīng)說到光流追蹤算法有很多簡化的假設(shè),只能測量平面運動,增加其他傳感器硬件一定程度上是為了把那些為了計算方便而簡化掉的因素重新彌補起來。
而視覺里程計算法則復(fù)雜得多,它不僅要通過圖像反推出視野中物體的平面運動,還要反推出這些物體的三維位置,并且基于這些物體的三維位置做很多次的優(yōu)化計算,算法復(fù)雜度成倍于光流測速模塊。有些視覺里程計的算法甚至包含完整的光流追蹤的算法,但是僅僅把計算光流作為預(yù)處理圖像的步驟。
視覺里程計能夠直接測量位置,測量值也比較準(zhǔn)確,不會像光流測速模塊那樣發(fā)散。通常比較優(yōu)秀的視覺里程計飛100米之后只會積累十幾厘米到幾十厘米的誤差,這個測量水平比起導(dǎo)彈上幾百萬的慣性測量元件還是差了不少,但是考慮到視覺里程計的價格極其低廉,對比起來它的性價比非常高。
視覺里程計有幾個不同層次的難度,最簡單的是兩個相機構(gòu)成的雙目立體視覺系統(tǒng)加慣性測量元件,最難的是一個相機構(gòu)成的單目視覺系統(tǒng)加慣性測量元件。如果視覺里程計和光流測速模塊硬件一致,那么這里的視覺里程計采用的是單目視覺系統(tǒng)。目前,雙目立體視覺系統(tǒng)加慣性測量元件實現(xiàn)自身狀態(tài)觀測已經(jīng)是比較完善的技術(shù),而單目視覺系統(tǒng)則是活躍的研究方向,世界上做這個研究方向較好的大學(xué)有美國的賓西法尼亞大學(xué)、瑞士的蘇黎世聯(lián)邦理工學(xué)院、英國的牛津大學(xué)、我國的香港科技大學(xué)和其他一些歐美院校。
單目視覺系統(tǒng)和雙目立體視覺系統(tǒng)兩者對比起來,他們的算法難度差別很大。視覺里程計的算法關(guān)鍵點是前面說的“通過連續(xù)的圖像反推出視野中物體的三維位置”。對于和人眼結(jié)構(gòu)類似的雙目立體視覺系統(tǒng),這一點比較容易,因為一個物體同時出現(xiàn)在左右兩個相機的視野中時左右視野有視差,視差可以幫助解算物體的位置,只需要用簡單的幾何關(guān)系就可以實現(xiàn),這已經(jīng)是非常成熟的技術(shù)。
但是對于單目視覺系統(tǒng),只有一個相機就沒有視差,沒法做簡單的幾何關(guān)系的解算,所以算法必須能智能地在局部范圍內(nèi)同時估計很多個物體的位置,然后在自身移動過程中通過位置移動產(chǎn)生視差,然后進(jìn)行多個物體的位置的最大似然估計,從而推算出這些物體比較準(zhǔn)確的位置。這個過程包括很多個環(huán)節(jié),大部分環(huán)節(jié)在學(xué)術(shù)界都沒有公認(rèn)最優(yōu)的方案,因此還沒有成熟的技術(shù)。
因為原理相對簡單,所以雙目立體視覺系統(tǒng)構(gòu)成的視覺里程計在三十年前就開始被研究了。1980年代早期,NASA工程師、著名機器人學(xué)家漢斯-莫拉維克就已經(jīng)制造出了這種狀態(tài)測量系統(tǒng)。關(guān)于漢斯-莫拉維克的另一個故事,我在知乎問題中“有哪些與控制、機器人等相關(guān)的 quotes? - YY碩的回答”也有提到。
在經(jīng)年累月的優(yōu)化之后,2004年,NASA成功把視覺里程計和慣性測量元件構(gòu)成的視覺定位系統(tǒng)裝在“機遇號”和“勇氣號”火星車主頻僅有20MHz的特制芯片上,送上了火星,它可以幫助火星車通過一對雙目相機非常準(zhǔn)確地記錄自己走過的路線。2007年,參與火星探測任務(wù)的計算機科學(xué)家和工程師們把這個激動人心的過程寫成了一篇論文《計算機視覺在火星》(Computer Vision on Mars),這篇文章吸引了很多計算機視覺研究人員投身視覺里程計的研究,也極大推動了視覺里程計在機器人學(xué)中的應(yīng)用。
4. 精靈4的傳感器方案
大疆在精靈4上實現(xiàn)了雙目立體視覺系統(tǒng)加慣性測量元件構(gòu)成的視覺里程計,飛機上裝了兩套雙目立體視覺系統(tǒng),一套向前看,一套向下看,一共是四個相機。
兩套雙目立體視覺系統(tǒng)都參與視覺里程計的計算。通常情況下以向下看的雙目立體視覺系統(tǒng)為主,如果向下看的相機對著一些特征不明顯的環(huán)境(比如純色的地板、海面等等),感受不到什么圖像變化,視覺里程計會自動切換到向前看的立體視覺系統(tǒng)做測量計算。雖然精靈4采用的都是較為成熟的機器視覺技術(shù),但是由于精靈4上機載的計算量非常有限,大疆還是下了相當(dāng)久的苦功去優(yōu)化算法,并使用了Movidius公司制作的圖像算法處理專用芯片,結(jié)合Movidius公司的圖像處理算法庫優(yōu)化四路圖像處理的性能。值得一提的是,不久就會面世的Google Project Tango也使用了Movidius公司的這款芯片。不過因為Movidius公司的芯片不包含視覺里程計的算法,所以Google的這款產(chǎn)品中視覺里程計的算法應(yīng)該與精靈4的算法有較大差別。
兩套雙目立體視覺系統(tǒng)還帶來了視覺里程計之外的兩個好處:
1. 向下看的一套雙目立體視覺系統(tǒng)可以探測下方地面上物體的三維位置,從而知道地面的距離;
2. 向前看的一套雙目立體視覺系統(tǒng)可以用來探測前方場景中物體的深度,產(chǎn)生深度圖進(jìn)行障礙感知。深度圖還可以用于重建一個飛行器周圍的局部地圖,以進(jìn)行精細(xì)的運動規(guī)劃,這就是精靈4指點飛行的基礎(chǔ),在這篇文章中不詳細(xì)介紹了。
除了增加視覺里程計之外,精靈4上還增加了內(nèi)置的超聲波模塊。所以精靈4上一共有GPS+慣性測量元件+氣壓計+地磁指南針+超聲波模塊+雙目視覺系統(tǒng)六種傳感器。其中雙目視覺系統(tǒng)有兩套,共4個相機;慣性測量元件有兩個,實現(xiàn)雙冗余備份;地磁指南針也有兩個,同樣雙冗余。當(dāng)工作中的慣性測量元件或者地磁指南針受到嚴(yán)重干擾的時候,系統(tǒng)會自動進(jìn)行備份切換,切換到另一個傳感器上。
有了這些傳感器以后,組合導(dǎo)航系統(tǒng)升級成為了智能導(dǎo)航系統(tǒng)。智能導(dǎo)航技術(shù)極大拓展了飛行器可以活動的空間,當(dāng)有GPS的時候,系統(tǒng)可以通過GPS為主進(jìn)行十五個狀態(tài)量的測量,視覺里程計依然可以繼續(xù)運作,提供額外的速度和位置的測量值進(jìn)一步提高精度;GPS信號不好的時候,視覺里程計可以接替GPS為整個系統(tǒng)提供穩(wěn)定的觀測。智能導(dǎo)航系統(tǒng)中有三種確定高度的傳感器:超聲波、氣壓計、雙目立體視覺,這三種傳感器幾乎可以覆蓋所有讓傳統(tǒng)多旋翼飛行器頭疼的定高場景:樹叢上方、室內(nèi)、靠近建筑的位置、大風(fēng)環(huán)境等等。
地磁指南針的冗余設(shè)計可以很大程度上減小外部磁干擾帶來的指南針故障。另外視覺里程計也能給出航向的觀測,兩者互補能夠提高航向的觀測精度。在以前的飛行器上,因為地磁指南針受到干擾造成的炸機問題比較多,在精靈4上因為有了多重保護(hù)措施,地磁指南針被干擾導(dǎo)致問題的概率大大降低。
有了智能導(dǎo)航系統(tǒng)之后,還需要有一套強有力的軟件系統(tǒng)去組織導(dǎo)航算法和飛行控制算法。精靈4的飛控和最新推出的A3飛控類似,都是大疆第三代飛行控制器。大疆第一代飛控是汪滔自己寫的,性能很不錯,然后飛控組在過去的幾年里做了兩次比較大的飛控軟件系統(tǒng)的重構(gòu),以支持更多的傳感器和功能。2014年底推出的第二代飛控里加入了光流測速模塊支持、SDK、限飛區(qū)和新手模式等功能,2016年初開發(fā)完成的第三代飛控里加入了冗余傳感器、雙目立體視覺支持、避障功能和智能返航等功能。因為每一次重構(gòu)都對整個軟件系統(tǒng)做了很大規(guī)模的調(diào)整,增加了很多的軟件模塊和新的軟件架構(gòu),所以分了三代。別人剛開始做飛控的時候,大疆已經(jīng)自己重構(gòu)了兩次代碼,這一點是大疆最引以自豪的地方之一。
智能導(dǎo)航系統(tǒng)讓精靈4在任何狀態(tài)下都可以準(zhǔn)確測量自身的三維位置和三維速度,這對實現(xiàn)多種功能都有非常重要的意義。
近年來,業(yè)界有很多關(guān)于避障應(yīng)該使用雙目立體視覺還是激光雷達(dá)傳感器等傳感器的爭論。在大疆內(nèi)部,選擇什么樣的傳感器放入智能導(dǎo)航系統(tǒng)用來避障,工程師團(tuán)隊也進(jìn)行了曠日持久的探討,最后還是選擇了雙目立體視覺的方案。我相信隨著科技的發(fā)展,在未來會不斷有更多更好的新傳感器誕生,很可能會有其他傳感器代替雙目立體視覺,但是實現(xiàn)穩(wěn)定避障的關(guān)鍵不在于避障所使用的傳感器。避障這個事件發(fā)生前后,飛行器機體一定會發(fā)生急剎車,整體會經(jīng)歷很大的姿態(tài)變化和加速度,在這種狀態(tài)下,飛行器是否還能穩(wěn)定地測量出自己的十五個狀態(tài)量,才是最影響安全性的問題。
如果系統(tǒng)急剎車之后,整體的位置觀測甚至速度觀測都發(fā)散了,這時候飛行器有可能左右飄出去,還是會發(fā)生炸機。就算不炸機,避障之后飛機前后左右搖晃,也會給用戶心理上造成不安全的感受,帶來很差的用戶體驗。精靈4在很多嚴(yán)苛的情況下發(fā)生避障動作時,飛行器會自動鎖定位置、速度迅速減為0的狀態(tài),很快就可以從高速機動恢復(fù)到完全不動,非常穩(wěn)定地懸停,避免了在障礙附近不穩(wěn)定活動引起炸機。
精靈4還能處理很多看似很簡單,但是對傳感器系統(tǒng)要求非常高的飛行場景。比如在十幾層樓的窗口把飛行器從室內(nèi)飛到室外懸停。這種場景下,從窗口穿出時,向下看的傳感器幾乎馬上全部失效,由于有建筑的遮擋,GPS也不會立刻生效,因此傳感器系統(tǒng)不夠穩(wěn)健的飛行器有可能因為失去速度和位置的測量而飄到建筑上造成高空炸機。而精靈4則能夠通過前視雙目視覺系統(tǒng)的觀測,在向下看的傳感器都暫時失效時繼續(xù)運行視覺里程計,及時提供輔助的速度和位置觀測,避免造成無法控制速度和位置導(dǎo)致炸機的情況出現(xiàn)。
實際上,由于前面說的過GPS容易被遮擋導(dǎo)致沒有足夠的信號做觀測的情況在航拍的場景中其實常常遇到。比如在樹木茂密的峽谷里航拍,經(jīng)常出現(xiàn)的情況是飛行器放在地面上時接收不到GPS信號,如果穩(wěn)定飛到幾十米的高度就可以接收到了。在這些臨界情況下起飛和降落非常危險,如果要保證飛行器在升降過程中都能保持穩(wěn)定的狀態(tài),飛行器必須能夠在GPS和視覺里程計之間無縫轉(zhuǎn)換,這樣才能讓用戶放心地起降。如果用戶從高處下降到低處GPS突然沒有了,而視覺里程計沒有及時補上,飛機失去位置和速度觀測之后就變得非常難操控,就有可能撞在樹叢上。
讀者可能問,在這些情況下光流測速模塊效果是不是也一樣呢。我們前面說過光流測速模塊的算法有很多簡化的假設(shè),尤其是被觀測的物體必須處于同一個平面這樣的假設(shè),使得光流測速模塊在樹叢上方、地勢變化較大的空間上方,都表現(xiàn)非常糟糕,并不能滿足戶外航拍的需求。雖然視覺里程計計算量龐大,但它是比光流測速模塊更加實用有效的方案。
另外值得一提的是,第二代的大疆飛控使用的是遙控器桿量轉(zhuǎn)化成飛行器的加速度指令,而第三代的大疆飛控在精靈4上變成了遙控器桿量轉(zhuǎn)化成飛行器的速度指令。在精靈3、大疆的前代飛行器以及很多無人機產(chǎn)品上,如果你推遙控器滿桿前進(jìn),飛行器會以一個固定的角度加速飛出去,直到加速度被空氣阻力抵消,這樣控制并不直觀,所以新手很難操作飛行器;而在精靈4上,如果你推遙控器滿桿前進(jìn),飛行器會自己調(diào)整到一個固定的速度上,直接操控速度顯得非常直接,非常容易操控。以往,讓飛行器保持勻速飛行是只有專業(yè)飛手才能做到的事情,現(xiàn)在則真真正正地讓普通人也能觸手可得。這一個修改看似簡單,但是提供了更好的操作手感,而且讓飛行器飛行的狀態(tài)更加穩(wěn)定。
對于航拍操作手來說,所有的花哨功能都不如懸停得穩(wěn)、飛得穩(wěn)這一點重要,因為飛機晃得太厲害,總會給用戶造成一種“我的飛機真的沒出問題嗎”的感受,用戶體驗極其不好。我們?nèi)ノ鞑厍嗪;蛘咂渌苊赖牡胤介_車玩,肯定是希望平穩(wěn)、慢慢地開,這樣才能專心看美景;如果開著一部油門輕輕一點就加速到200公里的賽車,坐在車?yán)镆粫罕煌票常粫哼^彎時左右甩,人還有心情欣賞路上的美景嗎?
遙控器桿量改動也顯示了大疆對自己智能導(dǎo)航系統(tǒng)提供的穩(wěn)定的三維速度測量的信心。目前我沒有見過其他哪家公司的飛行器控制系統(tǒng)采用的是遙控器桿量轉(zhuǎn)化成飛行器的速度指令。
評論