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





評(píng)論