• Lv0
    粉丝3

积分25 / 贡献0

提问0答案被采纳0文章1

作者动态

    [经验分享] 基于OpenHarmony的飞行仪表系统【游隼】 原创 精华

    ahhhhzhou 显示全部楼层 发表于 2023-12-1 16:06:05

    1 项目详情

    1.1项目背景

    ` `机载操作系统是典型的嵌入式操作系统,是现代航空机载电子设备的核心和基础,也是关系到飞行安全和飞机效能的关键性产品。如果说机载计算机是飞机的大脑,那么机载操作系统就是飞机的“灵魂”。长期以来我国航空工业一直使用的是国外机载操作系统,能否实现机载操作系统的完全自主可控,也常常被看作我国航空装备和本土大飞机能否实现自主化的标准之一。

    ` `面向2023开放原子开源大赛OpenHarmony创新赛——“以赛促用、以赛促教、以赛促学、以赛促练、以赛促创”的活动期望,南昌航空大学游隼小组聚焦OpenHarmony的新技术和新体验,创新性地提出将OpenHarmony与航空电子系统的工业应用进行技术融合,探索了基于OpenHarmony特性的飞行仪表系统新应用,延申了OpenHarmony开发的未来前景,同时“小仪表”也点亮了游隼小组“逐梦蓝天、航空报国”的大梦想。

    1.2项目名称

    项目名称:基于OpenHarmony的飞行仪表系统

    英文名称:OpenHarmony Flight Instrument System (OHFIS)

    项目简称:OHFIS系统

    1.3项目团队

    本项目团队由南昌航空大学软件学院软件工程专业五名2021级本科生组成,项目指导由南昌航空大学和北京软通动力教育科技有限公司联合指导。具体的队员和指导老师信息如下:

    队名 游隼

    队长 南昌航空大学软件工程专业2021级本科生 周子萌

    队员 南昌航空大学软件工程专业2021级本科生 王炫月

    队员 南昌航空大学软件工程专业2021级本科生 周畅

    队员 南昌航空大学软件工程专业2021级本科生 李传伟

    队员 南昌航空大学软件工程专业2021级本科生 陈焯楷

    指导老师 南昌航空大学软件学院副院长 樊鑫副教授

    指导老师 北京软通动力教育科技有限公司 首席架构师 夏德旺

    1.4项目前景

    ` `基于OpenHarmony的飞行仪表系统(OHFIS系统)的仪表选型均来自真实飞行器的仪表系统,并实现了高度仿真,能够为航空业余爱好者带来沉浸式模拟飞行体验。此外,团队拟将OHFIS用于青少年的航空兴趣日和开放日等活动,使OHFIS成为向公众普及航空知识和技术的重要载体;如果OHFIS系统未来嵌入飞行器标准飞行程序的操作逻辑,也可以为飞行教学、训练提供重要的辅助功能;同时也希望未来OHFIS能够服务于未来城市空中交通工具,赋能本土航空器,助力中国航空产业发展。

    1.5程序约束限制

    (1)OHFIS仅支持标准系统上运行。

    (2)OHFIS为Stage模型,支持API version 9版本SDK。

    (3)OHFIS需要使用OpenAtom OpenHarmony 3.2 Release版本进行编译运行。

    (4)OHFIS需要配合开源模拟飞行软件Flight Gear使用。

    1.6项目主要模块

    1.6.1飞行仪表UI部分——机械表部分

    参考机型:Robin DR400<br />

    InstrumentMechanical.png

    1. 空速表

    空速表实机截图<br />

    1InstrumentMechanical.png

    空速表是用来显示飞机相对于空气的速度,即空速。 它由内外两圈刻度组成。外圈的刻度单位是千米每小时(KM/HR)。绿色区域表示正常飞行并允许进行机动飞行的速度范围;白色区域表示放下襟翼后可以操作的速度范围;黄色区域表示只能在静风条件下进行平飞的速度,范围内任何机动飞行或气流可能导致飞机超速;红线代表不可越过的速度极限,超过此红线可能导致飞机因超速而空中解体。内圈的刻度单位是节(KNOTS,缩写为Kt)。示数范围是30~170节。(1Kt=1n mile/hr=1.852km/hr)

    2. 姿态仪

    姿态仪实机截图<br />

    2InstrumentMechanical.png

    姿态仪显示飞机的坡度(横滚角)和俯仰角的方向和大小, 单位是度(°)。姿态仪的示数分为两部分,外圈的白色标线表示飞机的坡度(横滚角)部分,内部表盘表示飞机的俯仰角部分。姿态仪的飞机坡度刻度示数范围是-90-90度,飞机的俯仰角刻度示数范围是-20~20度。当飞机爬升时,内部表盘的蓝色天空部分增多,褐色地面部分减少,内部天地线下降,外部天地线保持在中间位置,与内部天地线错开;当飞机下降时,内部表盘的蓝色天空部分减少,褐色地面部分增多,内部天地线上升,外部天地线同样保持在中间位置,与内部天地线错开。

    3. 高度表

    高度表实机截图<br /> 3InstrumentMechanical.png

    高度表显示飞机相对于标准大气平面的高度, 单位是英尺(FEET)。定义海平面的气压29.92英寸汞柱对应的高度为0,当气压低于该值时,高度示数为正;当气压高于该值时,高度示数为负。高度仪内部表盘的左右两侧各有一块小表,用来显示大气压力值,左侧小表的单位是毫巴,右侧小表的单位是英寸汞柱。不同国家使用不同单位来表示机场的大气压力。例如,在中国的机场情报资料中,使用毫巴作为单位,而美国或X-Plane则使用英寸汞柱作为单位。由于不同机场所在的海拔高度不同,在长途飞行中,尤其是起飞和降落机场的海拔高度存在较大差异时,需要根据飞行的实际地理位置调整高度仪。

    4. 垂直速度表

    垂直速率表实机截图<br />

    4InstrumentMechanical.png

    垂直速度表显示飞机在垂直方向上的速度方向和大小, 单位是每分钟百英尺(100 FEET PER MINUTE)。指针默认指向左侧中间,示数为0位置,表示飞机水平飞行。当飞机爬升时,指针向上转,最大转到右侧上部的20,表示每分钟爬升2000英尺;当飞机下降时,指针向下转,最大转到右侧下部的20,表示每分钟下降2000英尺。

    5. 航向仪

    航向仪实机截图<br /> 5InstrumentMechanical.png

    航向仪用来显示飞机的实际航向, 单位是度(°)。两个长刻度之间间隔为10度,即一个单位标识;两个长刻度之间有一个短线,表示5度。0度代表磁北极;0度也同样代表360度;90度表示磁北极的东方向;180度表示磁北极的南方向;270度表示磁北极的西方向。

    6. 转弯侧滑仪

    转弯侧滑仪实机截图<br />

    6InstrumentMechanical.png

    转弯侧滑仪用于指示飞机的转弯方向、转弯速度以及侧滑方向和侧滑程度, 单位是度/秒(°/s)。表中的L/R标志表示标准转弯角度(20度),在该倾斜角度下,飞机以每秒3度的标准转弯速度进行转弯,完成一周需要2分钟(2min)。可滑动的小球指示飞机的侧滑状态,小球在右侧表示右侧滑,小球在左侧表示左侧滑。

    1.6.2飞行仪表UI部分——主飞行显示器部分

    参考机型:波音737-800<br /> PFD.png

    主飞行显示器(PFD)

    PFD(Primary Flight Display)是主飞行显示器的英文简称。这是一个现代飞行器驾驶舱的核心设备,将飞行器的航行信息以数字、模拟或图形的形式呈现在飞行员面前。它通常会显示飞行器的姿态、航向、高度、速度、垂直速率和导航信息等。

    1. 空速标尺

    空速标尺实机图<br />

    1PFD.png

    空速指示显示大气数据惯性基准系统(ADIRS)空速,和来自飞机系统的与空速有关的信息。

    • 速度尺: 在一个移动的座标尺上显示ADIRU计算的空速。以数字读数方式显示当前空速。数字读数框指在速度尺上的值的位置,当空速低于30节时,显示30节(这里未实装)。
    • 马赫数(未实装): 以数字读数方式显示。当马赫数大于0.4时,显示在空速尺的下面。当马赫数低于0.38或者马赫数显示失效,没有该显示。
    • 速度趋势向量(未实装): 根据当前的加速度或减速度,速度趋势向量显示10秒钟的预估空速。当空速度趋势大于4.5节时,显示向量。
    • 选定的速度/选定的马赫数: 有一个选定速度游标和一个数字读数。选定速度或马赫数是驾驶员在方式控制面板(MCP)上选定的值,或是FMC计算的值。在速度尺上游标指向选定的速度。在速度尺上的数字读数显示选定的速度或选定的马赫数。当选定的速度或马赫数不在尺上时,游标只有一半在速度尺的顶部或底部。

    2. 姿态显示

    姿态显示实机图<br /> 2PFD.png

    姿态指示器可以分为四个部分,分别是飞机符号、俯仰角刻度尺,坡度显示器以及无线电高显示。

    • 飞机符号: 由一个方形和两个L形标志组成,其中方形表示机鼻,而两侧的L形标志表示飞机的机翼。飞机符号的位置不会改变,总是固定在姿态指示器中央。
    • 俯仰角刻度尺: 俯仰角刻度标尺的指示表示飞机的俯仰状态以及俯仰角大小,最大量程为90度,最小刻度为2.5度。蓝色表示天空;棕色表示大地。飞机符号指示的标尺刻度位置表示俯仰角的读数。
    • 坡度(横滚角)显示器: 坡度(横滚角)显示器的指示表示飞机的横滚状态以及横滚角大小。坡度刻度是坡度(横滚角)指针的固定基准,刻度标记为0,10,20,30,45,60。坡度(横滚角)指针指示机翼的水平方向。指示范围达2Π。在坡度指针下方有方形表示侧滑指示,指示内外侧滑。
    • 无线电高度显示: 无线电高度显示是一种使用无线电波测量飞机距离地面实际高度的仪器。这种实际高度被称为无线电高度或雷达高度。这种测量通常在飞机距离地面较低的高度(一般在2500英尺或更低)时使用。

    3. 高度指示

    高度显示实机图<br />

    3PFD.png

    高度指示显示大气高度,该高度来自大气数据惯性基准系统(ADIRS),也显示来自各系统的其他相关高度信息。

    • 高度尺: 在一个移动座标尺上显示气压高度。它可以显示806英尺的范围间隔,当前高度显示数字读数框内。数字读数框指向高度尺上的数值。
    • 选定的高度和高度警戒: 一个选定高度游标和数字读数。驾驶员使用方式控制面板设置选定高度。游标指向高度尺上的选定高度。当选定高度不在尺上时,只在高度尺的顶部或底部显示半个游标。选定高度数字读数显示在高度尺上方。当飞机接近选定高度时,有高度警戒。有高度警戒时,在选定的高度数字读数四周显示白色的框。
    • 着陆高度指示: 着陆高度在高度尺上以截面线区域来显示。在接地前,着陆高度基准标显示高度。从高于着陆高度的0到500英尺,杆是琥珀色(目前未实装)。从500到1000英尺,杆是白色。
    • 气压基准高度: 从EFIS控制板上选定气压基准高度,并显示在高度尺下面。如果以英寸为单位选定气压基准高度,IN显示在数字气压基准值旁。如果以百帕为单位选定气压基准高度,HPA显示在数字气压基准值旁。如果选择标准的气压基准,显示STD。

    4. 航向指示

    航向指示实机图<br />

    4PFD.png

    航向指示显示在主飞行显示(PFD)底部的部分罗盘上。

    • 航向和航迹: 当前航向用一个三角指针显示在罗盘的顶部。航迹显示是一条从罗盘中心延伸的直线。相对于真或磁北的航向以MAG或TRU指示。
    • 选定的航向: 用一个游标和读数显示选定的航向。使用方式控制面板设置选定的航向。

    5. 垂直速度指示

    垂直速度实机图<br />

    5PFD.png

    垂直速度指示显示来自大气数据基准系统(ADIRU)的垂直速度。

    • 垂直速度用白色指针指在速度尺上显示。 如果垂直速度大于400英尺/分钟,垂直速度显示数字值。如果是正的垂直速度,数字值显示在垂直速度尺上方。如果是负的垂直速度,数字值显示在垂直速度尺下方。有一个选定垂直速度游标。使用方式控制板设置选定的垂直速度。

    1.6.3历史数据分析

    ` `我们加入了历史数据分析功能对过往部分飞行数据进行存储并利用二维折线图根据时间列排序进行可视化展示。该功能旨在为用户提供更好的复盘体验,帮助用户更直观地查看飞行数据,以便于发现历史飞行过程中可能存在的问题。

    Image2.png

    • 实现方式:

    ` `使用OpenHarmony的数据库进行数据存储。首先,在前端应用中,通过与模拟飞行器设备建立连接,定时获取飞行历史高度和速度数据,并将其传输到后台。后台应用使用OpenHarmony的数据库技术,将接收到的数据存储在数据库中,当用户需要查看历史数据时,利用OpenHarmony的画布技术,根据存储的数据生成相应的数据图表。例如,可以绘制高度和速度曲线图,以直观地展示飞行历史数据。通过画布技术,可以对数据进行可视化处理,使用户能够更清晰地了解飞行历史的高度和速度变化。

    1.6.4帮助与详情

    Detail.jpg<br /> ` `为了让用户更加方便的了解各个仪表的用途与各分块的功能,我们贴心的在系统中加入帮助界面以满足一般用户的需求。用户可以通过点击仪表界面左上角按钮拉取功能列表,选择OHFIS APP旁的详情按钮获取有关应用的相关信息。除此之外,在设置页面内也有对机械仪表和电子仪表的说明和功能介绍。

    1.6.5 自定义布局与单个仪表缩放

    ` `为满足广大用户的使用需求,我们的系统提供了自定义布局功能。在仪表布局下,用户可以通过长按仪表选中,拖动仪表到相应位置,以改变仪表的显示位置。同时,我们还提供了仪表缩放功能。用户可以双击某个仪表使其放大单独显示,使用户可以更加细致的观察到仪表显示的数据以及工作状态。

    2 项目特色

    2.1项目主要特色

    (1)项目与航空元素结合,延伸了OpenHarmony的应用场景

    ` `该系统旨在为OpenHarmony注入航空新动力,探索OpenHarmony在航空领域的潜能,推动OpenHarmony在航空工业领域的发展。我们以Robin DR400和波音737-800的仪表作为参考,高度还原仪表细节,给以用户更好的体验。

    (2)项目支撑高效开发,“一次开发,多端部署”

    ` `这个项目是基于OpenHarmony的,这意味着多终端软件平台API具备一致性,确保了用户程序的运行兼容性。一次开发就可以实现多端部署,大大提升了开发效率。不同终端设备运行飞行仪表系统时,可以享受到相同的使用体验。同时,OpenHarmony的这一特性也使得飞行训练和模拟更具灵活性,可以在各种设备上进行,极大地方便了用户。

    (3)项目支持服务卡片,用户体验“自由流转”

    ` `OpenHarmony的服务卡片功能使我们的飞行仪表系统更加用户友好。这些服务卡片可以让用户在不需要完全打开应用程序的情况下,即可获取到关键的飞行数据,如气压高度、航向、空速等。这意味着,只需一瞥,用户就可以快速了解到飞行状态,极大提高了使用效率。此外,用户还可以根据需要自由定制这些服务卡片,更好地满足他们对信息获取的需求。这种“自由流转”的用户体验,无疑为飞行爱好者提供了巨大的便利。

    (4)项目支持多模块自由组合,仪表组件“可分可合”

    ` `我们的飞行仪表系统拥有多模块自由组合的特性。这意味着,不同的仪表组件可以根据具体的应用平台和功能需求进行自由组合。通过这种方式,我们的系统可以更好地适应各种不同的设备和使用场景,满足用户多样化的需求。

    (5)项目支持端云同步,“云认证”+“云存储”更方便

    ` `云作为数据的中心节点,通过与云的数据同步,实现数据云备份、同账号设备间的数据一致性。我们的系统允许用户将数据上传到云端进行备份和同步。这样一来,即使用户更换设备或在多个设备上使用我们的系统,他们的数据也能够得到保护和同步更新。

    2.2项目创新点

    (1)应用场景的创新:提出了OpenHarmony与航空仪表有机结合的开发方案

    ` `基于OpenHarmony万物互联的场景,将系统边界拓展到航空仪表系统中,利用OpenHarmony丰富的组件完成仪表的绘制。同时利用OpenHarmony一次开发多端部署的特性,适配了不同尺寸的设备,确保在各个尺寸的屏幕上都能拥有最佳体验。

    (2)降低canvas渲染压力的实现创新:提出了动静分离的canvas组件高效渲染的实现方案

    ` `系统将可以复用的部分保存为图片,每次渲染的新帧以保存好的图片为背景,在此基础上绘制下一帧,大大降低了每次更新帧所需的渲染量。

    (3)提高OpenHarmony的UI响应能力的实现创新:提出了一种异步按需的组件渲染方案

    ` `在收到新的数据包时,与上一次收到的数据进行比较,若差异较小则此次不进行渲染,降低总体所需的渲染量。确定所需渲染的部分后,对所有需要渲染的部分进行异步渲染,没渲染好一部分组件立即将渲染好的部分绘制到UI中,无需等待此次所有需更新部分完成绘制后才进行更新。

    3 OpenHarmony使用情况概述

    (1)项目仅使用Arkts语言进行开发

    ` `在此项目中,我们仅使用ArkTS语言进行开发。ArkTS是一种扩展了TypeScript的UI开发语言,其丰富的特性和功能满足了我们项目的全部开发需求。ArkTS的声明式开发范式以及优秀的状态数据管理功能,使得我们能够有效地构建整个应用的数据更新和UI渲染过程。利用ArkTS,我们实现了代码的简洁与高效,且保证了应用的性能优越。这一切都证明了ArkTS语言的强大能力和极高的灵活性。

    (2)应用OpenHarmony的离屏渲染组件,完成所有仪表的原生绘制

    ` `我们在项目中应用了OpenHarmony的OffscreenCanvas组件来完成所有仪表的原生绘制。OffscreenCanvas是OpenHarmony提供的一种离屏绘制组件,允许开发者在Canvas上进行离屏绘制,绘制对象包括矩形、文本、图片等。离屏绘制的优势在于,它将所有需要绘制的内容先绘制在缓存区,然后一次性转换成图片并绘制到canvas上,从而显著提升了绘制速度。这项技术自ArkTS API version 9开始,已经被支持在ArkTS卡片中使用。通过这种方式,我们成功地高效地完成了所有航空仪表的原生绘制,为用户提供了极致的视觉体验。

    (3)应用OpenHarmony的栅格断点系统,实现响应式布局,适配多端屏幕

    ` `我们在项目中使用了OpenHarmony的栅格断点系统来实现响应式布局,从而能够适应多端屏幕的显示需求。栅格断点系统以设备的水平宽度作为依据,定义了不同设备对应的栅格列数,形成了一套完整的断点规则。这意味着不同的设备根据其当前水平宽度的大小,会显示不同数量的栅格。通过应用这套系统,我们的航空仪表系统可以根据设备的具体尺寸灵活地调整布局,无论终端设备屏幕的尺寸大小,都能提供优秀的用户体验。

    (4)应用OpenHarmony的堆叠容器组件,实现飞行操纵盘的叠加显示

    ` `我们在项目中运用OpenHarmony的堆叠容器组件(StackLayout)实现了飞行操纵盘叠加在仪表界面上的效果。堆叠布局允许元素间的重叠显示,子元素依次入栈,后入栈的元素会覆盖之前的元素。这对于我们的项目非常实用,因为我们需要将飞行操纵盘叠加在仪表界面上,通过这种方式,操纵盘和仪表可以在同一界面上同时呈现,提高了操作的便利性与界面的美观度。

    (5)应用OpenHarmony的socket组件,实现app与模拟飞行软件的数据通信

    ` `在我们的项目中,我们采用UDP协议,通过OpenHarmony的Socket组件获取模拟器飞行软件的各项数据,这为我们的仪表系统的运行提供了必要的支持。这种通信机制,确保了数据的实时更新,大大提升了我们的飞行模拟体验。

    4 项目中涉及的关键技术

    1. Canvas原生绘制:项目中所有的仪表全部是使用canvas代码绘制而成, 没有使用图片。
    2. 模块化的分包方式:项目使用common公共库和仪表组件库采用HAR组件库形式进行开发和复用。
    3. 一次开发多端部署适配:采用断点判断+栅格化布局+Flex布局等进行一套代码实现多终端设备不同页面布局的实现。
    4. 组件化编程:所有仪表做成独立组件,采用父子组件传参,并且使用watch监控方式实现canvas的重绘。
    5. 多线程编程与性能提升:所有仪表组件设计动静分离,静态部分一次性绘制并复用,动画部分采用数据绑定以及监听方式进行局部重绘刷新。
    6. udp网络通信方式:封装好网络通信工具类,OpenHarmony端仪表程序能够实时接收飞行模拟器的数据。
    7. 服务卡片运用:对每个飞行仪表制作一个服务卡片,用户可以根据喜好自定义卡片组合,提升用户体验。

    5 体系结构

    Image1.png

    6 项目相关的图片/照片

    主飞行显示器显示效果<br />

    PFD.jpg

    六块机械仪表显示效果<br /> Instruments.jpg

    六块机械仪表放大显示效果<br /> 1large.jpg 2large.jpg 3large.jpg 4large.jpg 5large.jpg 6large.jpg

    功能列表<br /> List.jpg

    7 演示视频

    https://pan.baidu.com/s/1QZCMm6bqJKvRJyGkj7DvMg 提取码:g6yh --来自百度网盘超级会员V3的分享

    8 结语

    非常荣幸能够名列OpenHarmony创新赛TOP10的榜单。我们诚挚希望各位大佬给予我们宝贵的一票,支持我们的创新项目。我们将不断努力改进和完善,为用户带来更好的模拟飞行体验。

    ©著作权归作者所有,转载或内容合作请联系作者

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    精彩评论2

    nhzzm

    沙发 发表于 2023-12-5 23:43:27
    大佬,你们的ui做得真的挺好看的,我是后端方向的,也在学习前端的过程,需要向你们学习

    17370028212

    发表于 2023-12-8 08:27  IP属地: - 中国江西省南昌市 中国电信IDC

    回复 nhzzm: 有机会可以多交流,一起进步

    【1 条回复】

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部