胡鴻彬,李彥明,唐小濤,李志騰,劉成良,2
(1.上海交通大學(xué) 機(jī)械與動(dòng)力工程學(xué)院,上海 200240;2.上海世達(dá)爾現(xiàn)代農(nóng)機(jī)有限公司,上海 200245)
基于高精度GNSS的農(nóng)機(jī)自動(dòng)導(dǎo)航技術(shù)作為精準(zhǔn)農(nóng)業(yè)的一個(gè)重要方向,被廣泛地應(yīng)用于耕作、收割、播種、施肥等農(nóng)業(yè)生產(chǎn)過(guò)程中,可以大大延長(zhǎng)作業(yè)時(shí)間、提高作業(yè)精度和效率、減輕勞動(dòng)者工作強(qiáng)度[1]。農(nóng)機(jī)導(dǎo)航管理系統(tǒng)的作用是實(shí)現(xiàn)人機(jī)交互控制、實(shí)時(shí)導(dǎo)航作業(yè)監(jiān)控、路徑規(guī)劃,以及歷史作業(yè)數(shù)據(jù)管理和查詢等,是農(nóng)業(yè)機(jī)械裝備信息化和智能化的一個(gè)重要載體,是農(nóng)機(jī)自動(dòng)導(dǎo)航技術(shù)的研究重點(diǎn)之一。
國(guó)外發(fā)達(dá)國(guó)家(如美國(guó))很早就開(kāi)展了對(duì)農(nóng)機(jī)自動(dòng)駕駛技術(shù)的研究和應(yīng)用。O’Conner 等人于1995年研發(fā)了一套4天線載波相位GPS系統(tǒng)成功應(yīng)用于John Deere 7800拖拉機(jī)的直線行駛自動(dòng)導(dǎo)航,橫向偏差精度控制在2.5cm以內(nèi)[2]。長(zhǎng)期的技術(shù)積累使得國(guó)外農(nóng)業(yè)機(jī)械廠商已經(jīng)成為全球精準(zhǔn)農(nóng)業(yè)的領(lǐng)導(dǎo)者。例如,美國(guó)Trimble(天寶)公司為農(nóng)機(jī)自動(dòng)駕駛提供了從高精度定位接收機(jī)、車載控制系統(tǒng)、導(dǎo)航管理終端、農(nóng)業(yè)作業(yè)云數(shù)據(jù)平臺(tái)服務(wù)等一整套解決方案,其最新的導(dǎo)航管理終端TMX-2050基于Android平臺(tái)進(jìn)行開(kāi)發(fā),提供了精致完善的農(nóng)機(jī)自動(dòng)導(dǎo)航的操作和管理功能。相比之下,國(guó)內(nèi)的研究和應(yīng)用起步較晚,從事精準(zhǔn)農(nóng)業(yè)的廠商的導(dǎo)航管理系統(tǒng)有些是直接引用國(guó)外的產(chǎn)品進(jìn)行組合和二次開(kāi)發(fā)。國(guó)內(nèi)高校關(guān)于農(nóng)機(jī)導(dǎo)航控制的研究大多處于實(shí)驗(yàn)室階段,有關(guān)導(dǎo)航管理系統(tǒng)的研究較少。張亞嬌等人提出了一種基于WinCE的農(nóng)機(jī)導(dǎo)航監(jiān)控終端系統(tǒng),并在旱田作業(yè)拖拉機(jī)上進(jìn)行了測(cè)試,取得了一定的實(shí)用效果[3]。筆者在Android移動(dòng)終端在工業(yè)中應(yīng)用越來(lái)越廣泛的趨勢(shì)下[4],結(jié)合基于GPS技術(shù)的農(nóng)機(jī)導(dǎo)航系統(tǒng)發(fā)展現(xiàn)狀[5],針對(duì)精準(zhǔn)農(nóng)業(yè)中的作業(yè)管理需求[6],設(shè)計(jì)了一套基于Android平臺(tái)的農(nóng)機(jī)導(dǎo)航管理系統(tǒng),提出了一種實(shí)用的路徑規(guī)劃算法,其具有豐富的功能模塊和良好的人機(jī)交互實(shí)踐效果。
根據(jù)水稻田穴直播機(jī)的實(shí)際作業(yè)需求,導(dǎo)航管理系統(tǒng)的硬件包括拖拉機(jī)車載控制器、無(wú)線數(shù)傳電臺(tái)收發(fā)端、串口藍(lán)牙和小米平板,如圖1所示。車載控制器用于接入GPS定位數(shù)據(jù)、角度傳感器、陀螺儀傾角數(shù)據(jù)及精量播種等傳感輸入信息,并輸出控制信號(hào)控制轉(zhuǎn)向及油門和檔位系統(tǒng)的動(dòng)作。
KYL-320H高速數(shù)傳電臺(tái)和串口藍(lán)牙構(gòu)成遠(yuǎn)程無(wú)線通信方案;小米平板是基于Android系統(tǒng)的終端設(shè)備。本文的重點(diǎn)是軟件系統(tǒng)的設(shè)計(jì)。從圖1中可以看到:其架構(gòu)主要包含農(nóng)機(jī)參數(shù)與作業(yè)參數(shù)管理、水田地理信息管理、農(nóng)機(jī)作業(yè)路徑規(guī)劃、導(dǎo)航實(shí)時(shí)監(jiān)控和交互界面和歷史作業(yè)數(shù)據(jù)管理5個(gè)模塊。系統(tǒng)的工作流程如圖2所示。工作時(shí),安裝并初始化GPS接收機(jī),啟動(dòng)車載控制器,然后啟動(dòng)Android終端程序打開(kāi)藍(lán)牙連接建立通信。導(dǎo)航管理系統(tǒng)先加載包括地塊信息、車輛參數(shù)和作業(yè)行間距等在內(nèi)的默認(rèn)參數(shù)設(shè)置。系統(tǒng)初次運(yùn)行時(shí)需要用戶對(duì)新添地塊進(jìn)行標(biāo)定,即沿著田塊輪廓行走一圈確定其拓?fù)溥吔绮⒈4娴降貕K信息數(shù)據(jù)庫(kù)中。配置好地塊和車輛后,用戶點(diǎn)擊進(jìn)入導(dǎo)航實(shí)時(shí)監(jiān)控頁(yè)面,加載規(guī)劃路徑,啟動(dòng)自動(dòng)導(dǎo)航,車載控制器開(kāi)始控制執(zhí)行機(jī)構(gòu)進(jìn)行實(shí)時(shí)路徑跟蹤作業(yè),作業(yè)結(jié)束后可以通過(guò)歷史作業(yè)管理模塊查詢歷史作業(yè)數(shù)據(jù)。
圖1 系統(tǒng)功能模塊劃分
圖2 系統(tǒng)工作流程
Android系統(tǒng)已經(jīng)占據(jù)移動(dòng)端市場(chǎng)的80%以上,工業(yè)中也越來(lái)越多地使用Android代替?zhèn)鹘y(tǒng)的嵌入式終端設(shè)備的軟件平臺(tái)。本文根據(jù)農(nóng)機(jī)導(dǎo)航系統(tǒng)的功能需求和業(yè)務(wù)邏輯,將系統(tǒng)分為4個(gè)層次,在Android Studio集成開(kāi)發(fā)環(huán)境下完成了導(dǎo)航軟件的設(shè)計(jì)與開(kāi)發(fā)。系統(tǒng)設(shè)計(jì)框架分為交互界面層、業(yè)務(wù)邏輯層、算法工具層,以及數(shù)據(jù)訪問(wèn)和通信層,如圖3所示。這些層之間垂直調(diào)用,共同完成系統(tǒng)功能。使用分層結(jié)構(gòu)的好處是便于數(shù)據(jù)、模型和界面的解耦,實(shí)現(xiàn)程序的模塊化設(shè)計(jì)。
圖3 分層設(shè)計(jì)框架
交互界面層負(fù)責(zé)用戶與車載控制器的交互操作、作業(yè)參數(shù)和導(dǎo)航軌跡顯示等工作。Android系統(tǒng)程序每個(gè)界面對(duì)應(yīng)一個(gè)Activity文件加一個(gè)XML布局文件。本系統(tǒng)中包含有啟動(dòng)界面、設(shè)備連接管理界面、車輛參數(shù)添加界面、地塊添加界面、路徑規(guī)劃界面,以及導(dǎo)航實(shí)時(shí)監(jiān)控界面等。另外,此層的工作還包括每個(gè)界面中的按鈕、控件、彈窗、自定義控件及其適配器和屬性動(dòng)畫等編寫等。
業(yè)務(wù)邏輯層負(fù)責(zé)偵聽(tīng)用戶的操作,把用戶的輸入事件收集起來(lái)回調(diào)給主線程,交給程序作進(jìn)一步處理,同時(shí)負(fù)責(zé)從后臺(tái)接收消息和數(shù)據(jù)對(duì)主界面進(jìn)行刷新。該層主要包括BroadcastReceiver(廣播接收器)、Service(后臺(tái)服務(wù))、OnClickListener(事件偵聽(tīng)器)及Handler(消息處理器)。廣播接收器用于藍(lán)牙設(shè)備連接時(shí),系統(tǒng)硬件驅(qū)動(dòng)層進(jìn)行設(shè)備搜索,把結(jié)果廣播給導(dǎo)航管理控制應(yīng)用程序;后臺(tái)服務(wù)用于后臺(tái)開(kāi)啟和保持藍(lán)牙收發(fā)數(shù)據(jù)的通信線程。事件偵聽(tīng)器在程序中大量使用,每個(gè)按鈕和自定義控件的點(diǎn)擊、長(zhǎng)按等動(dòng)作都會(huì)觸發(fā)該類,然后將動(dòng)作回調(diào)給活動(dòng)進(jìn)行下一步處理;消息處理器(Handler)用于導(dǎo)航實(shí)時(shí)監(jiān)控界面。Android應(yīng)用是單線程模型,默認(rèn)只有一個(gè)主界面線程,即UI線程,所有組件都是運(yùn)行在這個(gè)線程中,所以這個(gè)線程不能進(jìn)行實(shí)時(shí)刷新,如果在這個(gè)線程進(jìn)行耗時(shí)的操作會(huì)阻塞UI線程,導(dǎo)致程序不響應(yīng)甚至可能報(bào)錯(cuò)[7]。導(dǎo)航管理系統(tǒng)的導(dǎo)航實(shí)時(shí)監(jiān)控界面,需要不斷從車載終端讀取數(shù)據(jù)并刷新界面,這時(shí)需要另外開(kāi)啟一個(gè)工作線程,該線程負(fù)責(zé)無(wú)線通信數(shù)據(jù)的收發(fā)。此時(shí),子線程收到的數(shù)據(jù)就需要通過(guò)Handler對(duì)UI進(jìn)行實(shí)時(shí)刷新。此外,需要特別注意的是,在應(yīng)用中使用消息處理器的活動(dòng)要配合使用弱引用方法(WeakReference)來(lái)避免內(nèi)存泄漏問(wèn)題[8]。
算法工具層負(fù)責(zé)連接數(shù)據(jù)和業(yè)務(wù)邏輯的功能,包括空間地理幾何算法類、作業(yè)路徑生成類、導(dǎo)航交互指令控制邏輯類、文件格式轉(zhuǎn)換工具類及通信數(shù)據(jù)解析工具類等。地理幾何算法類將幾個(gè)常用計(jì)算幾何算法封裝成了可以供其他類直接調(diào)用的方法,包括點(diǎn)線位置判斷、兩直線夾角、直線平移算法和判斷點(diǎn)是否在多邊形內(nèi)部的PNPoly算法等[9]。作業(yè)路徑類封裝了水田自動(dòng)導(dǎo)航常規(guī)作業(yè)路徑規(guī)算法。導(dǎo)航交互指令控制邏輯類用于處理終端和車載控制器的交互控制指令。這些指令包括農(nóng)機(jī)導(dǎo)航的啟動(dòng)、停止、運(yùn)行檔位、油門控制、轉(zhuǎn)向指令、設(shè)置AB點(diǎn)、制動(dòng),以及懸掛的精量穴直播機(jī)的控制等若干指令。為了防止導(dǎo)航終端對(duì)車載控制器的控制指令因?yàn)榫W(wǎng)絡(luò)丟包、延遲等原因而未及時(shí)得到響應(yīng),指令交互控制的邏輯設(shè)計(jì)仿照TCP建立連接的“三次握手”的方式,Android終端每一個(gè)指令都會(huì)持續(xù)發(fā)送給車載控制器,直到車載控制器返回響應(yīng)信號(hào),終端才會(huì)切換發(fā)送指令。地圖格式轉(zhuǎn)換工具主要借助第三方開(kāi)源工具包,將新添加的地塊地理信息數(shù)據(jù)以shape文件格式保存。擁有豐富的開(kāi)源資源,這也是Android平臺(tái)應(yīng)用開(kāi)發(fā)的一大優(yōu)勢(shì)。通信數(shù)據(jù)解析類的作用在于將藍(lán)牙通信建立的Socket流數(shù)據(jù)解包為一個(gè)個(gè)獨(dú)立的消息。
數(shù)據(jù)訪問(wèn)和通信層主要包括應(yīng)用數(shù)據(jù)的存取和通信數(shù)據(jù)的收發(fā)解決方案。本文的導(dǎo)航管理系統(tǒng)用到了Android系統(tǒng)數(shù)據(jù)持久化的4個(gè)方案中的3種:文件、SQLite數(shù)據(jù)庫(kù)和SharedPreferences。
文件用于永久保存一些訪問(wèn)不是很頻繁的數(shù)據(jù),如拖拉機(jī)車輛參數(shù)信息、農(nóng)機(jī)掛載農(nóng)具參數(shù)和水田地塊數(shù)字地圖等,同時(shí)可以作為這些數(shù)據(jù)的備份方案。SQLite是一種輕量型數(shù)據(jù)庫(kù),其操作主要包括SQLiteOpenHelper和DatabaseManager類。本文設(shè)計(jì)的系統(tǒng)中的數(shù)據(jù)庫(kù)共建立了4個(gè)分表,即田塊地理信息表、車輛及農(nóng)具參數(shù)表、作業(yè)AB線表即歷史作業(yè)數(shù)據(jù)表,且封裝好了這些數(shù)據(jù)表的增刪改查操作方法,有效地實(shí)現(xiàn)了農(nóng)機(jī)導(dǎo)航過(guò)程中各種數(shù)據(jù)的持久化保存和快速讀取。SharedPreferences是Android系統(tǒng)的一種特有的使用“鍵值對(duì)”的方式把數(shù)據(jù)存儲(chǔ)在XML文件中的數(shù)據(jù)存取方案,用于保存用戶默認(rèn)偏好設(shè)置。它在本系統(tǒng)中用于保存如默認(rèn)車輛、默認(rèn)地塊等的系統(tǒng)默認(rèn)設(shè)置參數(shù),下次程序啟動(dòng)時(shí)如果用戶不進(jìn)行修改則直接加載默認(rèn)配置,節(jié)省了用戶操作時(shí)間。通信層的功能是負(fù)責(zé)藍(lán)牙連接管理和藍(lán)牙Socket的建立,這里需要用到Android多線程開(kāi)發(fā)技術(shù),需要單獨(dú)開(kāi)啟一個(gè)通信線程負(fù)責(zé)終端和車載控制器的數(shù)據(jù)接收和發(fā)送。
基于GPS的農(nóng)機(jī)自動(dòng)導(dǎo)航的作業(yè)方式一般采用AB線方式,農(nóng)機(jī)在田塊一側(cè)設(shè)定基準(zhǔn)A點(diǎn),駕駛一段距離后設(shè)置基準(zhǔn)B點(diǎn),然后沿著AB線方向及其平行線完成整個(gè)地塊的自動(dòng)駕駛[10]。這種方式缺點(diǎn)是每次作業(yè)都需要人工駕駛拖拉機(jī)在地塊表面上行走一段,不僅費(fèi)力費(fèi)時(shí),且壓實(shí)了田地不利于播種。本文設(shè)計(jì)了一種既可以基于AB線方式生成規(guī)劃路徑又可以根據(jù)地塊輪廓自動(dòng)生成規(guī)劃路徑的算法,流程如圖4所示。其主要過(guò)程為選擇地塊區(qū)域、選擇預(yù)設(shè)AB線(可以為空)、地頭寬度和作業(yè)行間距,先確定地頭區(qū)域和基準(zhǔn)線,然后基于平行掃描和PNPoly幾何算法生成所需軌跡。其中,地頭區(qū)域?qū)挾鹊拇_定由拖拉機(jī)最小拐彎半徑、作業(yè)方向等參數(shù)決定[11-12],作業(yè)行間距由農(nóng)機(jī)具幅寬和結(jié)合線寬度決定。圖5展示了上面算法在實(shí)驗(yàn)地塊上沒(méi)有AB線和有AB線的兩種作業(yè)路徑規(guī)劃的結(jié)果。
圖4 路徑規(guī)劃流程圖
圖5 路徑規(guī)劃結(jié)果
將導(dǎo)航管理系統(tǒng)裝載在平板上,與拖拉機(jī)車載控制器建立好無(wú)線連接,使用平板操作農(nóng)機(jī)自動(dòng)導(dǎo)航作業(yè),在上海市松江農(nóng)機(jī)推廣站的試驗(yàn)田上開(kāi)展的多次試驗(yàn)。圖6是一次導(dǎo)航實(shí)驗(yàn)的實(shí)時(shí)監(jiān)控界面;圖7是農(nóng)機(jī)在水田的實(shí)際行走軌跡。在實(shí)驗(yàn)過(guò)程中,平板系統(tǒng)界面簡(jiǎn)潔易操作,始終能保持穩(wěn)定的無(wú)線數(shù)據(jù)傳輸,幾乎沒(méi)有數(shù)據(jù)丟失;控制指令能夠快速下發(fā)給車載控制器并得到其響應(yīng),實(shí)時(shí)導(dǎo)航作業(yè)監(jiān)控界面能夠?qū)崟r(shí)顯示農(nóng)機(jī)的行走軌跡,快速刷新農(nóng)機(jī)運(yùn)動(dòng)參數(shù);地塊信息、車輛信息數(shù)據(jù)庫(kù)能夠穩(wěn)定工作,歷史作業(yè)數(shù)據(jù)可以很方便地查詢;導(dǎo)航界面上農(nóng)機(jī)的行走軌跡真實(shí)地繪制了農(nóng)機(jī)的實(shí)際軌跡。另外,可以看到導(dǎo)航界面上規(guī)劃的路徑幾乎完全被實(shí)際行走軌跡覆蓋,說(shuō)明設(shè)計(jì)的農(nóng)機(jī)車載控制器的跟蹤精度非常理想,后續(xù)開(kāi)展的導(dǎo)航實(shí)驗(yàn)橫向偏差數(shù)據(jù)分析也驗(yàn)證了這一點(diǎn)。田間試驗(yàn)結(jié)果表明:導(dǎo)航管理系統(tǒng)能夠很好地適應(yīng)車載導(dǎo)航控制器的人機(jī)交互功能,體驗(yàn)性能良好。
圖6 田間試驗(yàn)導(dǎo)航實(shí)時(shí)監(jiān)控界面
圖7 拖拉機(jī)實(shí)際行走軌跡
設(shè)計(jì)了一種基于Android的水稻田農(nóng)機(jī)自動(dòng)導(dǎo)航管理系統(tǒng),該系統(tǒng)包括農(nóng)機(jī)參數(shù)管理、田地地理信息管理、路徑規(guī)劃、導(dǎo)航實(shí)時(shí)監(jiān)控和歷史作業(yè)數(shù)據(jù)管理等幾個(gè)模塊,提出了一種實(shí)用的作業(yè)路徑規(guī)劃方法,采用分層設(shè)計(jì)模式完成了系統(tǒng)軟件設(shè)計(jì),并開(kāi)展了多次田間試驗(yàn)。試驗(yàn)結(jié)果表明:該系統(tǒng)能夠?qū)崿F(xiàn)基于高精度GNSS的農(nóng)機(jī)自動(dòng)導(dǎo)航管理、監(jiān)控和交互操作功能,運(yùn)行穩(wěn)定可靠,體驗(yàn)性能良好,在農(nóng)機(jī)自動(dòng)導(dǎo)航中具有現(xiàn)實(shí)意義。