徐暢 賈天佚 喻志林 李小林 張長(zhǎng)勇
(中國(guó)民航大學(xué),電子信息與自動(dòng)化學(xué)院,天津 300300)
近年來(lái),人們的生態(tài)意識(shí)在不斷加強(qiáng),森林覆蓋面積逐漸增加,鳥(niǎo)類的生存空間變得更大,鳥(niǎo)數(shù)量急劇增加;田野、樹(shù)木害蟲(chóng)被農(nóng)藥有效控制[1]。鳥(niǎo)類的食物來(lái)源減少,導(dǎo)致鳥(niǎo)類大肆啄食果品,為了減少損失,許多果區(qū)采用化學(xué)防治,物理防治,果實(shí)套袋的方法。相比于物理防治,化學(xué)防治與果實(shí)套袋的方法會(huì)對(duì)果品的品質(zhì)有所影響。物理防治主要的手段是噪聲防治,通過(guò)一定頻率的聲波刺激鳥(niǎo)的聽(tīng)覺(jué)神經(jīng)從而達(dá)到驅(qū)鳥(niǎo)效果。噪聲防治具有科學(xué)、經(jīng)濟(jì)、實(shí)用等優(yōu)點(diǎn),但傳統(tǒng)的噪聲防治需要解決供電問(wèn)題,遇到惡劣天氣時(shí),喇叭等大功率設(shè)備難以及時(shí)回收。本文研究的果園驅(qū)鳥(niǎo)車(chē)自身攜帶了大容量鋰電池,有效的解決了供電問(wèn)題,通過(guò)鳥(niǎo)類識(shí)別技術(shù)可以做到精準(zhǔn)驅(qū)鳥(niǎo),并且通過(guò)北斗導(dǎo)航與激光雷達(dá)可以實(shí)現(xiàn)自主路徑規(guī)劃以及實(shí)時(shí)定位,方便回收。
本文研究的驅(qū)鳥(niǎo)車(chē)依靠的是ROS 操作系統(tǒng)。ROS 是一個(gè)有著悠久歷史和眾多貢獻(xiàn)者的大型軟件項(xiàng)目,是一個(gè)開(kāi)放的機(jī)器人研究框架。ROS 是開(kāi)源的,內(nèi)部包含了一些機(jī)器人的主操作系統(tǒng),二級(jí)操作系統(tǒng),這些操作系統(tǒng)提供許多功能,包括硬件抽象描述、底層驅(qū)動(dòng)管理、共享功能實(shí)現(xiàn)、程序之間的消息傳遞、分發(fā)管理,還提供了一些工具包和程序庫(kù),用來(lái)捕獲、創(chuàng)建、編寫(xiě)和運(yùn)行更多的機(jī)器集成程序。ROS 開(kāi)源環(huán)境內(nèi)部架構(gòu)包含多種編程語(yǔ)言,程序員可以使用多種編程語(yǔ)言進(jìn)行開(kāi)發(fā)。ROS 發(fā)展至今已有二十載的的歷史,已被大多數(shù)人接受,涵蓋了導(dǎo)航定位功能、路徑規(guī)劃、3D 對(duì)象識(shí)別、機(jī)器人多關(guān)節(jié)運(yùn)動(dòng)控制、機(jī)器智能學(xué)習(xí)[2]等。通過(guò)ROS 的開(kāi)發(fā),機(jī)器人甚至可以做到打籃球,人機(jī)交談等動(dòng)作。騰訊、阿里巴巴、百度等互聯(lián)網(wǎng)公司都已紛紛加入ROS 平臺(tái)進(jìn)行開(kāi)發(fā)。截至目前,自主導(dǎo)航工程師、自動(dòng)駕駛規(guī)劃算法工程師、機(jī)器人感覺(jué)開(kāi)發(fā)工程師、系統(tǒng)平臺(tái)開(kāi)發(fā)架構(gòu)師等崗位,均要求具有一定的ROS 開(kāi)發(fā)經(jīng)驗(yàn)以及相應(yīng)的ROS 知識(shí)。由此,我們可以看到ROS 系統(tǒng)正在逐漸主導(dǎo)中國(guó)機(jī)器人行業(yè)的市場(chǎng)。
本文設(shè)計(jì)的智能小車(chē),主要是實(shí)現(xiàn)自主循跡與識(shí)別警報(bào)功能,見(jiàn)圖1。
圖1 系統(tǒng)整體設(shè)計(jì)圖
自主循跡功能是由北斗+GPS 雙模芯片,二維激光雷達(dá),樹(shù)莓派和STM32 單片機(jī)組成的上下位機(jī)共同實(shí)現(xiàn)的。首先通過(guò)北斗導(dǎo)航與二維激光雷達(dá)的測(cè)距掃描功能,運(yùn)用Gmapping 法對(duì)周?chē)h(huán)境進(jìn)行一個(gè)探測(cè),并通過(guò)ROS 操作環(huán)境下的可視化程序Rviz 形成一個(gè)大致的封閉地圖。之后可以在Rviz 程序中設(shè)置多個(gè)點(diǎn)完成循跡路徑規(guī)劃,接著上下位機(jī)系統(tǒng)整合北斗衛(wèi)星與二維激光雷達(dá)的數(shù)據(jù)確保機(jī)器人行走于正確的路線,并控制機(jī)器人的底盤(pán)動(dòng)力系統(tǒng)。
識(shí)別警報(bào)功能是由K210 芯片、單目攝像頭、揚(yáng)聲器、樹(shù)莓派與STM32 單片機(jī)組成的上下位機(jī)共同實(shí)現(xiàn)的。首先K210 識(shí)別出鳥(niǎo)類,接著K210 會(huì)進(jìn)入語(yǔ)音警報(bào)函數(shù),控制揚(yáng)聲器發(fā)出警報(bào),并向上下位機(jī)提供停車(chē)信號(hào)。上下位機(jī)接收到停車(chē)信號(hào)后控制機(jī)器人停止巡邏。K210 無(wú)法識(shí)別到鳥(niǎo)類后,跳出語(yǔ)音警報(bào)函數(shù),揚(yáng)聲器停止警報(bào),并向上下位機(jī)提供啟動(dòng)信號(hào),上下位機(jī)接收到啟動(dòng)信號(hào)后,機(jī)器人繼續(xù)巡邏。
北斗系統(tǒng)是我國(guó)建成并在逐步完善的一套擁有完全獨(dú)立自主技術(shù)的衛(wèi)星導(dǎo)航系統(tǒng),涵蓋了大范圍的頻段,但是應(yīng)用在民用頻段的較少。為了確保巡邏機(jī)器人定位導(dǎo)航功能的正常運(yùn)行,采用北斗+GPS 的雙模芯片。并且相比于北斗單模系統(tǒng)而言,北斗+GPS 雙模系統(tǒng)可使用的衛(wèi)星數(shù)更多,定位精準(zhǔn),起到了冗余功能。對(duì)于成本而言,只需要對(duì)射頻接收器,端稍作不同的處理就可以支持不同的系統(tǒng)并不需要增加額外的成本。
目前市場(chǎng)上主流的雷達(dá)主要分為激光雷達(dá)和超聲波雷達(dá),但在現(xiàn)實(shí)環(huán)境中聲音嘈雜,環(huán)境惡劣,容易對(duì)超聲波雷達(dá)所發(fā)出的聲波干擾,所以我們采取抗干擾能力強(qiáng)、方向性更好的激光雷達(dá)。
激光雷達(dá)以激光技術(shù)為信息源, 將由激光器所發(fā)送出來(lái)的脈沖激光,打在目標(biāo)上并產(chǎn)生散射,其中部分光波則會(huì)反映在激光雷達(dá)的接收機(jī)上,若按照激光測(cè)距基本原理運(yùn)算,則可得出由激光雷達(dá)至目標(biāo)地點(diǎn)之間的一段距離,從而通過(guò)一系列計(jì)算得到相應(yīng)的坐標(biāo)。脈沖激光連續(xù)地激光掃描目標(biāo)物體,它就能夠獲取在目標(biāo)物體上所有目標(biāo)點(diǎn)的數(shù)量,用此數(shù)加以圖像處理之后,就能獲得更準(zhǔn)確的三維立體圖像了。它還能夠測(cè)定二個(gè)或許多的間距, 并估計(jì)其變化率以獲得速度。本文只需利用二維激光雷達(dá)構(gòu)建一個(gè)平面的封閉環(huán)境圖。系統(tǒng)通過(guò)樹(shù)莓派去收集二維激光雷達(dá)的信息,做出相應(yīng)的處理,并通過(guò)相應(yīng)的軟件將處理到的信息可視化。
樹(shù)莓派的系統(tǒng)基于Linux。Windows 10 互聯(lián)網(wǎng)發(fā)布后,我們的PC 可以直接運(yùn)行樹(shù)莓派,本文采用樹(shù)莓派4,通過(guò)LINUX 運(yùn)行樹(shù)莓派。樹(shù)莓派以ARM 的微型主板為機(jī)械架構(gòu),內(nèi)存條以SD 卡代替,主板四周有多個(gè)USB 接口和網(wǎng)口,可連接多個(gè)外部設(shè)備,同時(shí)擁有PWM 的電視輸出接口和HDMI 高清視頻輸出接口。將上述所有結(jié)構(gòu)結(jié)合在ARM 主板上就形成了一臺(tái)微型電腦。
相比較傳統(tǒng)的C51 單片機(jī),STM32 單片機(jī)運(yùn)行速度更快,因其程序都是模塊化的,接口相對(duì)簡(jiǎn)單。STM32MCU 融高功能、即時(shí)性、數(shù)字信號(hào)管理、低功率、低電流等為一體,并且保留了高集成性和設(shè)計(jì)過(guò)程簡(jiǎn)單的優(yōu)勢(shì)。采用工業(yè)國(guó)際標(biāo)準(zhǔn)的數(shù)據(jù)處理器, 以及大規(guī)模的軟硬件設(shè)計(jì)研發(fā)工具, 使STM32成為大量產(chǎn)品研發(fā)的不二之選。
本項(xiàng)目應(yīng)用樹(shù)莓派作為上位機(jī),給作為下位機(jī)的STM32單片機(jī)發(fā)送操作指令,STM32 單片機(jī)通過(guò)相應(yīng)的傳感器及執(zhí)行結(jié)構(gòu)完成指令操作,并將狀態(tài)信息反饋給樹(shù)莓派。
為了解決汽車(chē)在轉(zhuǎn)向時(shí),由于左、右轉(zhuǎn)向輪的轉(zhuǎn)向半徑不同所造成的左、右轉(zhuǎn)向輪轉(zhuǎn)角不同的問(wèn)題,提出了阿克曼轉(zhuǎn)向機(jī)構(gòu)(Ackermann steering)。根據(jù)阿克曼轉(zhuǎn)向機(jī)制,當(dāng)車(chē)輛沿著曲線,曲柄的四個(gè)鏈接可以使外輪的轉(zhuǎn)向角比內(nèi)側(cè)輪小大約3~6 度,使四個(gè)輪子轉(zhuǎn)向時(shí)的圓心交會(huì)于后輪中心軸延長(zhǎng)線上的轉(zhuǎn)向中心,從而平穩(wěn)的轉(zhuǎn)彎。由于阿克曼結(jié)構(gòu)存在最小轉(zhuǎn)向半徑,不可原地轉(zhuǎn)向,本文研究的小車(chē)會(huì)通過(guò)一個(gè)圓弧運(yùn)動(dòng)實(shí)現(xiàn)轉(zhuǎn)向。
K210 是一款集機(jī)器視覺(jué)與機(jī)器聽(tīng)覺(jué)能力于一體的系統(tǒng)級(jí)芯片(RSIC-V CPU)。使用三星(Samsung)超低功耗的28納米制程,擁有極好的穩(wěn)定性、可靠性、低功耗性。為了使人工智能(AI)產(chǎn)品能夠在最短的時(shí)間內(nèi)部署到用戶手中,K210旨在零門(mén)檻開(kāi)發(fā)。通過(guò)MicroPython 編程,用戶可以輕松實(shí)現(xiàn)基于K210 的MCU 編程和各類AI 算法,如機(jī)器視覺(jué)、機(jī)器聽(tīng)覺(jué)等。在本文里,用K210 去實(shí)現(xiàn)識(shí)別鳥(niǎo)類以及發(fā)出警報(bào)的操作。
北斗導(dǎo)航系統(tǒng)(BDS)是由空間部分,地面監(jiān)控部分與用戶部分組成的[3]。空間部分空由35 顆衛(wèi)星組成,包括5 顆靜止軌道衛(wèi)星、27 顆中地球軌道衛(wèi)星、3 顆傾斜同步軌道衛(wèi)星。地面監(jiān)控部分由主控站、監(jiān)控站、注入站組成。用戶部分指設(shè)備中的BDS 接收機(jī),在本文里使用BDS 接收機(jī)為北斗+GPS雙模芯片。
想要確定一個(gè)觀測(cè)點(diǎn)的位置,可以利用三維坐標(biāo)距離公式x2+y2+z2=d2,通過(guò)3 顆衛(wèi)星可以分別得到接收機(jī)距衛(wèi)星的3組x,y,z 坐標(biāo),從而可以解得觀測(cè)點(diǎn)的位置,然而衛(wèi)星與接收機(jī)之間還有時(shí)鐘誤差,所以實(shí)際上有x,y,z,δ(時(shí)鐘誤差)四個(gè)未知數(shù),所以還需要再加上第四個(gè)衛(wèi)星才能準(zhǔn)確的解得觀測(cè)點(diǎn)的位置,方程式如下:
其中x,y,z 為三維空間坐標(biāo),c 為光速,δ 為接收機(jī)終差。
4.2.1 市面上是主要有兩種雷達(dá)定位模塊:一種是三角定位激光雷達(dá),另一種是TOF 定位激光雷達(dá)。
4.2.2 三角定位激光雷達(dá)
激光器發(fā)射的激光,當(dāng)照射到目標(biāo)物品上后,反照光由線性的CCD (Charge Coupled Device)接受,因?yàn)榧す馄髋c探頭之間間隔著一段距離,所以根據(jù)光路,各個(gè)相距的目標(biāo)物品也會(huì)成像到CCD 上各個(gè)的地方。根據(jù)三角公式并加以運(yùn)算,得出與被測(cè)物體的間距。其原理圖如圖2 所示。其中A、B、C 分別代表激光器感知的三個(gè)位置信息,A'、B'、C'是經(jīng)過(guò)三角測(cè)距成像后三點(diǎn)在CCD 上的成像位置。雷達(dá)中主要采用的是線性CCD,分為x、y 兩種方向用來(lái)捕獲平面圖像。
圖2 激光雷達(dá)三角測(cè)距原理
4.2.3 TOF 定位激光雷達(dá)
激光器發(fā)出一個(gè)激光脈沖,并由定時(shí)器記載下發(fā)射時(shí)間,而回返光經(jīng)接收器接收,并由定時(shí)器記載下回返的時(shí)間。二時(shí)刻相減后就得出了光的“飛行時(shí)間”,而由于光速是固定的,所以當(dāng)知道光速與時(shí)刻關(guān)系后很簡(jiǎn)單地就能夠算出距離。其原理圖如圖3 所示。
圖3 激光雷達(dá)三角測(cè)距原理
4.2.4 由于本文激光雷達(dá)掃描的周?chē)h(huán)境,物理模型符合三角測(cè)距激光雷達(dá)的原理模型,本文采用三角測(cè)距激光雷達(dá)
激光雷達(dá)在描繪環(huán)境時(shí), 每秒所可以進(jìn)行的光點(diǎn)云觀測(cè)次數(shù),也就是采樣率。在轉(zhuǎn)速一定的狀況下,采樣率就決定了雷達(dá)測(cè)距的準(zhǔn)確率。采樣率越高,測(cè)距越精準(zhǔn)。本文采用的雷達(dá)采樣率在20kHz 左右。
4.3.1 鳥(niǎo)類檢測(cè)模型的算法
不同的算法應(yīng)用于不同的芯片,相比于普通的STM32 單片機(jī),K210 更容易完成算法的實(shí)現(xiàn),并且擁有更高的精準(zhǔn)度,能準(zhǔn)確完成鳥(niǎo)類的3D 檢測(cè)與鳥(niǎo)臉的2D 檢測(cè)。因此本文選擇了K210,而與其相關(guān)的算法主要有兩類:一類是為三D 點(diǎn)云所產(chǎn)品設(shè)計(jì)的的CNN-SEG 深入教學(xué)計(jì)算,另一類則是為二D 圖像所產(chǎn)品設(shè)計(jì)的YOLO-3D 深入教學(xué)計(jì)算[4]。CNN 算法雖然取得了較好的準(zhǔn)確率,但是時(shí)耗過(guò)長(zhǎng),完全不能滿足本文對(duì)鳥(niǎo)類識(shí)別的實(shí)時(shí)性要求,因此本文選擇YOLO-3D 深度算法。
4.3.2 K210 單目攝像頭下的物體檢測(cè)神經(jīng)網(wǎng)絡(luò)
本文中采用了YOLO-3D 算法,本文設(shè)計(jì)了K210 單目鏡頭下的物體監(jiān)測(cè)神經(jīng)網(wǎng)絡(luò),進(jìn)行單攝像頭下3D 監(jiān)測(cè)并獲取由2D圖片分割的物體全部信號(hào)。最終完成的多任務(wù)輸出信息:鳥(niǎo)體檢測(cè),通常包含了3D 框(以像素為單位)、鳥(niǎo)體尺寸(以米為單位)。鳥(niǎo)體3D 模型分割:鳥(niǎo)體輪廓線信息,相應(yīng)特征之間的距離等等。
4.3.3 3D 模型參數(shù)的訓(xùn)練預(yù)測(cè)
神經(jīng)網(wǎng)絡(luò)如果直接估計(jì)3D 模型的9 維參數(shù),會(huì)比較困難,特別是預(yù)測(cè)3D 模型中心點(diǎn)位置。于是,本文就通過(guò)幾何學(xué)來(lái)設(shè)計(jì)訓(xùn)練預(yù)測(cè)。首先利用地面平行假設(shè),可以降低所需要預(yù)測(cè)的3D 模型參數(shù)。4.3.3.1 假設(shè)3D 模型只沿著垂直于地面方向的坐標(biāo)軸上有轉(zhuǎn)動(dòng),而在其他二個(gè)方向都沒(méi)有發(fā)生轉(zhuǎn)動(dòng),也即有yaw偏移角,那么其余的Pitch Roll 都是零。4.3.3.2 3D 模型中心高度與相機(jī)寬度相當(dāng),從而可簡(jiǎn)化認(rèn)為障礙物的高度Z=0。由圖四負(fù)四看出,我們現(xiàn)在有大量6 維或3D 信息,需要預(yù)測(cè)。4.3.3.3 對(duì)于3D 障礙物里的6 維度描述, 可選擇神經(jīng)網(wǎng)絡(luò)來(lái)估計(jì)方差較小的參數(shù)。而yaw 轉(zhuǎn)角則相對(duì)易于預(yù)見(jiàn),且與障礙物在圖中的方位關(guān)系不大,適宜通過(guò)物體檢測(cè)框架來(lái)練習(xí)與預(yù)測(cè)。在實(shí)踐中人們也已多次證實(shí)了此項(xiàng)。
4.3.4 K210 控制的語(yǔ)音警告系統(tǒng)
K210 是一塊系統(tǒng)級(jí)芯片,不僅可以與單目攝像頭配合實(shí)現(xiàn)鳥(niǎo)類識(shí)別功能,還可以控制揚(yáng)聲器實(shí)現(xiàn)語(yǔ)音警報(bào)的功能。K210識(shí)別到鳥(niǎo)類后,會(huì)觸發(fā)語(yǔ)音警報(bào)函數(shù),控制揚(yáng)聲器發(fā)出警報(bào)。當(dāng)鏡頭沒(méi)有檢測(cè)到鳥(niǎo)類時(shí),會(huì)跳出語(yǔ)音警報(bào)函數(shù),停止揚(yáng)聲器工作。K210 里語(yǔ)音警報(bào)函數(shù)的對(duì)象是一個(gè)12s 的音頻。
4.3.5 自主巡邏的操作原理
ROS 開(kāi)發(fā)環(huán)境:ROS 是一種用于編寫(xiě)機(jī)器人軟件程序與控制機(jī)器人行為的高度靈活的開(kāi)源環(huán)境。它包含豐富的操作工具、庫(kù)文件和相關(guān)協(xié)議,旨在簡(jiǎn)化跨機(jī)器人平臺(tái)創(chuàng)建復(fù)雜機(jī)器人的過(guò)程。依照ubuntu 本身的驅(qū)動(dòng)程序與激光雷達(dá)相結(jié)合后就可以測(cè)量周?chē)沫h(huán)境并且可以通過(guò)圖形化監(jiān)控程序Rviz 將其具體化[5],并且調(diào)用ubuntu 中的終端程序可以查看有關(guān)于雷達(dá)相關(guān)的發(fā)布方消息。
本文通過(guò)Rviz 將雷達(dá)掃描到的環(huán)境可視化,并在Rviz 中控制機(jī)器人運(yùn)動(dòng)建圖。建圖完成后,通過(guò)Rviz 在地圖設(shè)置多個(gè)巡航點(diǎn)。接著機(jī)器人將通過(guò)北斗導(dǎo)航與激光雷達(dá)導(dǎo)航,在規(guī)劃路徑循環(huán)前進(jìn),配合K210 可以實(shí)現(xiàn)本文的巡邏報(bào)警功能。