国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Qt 的自主航行系統(tǒng)終端設計與實現(xiàn)

2020-11-30 06:53陳珍銳
科學技術創(chuàng)新 2020年34期
關鍵詞:插件船只串口

陳珍銳 劉 鑫

(1、山東交通學院,山東 威海264209 2、威海海洋信息科學與技術研究院,山東 威海264207)

隨著現(xiàn)代科學技術的發(fā)展,船舶自主航行是未來船舶發(fā)展的主要方向[1]。船舶自主航行主要包括兩種:一是無人駕駛船舶。該型船舶研究得重點和難點是智能控制技術,其必須能夠自主進行環(huán)境探測、目標識別、自主避障、路徑自主規(guī)劃等。盡管無人駕駛技術已經(jīng)被成功運用于飛機和汽車,而將其運用于大型商業(yè)船舶還沒有先例,直到今年9 月份,由海洋研究組織ProMare 牽頭建造一艘無人駕駛全自主船舶“Mayflower AutonomousShip”號(MAS)計劃完成橫跨大西洋航行[2];二是輔助駕駛船舶。該型船舶能夠實現(xiàn)部分開闊海域的自助航行功能,需要船員設定船舶的航行路線,監(jiān)視船舶的航行方向,對于復雜的水面環(huán)境,需要船員操控,其技術難度明顯低于無人駕駛船舶;另外該型船舶也能夠讓船員通過信息終端遠程操作船舶的航行,本文所設計終端系統(tǒng)也主要用于該型船舶。

Qt 作為一種跨平臺的基于C++的GUI 系統(tǒng),用于開發(fā)圖形用戶界面和多平臺應用程序,這些應用程序可以運行在包括電腦,手機,平板,嵌入式系統(tǒng)等多種平臺,該系統(tǒng)成為世界上很多成功的圖形用戶應用所使用的主要系統(tǒng)。Qt 具有如下特點:Qt 是類MFC的面向對象的C++開發(fā)包;具有信號與槽的事件驅動機制;Qt 支持各種編譯器,包括GCC C++編譯器和VisualStudio套件;并具有廣泛的國際化支持[3]。

本軟件主要工作是實現(xiàn)船舶自助航行過程中的船舶信息展示,主要包括GPS定位信息,船只的航向航速以及從單片機中采集到的其他信息。通過利用GPS定位信息,能夠實時的展示出當前船只所在位置,為當前船只航行參數(shù)提供展示。另外,為了能夠實現(xiàn)船只的自主航行,實現(xiàn)了船只自主航行中的圖形接口,船員點擊地圖中目標位置后,軟件能夠確定當前位置與目標之間的距離及方向,船只可以自主的朝向目標位置航行。除此之外,軟件還實現(xiàn)了用戶終端與單片機之間得多種通信方式,包括有線串口,藍牙等,為數(shù)據(jù)的可靠傳輸提供了保障。另外本軟件能夠運行于電腦,平板,手機等多種平臺,以對船只的實時航行信息進行監(jiān)視。

1 系統(tǒng)設計

本軟件總體結構包括四個部分,分別為航行數(shù)據(jù)通信模塊、用戶界面設計、電子地圖顯示以及自主導航實現(xiàn)。圖1 給出了軟件的整體基本架構。

軟件整體的運行流程如圖2 所示。當用戶打開軟件后,軟件的操作界面會顯示電子地圖,并自動檢測通訊線路是否處于開啟狀態(tài),如果通訊線路沒有開啟,需要用戶手動配置通訊線路,如果已開啟通訊線路,那么開始接受來自通訊線路中的GPS和其它傳感器的信息,并對獲得的這些數(shù)據(jù)解析,從中提取出經(jīng)、緯度,航向,速度等信息,并將這些信息實時的顯示到系統(tǒng)終端界面。在軟件利用這些信息進行導航時,需要實時的檢測用戶是否設置了航行目標位置,如果用戶沒有設置目標位置,那么系統(tǒng)只運行在航行信息展示狀態(tài),當用戶從終端地圖中選取了目標位置之后,并開啟自助導航后,系統(tǒng)會提取出目標位置相關信息,包括目標位置經(jīng)緯度,所處方向,當前位置與目標位置之間的距離等,利用這些信息實現(xiàn)自主導航功能。自主導航結速后,系統(tǒng)就會重新進入信息展示狀態(tài),等待用戶退出系統(tǒng)或設置新的目標位置。

圖1 自助航行系統(tǒng)終端整體功能圖

圖2 基本流程圖

1.1 用戶界面設計

