亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2020-11-30 06:53:50陳珍銳
        科學(xué)技術(shù)創(chuàng)新 2020年34期
        關(guān)鍵詞:單片機(jī)信息

        陳珍銳 劉 鑫

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

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

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

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

        1 系統(tǒng)設(shè)計

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

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

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

        圖2 基本流程圖

        1.1 用戶界面設(shè)計

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        1.3 自主航行模塊

        本軟件中自主航行模塊主要完成的任務(wù)是當(dāng)船員設(shè)置目標(biāo)位置之后,船只能夠自助航行到該目標(biāo)位置。Qt 終端主要完成船只航行定位和設(shè)置目標(biāo)位置兩種功能。

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

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

        該項(xiàng)目主要需要使用的是:<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 度,以真北為參考基準(zhǔn))。當(dāng)成功提取出這些信息后,就可以利用QML中得控件將它們顯示到Qt 終端,具體顯示方法可以參考2.1 中的航行信息模塊。

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

        2 軟件測試

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

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

        3 結(jié)論

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

        猜你喜歡
        單片機(jī)信息
        基于單片機(jī)的SPWM控制逆變器的設(shè)計與實(shí)現(xiàn)
        電子制作(2019年13期)2020-01-14 03:15:28
        基于單片機(jī)的層次漸變暖燈的研究
        電子制作(2019年15期)2019-08-27 01:12:10
        基于單片機(jī)的便捷式LCF測量儀
        電子制作(2019年9期)2019-05-30 09:42:02
        小議PLC與單片機(jī)之間的串行通信及應(yīng)用
        電子制作(2018年12期)2018-08-01 00:48:04
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        基于單片機(jī)的平衡控制系統(tǒng)設(shè)計
        電子制作(2017年19期)2017-02-02 07:08:27
        Microchip推出兩個全新PIC單片機(jī)系列
        展會信息
        中外會展(2014年4期)2014-11-27 07:46:46
        信息
        健康信息
        祝您健康(1987年3期)1987-12-30 09:52:32
        伊人狠狠色j香婷婷综合| 影音先锋色小姐| 国产suv精品一区二区883| 欧美日韩亚洲成色二本道三区| 日本少妇比比中文字幕| 亚洲国产精品国自拍av| 精品国产av一区二区三区| 在线播放国产一区二区三区| 亚洲AV成人无码天堂| 亚洲一区二区在线观看av| 中文字幕亚洲综合久久菠萝蜜| 少妇被爽到高潮动态图| 国产成人一区二区三区高清| 亚洲美女主播内射在线| 中文字幕人妻熟女人妻| 丰满少妇愉情中文字幕18禁片| 九九精品国产99精品| 麻豆国产av在线观看| 亚洲av无码久久精品色欲| 四虎永久免费一级毛片| 亚洲免费成年女性毛视频| 亚洲色图三级在线观看| 无码国模国产在线观看| 亚洲AV毛片无码成人区httP | 97中文字幕一区二区| 日本一区二区在线免费视频| 国产精品无码午夜福利| 亚洲AV无码成人精品区网页| 日韩视频午夜在线观看| 日日摸夜夜添夜夜添高潮喷水| 午夜精品久久久久久中宇| 亚洲AVAv电影AV天堂18禁| 中文字幕亚洲在线第一页| 欧美人伦禁忌dvd放荡欲情| 欧美黄色免费看| 精品在线亚洲一区二区三区 | 日本免费a级毛一片| 久久国产亚洲高清观看5388| 麻豆av毛片在线观看| 伊人久久精品无码二区麻豆| 久久精品国产9久久综合|