李競(jìng)擇, 范承宇, 歐陽(yáng)迪
(中國(guó)兵器裝備集團(tuán)自動(dòng)化研究所有限公司, 四川 綿陽(yáng)621000)
鴻蒙是華為開(kāi)發(fā)的一款基于微內(nèi)核的分布式操作系統(tǒng),旨在為全場(chǎng)景智能化提供統(tǒng)一的用戶體驗(yàn)[1]。鴻蒙的設(shè)計(jì)目標(biāo)是構(gòu)建一個(gè)通用的、無(wú)縫的全場(chǎng)景操作系統(tǒng),可以應(yīng)用于各種設(shè)備。 與傳統(tǒng)操作系統(tǒng)相比,鴻蒙采用了分布式架構(gòu),通過(guò)分布式能力的支持實(shí)現(xiàn)設(shè)備間的協(xié)同工作。
開(kāi)源鴻蒙提供了豐富的開(kāi)發(fā)工具和開(kāi)發(fā)者支持,使開(kāi)發(fā)者能夠輕松構(gòu)建基于鴻蒙的應(yīng)用和服務(wù)。 它具有統(tǒng)一的開(kāi)發(fā)框架和多設(shè)備適配能力, 使開(kāi)發(fā)者能夠更高效地開(kāi)發(fā)跨設(shè)備的應(yīng)用程序。
本文在開(kāi)源鴻蒙操作系統(tǒng)3.2R 版本下使用ArkUI開(kāi)發(fā)框架實(shí)現(xiàn)了一個(gè)智能裝備指控系統(tǒng)。
ArkUI 開(kāi)發(fā)框架是方舟開(kāi)發(fā)框架的簡(jiǎn)稱(chēng), 它是一套構(gòu)建開(kāi)源鴻蒙操作系統(tǒng)應(yīng)用界面的聲明式UI 開(kāi)發(fā)框架,它使用極簡(jiǎn)的UI 信息語(yǔ)法、豐富的UI 組件以及實(shí)時(shí)界面語(yǔ)言工具,幫助開(kāi)發(fā)者提升應(yīng)用界面開(kāi)發(fā)效率30%,開(kāi)發(fā)者只需要使用一套TypeScript/JavaScript API, 就能在多個(gè)開(kāi)源鴻蒙設(shè)備上提供既豐富又流暢的用戶界面體驗(yàn)[2]。
當(dāng)前,ArkTS 是TypeScript 的超集,它在TS 的基礎(chǔ)上主要擴(kuò)展了如下能力:
基本語(yǔ)法:ArkTS 開(kāi)創(chuàng)性地定義了聲明式UI 配合ArkUI 開(kāi)發(fā)框架中的系統(tǒng)組件及其相關(guān)的事件方法、屬性方法等共同構(gòu)成了UI 開(kāi)發(fā)的主體。
狀態(tài)管理:ArkTS 提供了多維度的狀態(tài)管理機(jī)制。 在UI 開(kāi)發(fā)框架中,與UI 相關(guān)聯(lián)的數(shù)據(jù)可以在組件內(nèi)使用,也可以在不同組件層級(jí)間傳遞,比如父子組件之間、爺孫組件之間,還可以在應(yīng)用全局范圍內(nèi)傳遞或跨設(shè)備傳遞。
渲染控制:ArkTS 提供了渲染控制的能力。 條件渲染(if-else)可根據(jù)應(yīng)用的不同狀態(tài),渲染對(duì)應(yīng)狀態(tài)下的UI內(nèi)容,常用于。 循環(huán)渲染(ForEach)可從數(shù)據(jù)源中迭代獲取數(shù)據(jù), 并在每次迭代過(guò)程中創(chuàng)建相應(yīng)的組件。 數(shù)據(jù)懶加載(LazyForEach)從數(shù)據(jù)源中按需迭代數(shù)據(jù),并在每次迭代過(guò)程中創(chuàng)建相應(yīng)的組件。
ArkTS 開(kāi)發(fā)框架如圖1 所示。
圖1 ArkTS 開(kāi)發(fā)框架
開(kāi)源鴻蒙應(yīng)用開(kāi)發(fā)可以選擇兩種開(kāi)發(fā)模型, 分別是FA 模型和Stage 模型。
OpenHarmony API 8 及其更早版本的應(yīng)用程序只能使用FA 模型進(jìn)行開(kāi)發(fā)。
Stage 模型是API9 推出后新的開(kāi)發(fā)模型。 其被設(shè)計(jì)出來(lái)就是為了讓開(kāi)發(fā)者能更加方便地開(kāi)發(fā)出分布式環(huán)境的復(fù)雜應(yīng)用,下表是Stage 模型和FA 模型的差異。
表1 FA 模型和Stage 模型對(duì)比
需要注意的是,開(kāi)源鴻蒙更新至3.2Release 之后,API也更新至API9,開(kāi)發(fā)者只能選擇Stage 模型進(jìn)行開(kāi)發(fā)。
無(wú)人機(jī)系統(tǒng)平臺(tái)的UI 主要由三個(gè)部分構(gòu)成:無(wú)人機(jī)飛行計(jì)劃界面、無(wú)人機(jī)任務(wù)計(jì)劃界面、無(wú)人機(jī)參數(shù)調(diào)節(jié)界面。 如圖2 所示。
圖2 系統(tǒng)設(shè)計(jì)方案
主界面作為用戶點(diǎn)開(kāi)APP 后進(jìn)入的第一個(gè)界面應(yīng)該是簡(jiǎn)潔明了的。
主界面構(gòu)成包括兩部分,一是屏幕正上方的功能欄,二是功能欄下方的視頻區(qū)域。 如圖3 所示。
圖3 登錄界面
用戶點(diǎn)擊功能欄上的按鈕后, 下方視頻界面上會(huì)出現(xiàn)響應(yīng)功能界面。
飛行計(jì)劃界面作為該APP 最為關(guān)鍵的一個(gè)部分,承擔(dān)了APP 的絕大部分功能,包括:小地圖顯示、 無(wú)人機(jī)當(dāng)前位置信息查看和無(wú)人機(jī)飛行計(jì)劃更改及命令發(fā)送。
用戶點(diǎn)擊APP 上方的飛行按鍵后,該界面會(huì)由軟件下方浮現(xiàn)。如圖4 所示。
圖4 整體概覽
飛行計(jì)劃包括4個(gè)部分:小地圖、無(wú)人機(jī)位置信息、無(wú)人機(jī)飛行模式及速度修改和無(wú)人機(jī)命令發(fā)送。
小地圖區(qū)域包括一個(gè)地圖和一個(gè)雷達(dá)組件, 地圖目前使用二維地形圖,雷達(dá)組件為自定義組件。
任務(wù)計(jì)劃界面旨在為用戶提供一個(gè)可以自定義無(wú)人機(jī)飛行計(jì)劃的區(qū)域,由3 個(gè)部分構(gòu)成:無(wú)人機(jī)計(jì)劃展示、快捷鍵和勾選區(qū)域構(gòu)成。
任務(wù)計(jì)劃界面如圖5 所示。
圖5 任務(wù)計(jì)劃界面
無(wú)人機(jī)計(jì)劃展示為用戶展示了無(wú)人機(jī)的經(jīng)緯度信息、無(wú)人機(jī)高度信息、無(wú)人機(jī)距目標(biāo)地距離等,用戶可以通過(guò)加載已有的計(jì)劃來(lái)更新這些數(shù)據(jù), 也可以通過(guò)鍵盤(pán)輸入數(shù)據(jù)并保存。
數(shù)據(jù)展示由一個(gè)Text 組件和一個(gè)TextInput 組件組成, 通過(guò)特質(zhì)的圖片和.backgroundColor 為數(shù)據(jù)讀寫(xiě)區(qū)進(jìn)行渲染調(diào)色,部分代碼如下所示:
按鍵包括:讀取任務(wù)計(jì)劃鍵、上傳任務(wù)計(jì)劃鍵、清除任務(wù)計(jì)劃鍵、讀取視頻流地址鍵、加載地圖文件鍵和獲取家的位置。
其中讀取、上傳、加載鍵用戶點(diǎn)擊后會(huì)在屏幕中間彈出一個(gè)輸入框用于輸入文件地址。 部分代碼如下所示:
勾選區(qū)域由一個(gè)地圖選擇下拉菜單和勾選項(xiàng)構(gòu)成,下拉菜單選用自定義下來(lái)菜單,實(shí)現(xiàn)邏輯如圖6 所示。
圖6 下拉菜單邏輯
勾選組件由開(kāi)源鴻蒙官方組件中的checkBox 實(shí)現(xiàn),當(dāng)用戶勾選了某個(gè)選擇框后,會(huì)觸發(fā).onChange 事件并通過(guò)udp 通信傳遞給無(wú)人機(jī)。
用戶點(diǎn)擊功能欄后的參數(shù)調(diào)節(jié)按鍵后, 會(huì)在視頻界面上方出現(xiàn)一個(gè)參數(shù)調(diào)節(jié)界面用于調(diào)節(jié)無(wú)人機(jī)參數(shù),用戶可以通過(guò)直接輸入數(shù)值來(lái)調(diào)節(jié)無(wú)人機(jī)的油門(mén)量和轉(zhuǎn)動(dòng)時(shí)間,也可以通過(guò)拉動(dòng)調(diào)節(jié)無(wú)人機(jī)的電機(jī)工作速率。
參數(shù)調(diào)節(jié)界面如圖7 所示。
圖7 參數(shù)調(diào)節(jié)界面
部分代碼如下所示:
為減少主界面代碼并且方便調(diào)試, 通常將需要反復(fù)使用的組件進(jìn)行模塊化處理方便調(diào)用。
本文提供了許多自定義的模塊, 希望能給廣大開(kāi)發(fā)者提供一些開(kāi)發(fā)思路。
官方提供了一個(gè)下拉組件Select 供開(kāi)發(fā)者使用,但Select 可供修改的屬性較少,若開(kāi)發(fā)者想自定義一個(gè)邊框則需要自己做一個(gè)下拉組件框架。
本文設(shè)計(jì)的下拉選擇模塊如圖8 所示。
圖8 自定義下拉選擇組件
下拉選擇組件的實(shí)現(xiàn)邏輯是:點(diǎn)擊下拉按鈕后出現(xiàn)一個(gè)下拉菜單,里面是可選擇的幾個(gè)選項(xiàng),選擇后按鈕的文本變?yōu)閯倓傔x中的選項(xiàng)的文本,然后下拉菜單邊框消失。
一個(gè)下拉選擇組件應(yīng)該包括的基本要素應(yīng)該有:下拉按鈕本身圖片資源“selectedImage”、下拉菜單項(xiàng)圖片資源“optionImage”、下拉菜單文本“selectedText”、下拉菜單顯隱“optionVisible”,其他屬性包括各種邊框的寬高等屬性這里不做贅述,開(kāi)發(fā)者可以根據(jù)自己的喜好進(jìn)行添加。
雷達(dá)是一種利用電磁波進(jìn)行探測(cè)和測(cè)距的技術(shù)。 在UI 中雷達(dá)通常有一個(gè)掃描波和掃描點(diǎn)構(gòu)成。 雷達(dá)作為軍事應(yīng)用中必不可少的一環(huán)常出現(xiàn)于各種顯控應(yīng)用中。
該模塊實(shí)現(xiàn)邏輯為:使用Row 組件中的.sweepGradient 屬性繪制扇形并設(shè)置漸變屬性, 同時(shí)通過(guò).rotate 屬性配合.animation 顯式動(dòng)畫(huà)來(lái)達(dá)到一個(gè)掃描的效果,部分代碼如下所示:
開(kāi)源鴻蒙是華為對(duì)標(biāo)安卓開(kāi)發(fā)的一款開(kāi)源操作系統(tǒng),旨在為中國(guó)開(kāi)發(fā)者提供一個(gè)良好的、可持續(xù)性發(fā)展的開(kāi)源開(kāi)發(fā)環(huán)境。
鴻蒙系統(tǒng)的開(kāi)源是一個(gè)長(zhǎng)期的、 持續(xù)的、 開(kāi)放的過(guò)程,需要全球開(kāi)發(fā)者和合作伙伴的廣泛參與和支持。目前越來(lái)越多的芯片開(kāi)始適配支持開(kāi)源鴻蒙, 包括但不限于RK3568、RK3588 等。
過(guò)去的鴻蒙應(yīng)用開(kāi)發(fā)和安卓類(lèi)似,都是以Java 為主。自2023 開(kāi)源鴻蒙開(kāi)發(fā)者大會(huì)召開(kāi)之后,鴻蒙應(yīng)用開(kāi)發(fā)和開(kāi)源鴻蒙應(yīng)用開(kāi)發(fā)之間的隔閡被打破了, 開(kāi)發(fā)者可以使用ArkTS 語(yǔ)言同時(shí)為兩款操作系統(tǒng)進(jìn)行應(yīng)用開(kāi)發(fā)。
本文使用ArkTS 開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)了一款無(wú)人機(jī)系統(tǒng)平臺(tái), 使用ArkUI 獨(dú)有的聲明式開(kāi)發(fā)方式進(jìn)行了一系列創(chuàng)新性的組件開(kāi)發(fā), 希望為廣大ArkTS 開(kāi)發(fā)者提供一些新的思路。
相信隨著未來(lái)相關(guān)技術(shù)水平的不斷提高,ArkTS 語(yǔ)言也會(huì)不斷進(jìn)步。