本系統(tǒng)在用戶界面設計時,考慮到軟件需要具有跨平臺得特點,使用Qt Quick 開發(fā)。要使用Qt Quick,就要用到QML語言,QML 實現(xiàn)并擴展了ECMAScript,是一種說明性腳本語言,用來描述基于Qt 對象系統(tǒng)得用戶界面。QML提供了高可讀性、聲明式的、類似CSS得語法,支持動態(tài)屬性綁定的ECMAScript 表達式[4]。本軟件在使用QML設計用戶界面時主要包含三大模塊,分別為電子地圖展示、軟件菜單設置選項和自主航行信息顯示。

1.1.1 電子地圖展示。電子地圖的正確顯示是自助航行系統(tǒng)的基礎,如果不能正確顯示地圖信息,用戶在配置目標位置信息時就可能是錯誤的,從而會導致不能準確得到達目標位置,甚至會發(fā)生事故。為了能夠正確顯示地圖,Qt 提供了位置應用程序接口(Qt Location),該接口可以用于訪問第三方地圖開放平臺,借助于它們可以顯示電子地圖,提高開發(fā)的效率。然而,Qt 在使用第三方地圖時需要借助于插件,目前Qt 提供的插件只能使用國外地圖服務,比如ESRI,HERE,OSM等,對于國內的地圖開放平臺百度、高德等,我們需要制作專門插件,用于接入到國內地圖服務平臺。

本軟件使用了高德地圖的插件,雖然Qt 官方?jīng)]有直接提供該插件,但是開發(fā)該插件的過程也并不困難,我們可以根據(jù)網(wǎng)上的一些開源項目如QGroundControl 中所包含Qt 位置插件源碼,制作高德地圖插件。當插件制作完成后需要將其放到Qt 的插件目錄geoservice 目錄,然后就可以通過使用QML 中plugin 元素來訪問該插件,將地圖嵌入到應用程序中。其代碼如下:

其中"amap"是制作的高德地圖服務名稱。

QML語言風格類似于用于描述網(wǎng)頁格式的CSS 樣式表,它提供了很多基本元素和控件來幫我們構建Qt 應用程序,這里的Item是QML提供基本元素的基類,QML會將我們使用到的控件組織成樹型結構,這里我們使用Item元素來作為界面的根元素。plugin 元素可以使用name 屬性訪問地圖插件,這里我們的插件名為amap。最后,我們可以使用Map 控件在終端顯示地圖界面,并實現(xiàn)對地圖操作的控制。

1.1.2 菜單選項。在軟件啟動后,需要對其進行特殊配置,軟件才能夠正常工作,這就要用到菜單選項。菜單設計可以采用Qt 提供的Button 控件,在QML中使用Button 標簽可在用戶界面顯示對應按鈕,用戶點擊按鈕會觸發(fā)一個clicked()信號,在QML 文件中可以直接指定clicked()信號處理器,響應用戶操作。這里按鈕除了用于配置軟件以外,還可以用于與地圖之間交互,如開啟導航,實現(xiàn)定位等。

1.1.3 航行信息。在用戶界面中,另外重要部分就是系統(tǒng)信息展示,船只在航行中的信息能夠以直觀的方式展示給用戶,以便于用戶根據(jù)實時檢測到的船只信息,能夠做出適當?shù)谜{整。使用QML展示信息的最簡單方法是使用Text 控件,Text 控件可以用于顯示文本,并且能夠使用屬性項對顯示方式進行配置。這里可以應用Text 控件顯示經(jīng)緯度信息,錨(anchors)屬性可以用來控制Text 元素顯示位置。在軟件中除了使用Text 元素外,我們還使用了QML中提供的CircularGauge 控件。CircularGauge 控件是計量儀工具,使用指針來顯示某個輸入值,用于模擬機械儀表盤。軟件中我們使用該工具實現(xiàn)船只航行方向和速度的指示。另外,在CircularGauge 控件中有一個style 屬性可以設置儀表盤的風格,這里需要注意的是在設置style 屬性時,需要使用CircularGaugeStyle 元素創(chuàng)建儀表盤的風格,該元素主要用于繪制儀表盤使用。軟件在顯示速度和角度時都是用到了CircularGaugeStyle 元素,主要用于繪制儀表盤上不同刻度,比如在指南針中只有東西南北四個標記,而在速度顯示中需要使用適當?shù)乃俣乳g隔標記速度。

1.2 數(shù)據(jù)通信模塊

為了能夠實現(xiàn)船只的自助航行,需要單片機來檢測船只得航行狀態(tài),這些狀態(tài)信息使用通信模塊傳遞給信息終端。本軟件實現(xiàn)與單片機通信方式有兩種,分別是有線串口和藍牙串口通信。

首先,有線串口通信是本軟件的主要通信方式,單片機可以通過串口線連接到終端傳遞信息。Qt 中提供串口模塊實現(xiàn)數(shù)據(jù)通信。要使用串口模塊,需要在工程文件中加入serialport 模塊,并在源代碼中引入串口的頭文件。一般來說,在使用串口時主要分以下四個步驟:

(1)獲取當前終端中可連接的所有串口信息。QSerialPortInfo類提供了提供現(xiàn)有串行端口的信息,使用該類的availablePorts 方法會返回系統(tǒng)上可用串行端口列表,該列表的每個QSerialPortInfo對象表示一個串行端口,可以查詢端口名稱、系統(tǒng)位置、描述和制造商等。

(2)根據(jù)串口列表信息,選擇適當串口打開。在打開串口時,需要使用QSerialPort 完成與單片機的通信,要使用該類除了需要配置步驟(1)中設置的串口信息外,還需要配置波特率、數(shù)據(jù)位和校驗位等信息用于控制通信數(shù)據(jù)。最后使用Qt 中的信號槽機制將串口設備信號與處理過程連接,當單片機的數(shù)據(jù)到達串口時會發(fā)送readyRead 信號,根據(jù)該信號我們可以定義個槽函數(shù)解析數(shù)據(jù)。

(3)數(shù)據(jù)交互。當成功打開串口后,就可以實現(xiàn)串口通信。串口通信終端(Qt 程序)除了上面所說得利用Qt 中得信號槽機制處理單片機中的數(shù)據(jù)外,還可以將數(shù)據(jù)發(fā)送給單片機以實現(xiàn)船舶航行路線控制。Qt 程序向單片機發(fā)送數(shù)據(jù)過程比較簡單,只需要使用QSerialPort 對象的write 方法即可,當調用該方法后,數(shù)據(jù)會被寫入到串口并交給單片機進行處理。

(4)關閉串口。使用完串口后,可以使用QSerialPort 對象的close()方法關閉串口。串口可以通過有線連接的方式與船載終端通信,考慮到手機、平板終端訪問需要使用到無線傳輸,所以在設計時除了使用有線串口之外,還可以使用無線WiFi 和藍牙通信。對于WiFi 通信,我們可以利用其將數(shù)據(jù)傳輸?shù)竭h程服務器存儲,然而對于海域中沒有網(wǎng)絡或網(wǎng)絡信號較差的海域,并不能夠完全監(jiān)視船只航行情況,所以無線WiFi 只作為備用通信方式,需要用戶選擇連接,這里我們只介紹藍牙通信。要使用藍牙通信,需要給單片機增加藍牙模塊,這里我們使用HC-08 模塊[5]。HC-08 藍牙串口通信模塊采用藍牙4.0 通信協(xié)議,可以實現(xiàn)80m 距離通信,能夠滿足距離需求。其實使用藍牙串口與有線串口發(fā)送和接受的數(shù)據(jù)相同,不同的是軟件配置方式。在Qt 中使用藍牙模塊需要在工程中引入bluetooth 模塊,并在源代碼中引入藍牙頭文件。使用藍牙通信方式與串口操作步驟基本相同。首先,需要打開藍牙并掃描附近藍牙設備。Qt 中的QBluetoothLocalDevice 提供了訪問本地藍牙的方法,可以用于獲取藍牙設備地址和名稱,設置設備的可見性用于其 它 設 備 連 接 。 同 QBluetoothLocalDevice 相 似 ,QBluetoothDeviceInfo 用于訪問遠程藍牙信息。我們可以使用QBluetoothDeviceDiscoveragent 自動搜索可連接范圍內的可見藍牙設備,當搜索到附近的藍牙設備后,QBluetoothDeviceDiscoveragent類會產(chǎn)生deviceDiscovered(QBluetoothDeviceInfo)信號,其次,通過對應的槽函數(shù)處理該信號即可。接著,建立藍牙設備之間的連接,并通過該連接使用虛擬串口建立藍牙socket 服務通信。QBluetoothSocket 類可以創(chuàng)建socket 對象,要注意的是在構造函數(shù)中的參數(shù)需要設定模式為RfcommProtocol 以模擬RS232 串口模式,通過connectToService 方法建立連接。同樣在socket 中也提供了豐富的信號,比如成功建立連接信號,成功斷開信號,可以定義槽函數(shù)處理這些信號。最后,發(fā)送和接受數(shù)據(jù)。當藍牙成功的建立連接后,就可以利用藍牙發(fā)送和接受數(shù)據(jù),使用socket 中的write方法可以將數(shù)據(jù)直接發(fā)送給單片機。當終端設備中接受到來自單片機得數(shù)據(jù)時,會產(chǎn)生readyRead()信號,我們只需要定義槽函數(shù)處理該信號即可。

1.3 自主航行模塊

本軟件中自主航行模塊主要完成的任務是當船員設置目標位置之后,船只能夠自助航行到該目標位置。Qt 終端主要完成船只航行定位和設置目標位置兩種功能。

要實現(xiàn)船只的自主航行功能,首先很重要的一點是利用GPS信號對船只定位,并且需要獲得船只航行方向和速度等基本信息。單片機中包含有GPS 模塊,用于接受GPS 信號,常用的GPS 模塊大多采用NMEA-0183 協(xié)議,在Qt 中我們需要做的是從GPS 信號中解析出這些基本信息后進行終端顯示。這里我們主要利用GPS推薦定位信息輸出語句($GPRMC),下面是一幀GPS定位的主要數(shù)據(jù),其標準格式為:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12> * hh

該項目主要需要使用的是:<3> 緯度(格式為ddmm. mmmm,即dd 度,mm. mm mm 分);<5>經(jīng)度(格式為dddmm. mmmm,即ddd 度,mm. mmmm 分);(7)地面速率(000.0~999.9 節(jié));(8)地面航向(000.0~359.9 度,以真北為參考基準)。當成功提取出這些信息后,就可以利用QML中得控件將它們顯示到Qt 終端,具體顯示方法可以參考2.1 中的航行信息模塊。

設置目標位置時需要從地圖中選擇要到達的目標位置,軟件會給出目標位置的經(jīng)緯度,偏向和距離當前位置的相關信息,當確定相關信息后,船只會自動航行到目標位置。在Qt 中我們可以使用MapQuickItem元素將QML中得組件在地圖上展示,這里我們主要使用該組件顯示目標位置的標記。另外在用戶用鼠標點擊目標位置后,還需要獲得地圖上得坐標,Qt 中提供了不可見元素MouseArea 來實現(xiàn),該元素可以設置鼠標作用域,在此作用域內可以用于響應鼠標點擊事件,并產(chǎn)生點擊信號,這里我們處理的是onPressed 信號,通過該信號我們可以獲得當前鼠標得坐標位置,然后使用map 對象中的toCoordinate 方法將獲得的坐標位置轉換為經(jīng)緯度信息。有了目標位置的經(jīng)緯度信息之后就可以根據(jù)當前船只所在的位置信息和Haversine 公式[6]計算出目標位置距離和航向角。在船只自主航行時,會根據(jù)航向角調整船只航行方向。

2 軟件測試

本軟件系統(tǒng)在測試中需要使用到底層單片機硬件環(huán)境,主要用于Qt 軟件終端從單片機中接受GPS 信號并能夠向單片機中寫入信息以實現(xiàn)控制。本軟件設計和實現(xiàn)各個模塊過程中已經(jīng)對這些子模塊進行了調試,各模塊基本符合要求,使用Qt5 設計的自助導航顯控界面如圖3 所示。最后開發(fā)過程中的模擬實驗以及真實環(huán)境下的實際應用,信息顯示、界面操控以及系統(tǒng)的穩(wěn)定性完全能滿足船用導航各方面的需要。

圖3 基于Qt 的自主航行終端界面

3 結論

本文詳細介紹了使用Qt5 設計自主航行終端的基本過程,包括用戶界面設計、數(shù)據(jù)通信模塊、自主航行模塊等,實現(xiàn)了船只定位,自主導航等功能。通過實驗模擬和實際應用發(fā)現(xiàn),使用Qt 設計終端界面上的顯示功能及該系統(tǒng)性能完全滿足船用導航終端的需求。然而要實現(xiàn)一個功能完善、界面友好的導航系統(tǒng)還有很多工作要做,本系統(tǒng)還有很多不足,例如可以依據(jù)實際的用戶需求,豐富界面外觀,完善導航系統(tǒng),加入語音提示以及利用多種傳感器設備為用戶提供更多、更方便的導航信息等。

猜你喜歡
插件船只串口
基于NPORT的地面綜合氣象觀測系統(tǒng)通信測試方法及故障處理
基于API函數(shù)庫實現(xiàn)串口數(shù)據(jù)通信的分析與設計
基于EM9000工控板高性能雙串口通信模型設計與實現(xiàn)
自編插件完善App Inventor與樂高機器人通信
基于OSGi的軍用指揮軟件插件機制研究
船舶電子設備串口數(shù)據(jù)的軟件共享方法
基于jQUerY的自定義插件開發(fā)
孟加拉船只“罷工”
插件體系結構軟件的原理和實現(xiàn)