基于状态机图的无人机飞行模式的C++代码生成方法技术

技术编号:25438466 阅读:24 留言:0更新日期:2020-08-28 22:26
本发明专利技术提出了一种基于状态机图的无人机飞行模式的C++代码生成方法,用于解决现有技术中存在的代码生成方法不贴合于无人机平台,缺少代码转换方法,导致生成无人机代码的效率不高,生成代码的质量不足的问题。实现步骤为:制定无人机飞行控制系统各飞行模式的工作流程;构建无人机的框架SysML状态机图;基于框架SysML状态机图构建飞行模式m

【技术实现步骤摘要】
基于状态机图的无人机飞行模式的C++代码生成方法
本专利技术涉及软件开发领域,特别是涉及一种基于SysML状态机图的嵌入式系统软件的C++代码生成方法。
技术介绍
嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求功能、可靠性、成本、体积、功耗、环境等灵活裁剪软硬件模块的专用计算机系统,由于存储空间有限,因而要求软件代码紧凑、可靠,且对实时性有严格要求。目前,在嵌入式系统开发过程中使用的语言种类有很多,但仅有少数的几种语言得到了比较广泛的应用,主要有Ada、C/C++等。由于C++语言既具有汇编语言的效率,又具有高级语言的易编程性,所以是目前使用最广泛的嵌入式系统编程语言。一个优秀的C++代码程序逻辑应该是清晰的,这可以让漏洞难以隐藏,开发周期短并且高度模块化,易于扩展和维护。现有的C++代码生成方法分为使用文档开发和使用模型驱动开发两种,其中模型驱动开发,其基本思想是让开发中心从编程转移到高级别抽象中去,通过模型转成代码或其他构件来驱动部分或全部的自动化开发。模型驱动拥有开发快、降低成本、提高质量、可维护性高、可重用性好等优点,拥有很好的发展前景。但是如何建立一个贴合设计对象的模型是使用模型驱动开发中要首先考虑的问题。无人机的飞行控制系统就是一个典型的嵌入式系统,而无人机飞行模式就是飞行控制系统的核心。根据需求的不同,飞行模式分为依赖全球卫星定位系统的模式:Auto、Circle、Drift、FollowMe、Guided、Loiter、PosHold、RTL和Throw模式;不依赖全球卫星定位系统的模式:Acro、AltHold、Land、Sport和Stabilize模式。随着无人机的各项功能趋于完善,无人机飞行控制系统飞行模式作为一种实时控制系统,其复杂性也日益增加,这使得系统建模成为一项巨大的挑战。对于大多数系统,建模必须同时考虑连续时间和离散事件,而创建一个允许这两个因素之间同步和交互的验证环境就成了阻碍飞行控制系统发展的一大障碍。申请公布号为CN105242914A,名称为“基于模型驱动生成代码的方法及系统”c++的专利申请,公开了一种基于模型驱动生成代码的方法及系统,该专利的系统在数据模型层由数据库模型、模型架构以及代码模板三部分构成,在代码生成的过程中,由模型分析模块从数据库模型及操作模型中获取有编程人员所指定的模型对象,通过模板引擎根据这些对象调用对应的代码模板,最后,代码生成器负责清理这些模型对象之间的关系,并根据模板引擎产生最终的基于对象的代码。该专利技术使用的一种基于模型驱动生成代码的方法及系统积极性的代码生成模式,具有双向推导的代码生成机制,具有插件式的代码生成架构,有效提高了代码的效率和质量,但因为只提出了使用模型驱动生成C++代码的一般流程,不贴合无人机平台;对于使用何种图来进行模型驱动没有进行约束,缺少标准化设计流程;缺少详细的代码转换方法,需要设计者自行设计。这些都导致生成无人机代码的效率不高,生成代码的质量不足。
技术实现思路
本专利技术的目的在于克服上述现有技术存在的不足,提出了一种基于状态机图的无人机飞行模式的C++代码生成方法,用于解决现有技术中存在的代码生成方法不贴合无人机平台,缺少标准化设计流程,缺少详细的代码转换方法的问题。为实现上述目的,本专利技术采取的技术方案包括如下步骤:(1)制定无人机飞行控制系统各飞行模式的工作流程:(1a)根据无人机的不同任务需求,将无人机飞行控制系统的n个飞行模式划分为全球卫星导航定位系统飞行模式子集合M1和非全球卫星导航定位系统飞行模式子集合M2,其中M1中至少包含自动模式,M2中至少包含降落模式,并将M1和M2合并为无人机飞行控制系统飞行模式集合M,M={m1,m2,...,mi,...,mn},其中mi表示第i个飞行模式,1≤i≤n,n≥2,且M1∪M2=M,(1b)将每个飞行模式mi划分为数据获取模块、功能模块和控制信号传输模块,并根据每个飞行模式mi的任务需求制定mi所划分的三个模块的工作流程;(2)构建无人机的框架SysML状态机图:构建包括多个状态和各状态之间迁移的无人机框架SysML状态机图,多个状态包括初始化状态、结束状态、下降状态、数据获取复合状态、调库复合状态、模式复合状态以及控制复合状态,其中:初始化状态,用于对待生成的C++代码内部变量进行定义,该状态中的行为执行结束后无人机迁移至数据获取复合状态;结束状态,用于结束C++代码;下降状态,用于调用设定的下降函数完成无人机下降,该状态中的行为执行结束后迁移至结束状态;数据获取复合状态,包括连接伪状态和自写子状态,其中连接伪状态用于对从其他状态迁移至数据获取复合状态的事件进行判断,若需要调用代码库则迁移至调库复合状态中的传感库子状态,否则迁移至自写子状态;自写子状态用于代码设计人员手动编写数据获取C++代码以获取俯仰角、横滚角、偏航角速度、高度、油门和当前位置,当油门最低、升降速度小于预定值并且高度不超过预定值时,迁移至结束状态,该状态中的行为执行结束后迁移至模式复合状态的连接伪状态;调库复合状态,包括传感库子状态、核心库子状态、功能库子状态和接口库子状态;传感库子状态用于调用传感器代码库中的函数,以获取无人机姿态数据,该状态中的行为执行结束后迁移至数据获取复合状态中的自写子状态;核心库子状态用于调用帮助快速完成无人机飞行控制系统的计算工作代码库中的函数,该状态中的中的行为执行结束后转换至功能库子状态;功能库子状态用于调用快速完成无人机飞行模式mi的相应功能的代码库中的函数,该状态中的行为执行结束后迁移至模式复合状态的连接伪状态;接口库子状态用于使用无人机接口代码库中的函数以获得硬件接口,该状态中的行为执行结束后转换至控制复合状态中的位置管理器子状态;模式复合状态,包括连接伪状态、卫星导航子状态和非卫星导航子状态;连接伪状态用于对从其他状态迁移至模式复合状态的事件进行判断,若需要全球卫星导航系统辅助飞行的迁移至卫星导航子状态,否则迁移至非卫星导航子状态;卫星导航子状态用于使用调库复合状态中的传感库子状态得到的数据和数据获取复合状态中的自写子状态得到的目标点位置数据,如果通过全球卫星导航系统得到的位置信息和当前位置吻合则意味着到达目标位置,迁移至下降状态,否则迁移至调库复合状态中的接口库子状态,如果在卫星导航子状态中检测到飞行员发出了操作信号就转换至非卫星导航子状态;非卫星导航子状态用于接收飞行员操作,再通过使用已有库函数计算得到的数据或根据不同模式需求手写函数计算得到的目标点位置数据,该状态中的行为执行结束后迁移至调库复合状态中的接口库子状态;控制复合状态,包括位置控制器子状态、姿态控制器子状态和数据发送子状态;位置控制器子状态用于获取无人机竖直方向数据,该状态中的行为执行结束后结束后迁移至姿态控制器子状态;姿态控制器子状态用于期望数据调用库函数或自写函数的接口改变无人机姿态,该状态中的行为执行结束后转换至数据发送子状态;数据发送子状态用于向无人本文档来自技高网
...

【技术保护点】
1.一种基于状态机图的无人机飞行模式的C++代码生成方法,其特征在于,包括如下步骤:/n(1)制定无人机飞行控制系统各飞行模式的工作流程:/n(1a)根据无人机的不同任务需求,将无人机飞行控制系统的n个飞行模式划分为全球卫星导航定位系统飞行模式子集合M

【技术特征摘要】
1.一种基于状态机图的无人机飞行模式的C++代码生成方法,其特征在于,包括如下步骤:
(1)制定无人机飞行控制系统各飞行模式的工作流程:
(1a)根据无人机的不同任务需求,将无人机飞行控制系统的n个飞行模式划分为全球卫星导航定位系统飞行模式子集合M1和非全球卫星导航定位系统飞行模式子集合M2,其中M1中至少包含自动模式,M2中至少包含降落模式,并将M1和M2合并为无人机飞行控制系统飞行模式集合M,M={m1,m2,...,mi,...,mn},其中mi表示第i个飞行模式,1≤i≤n,n≥2,且
(1b)将每个飞行模式mi划分为数据获取模块、功能模块和控制信号传输模块,并根据每个飞行模式mi的任务需求制定mi所划分的三个模块的工作流程;
(2)构建无人机的框架SysML状态机图:
构建包括多个状态和各状态之间迁移的无人机框架SysML状态机图,多个状态包括初始化状态、结束状态、下降状态、数据获取复合状态、调库复合状态、模式复合状态以及控制复合状态,其中:
初始化状态,用于对待生成的C++代码内部变量进行定义,该状态中的行为执行结束后无人机迁移至数据获取复合状态;
结束状态,用于结束C++代码;
下降状态,用于调用设定的下降函数完成无人机下降,该状态中的行为执行结束后迁移至结束状态;
数据获取复合状态,包括连接伪状态和自写子状态,其中连接伪状态用于对从其他状态迁移至数据获取复合状态的事件进行判断,若需要调用代码库则迁移至调库复合状态中的传感库子状态,否则迁移至自写子状态;自写子状态用于代码设计人员手动编写数据获取C++代码以获取俯仰角、横滚角、偏航角速度、高度、油门和当前位置,当油门最低、升降速度小于预定值并且高度不超过预定值时,迁移至结束状态,该状态中的行为执行结束后迁移至模式复合状态的连接伪状态;
调库复合状态,包括传感库子状态、核心库子状态、功能库子状态和接口库子状态;传感库子状态用于调用传感器代码库中的函数,以获取无人机姿态数据,该状态中的行为执行结束后迁移至数据获取复合状态中的自写子状态;核心库子状态用于调用帮助快速完成无人机飞行控制系统的计算工作代码库中的函数,该状态中的中的行为执行结束后转换至功能库子状态;功能库子状态用于调用快速完成无人机飞行模式mi的相应功能的代码库中的函数,该状态中的行为执行结束后迁移至模式复合状态的连接伪状态;接口库子状态用于使用无人机接口代码库中的函数以获得硬件接口,该状态中的行为执行结束后转换至控制复合状态中的位置管理器子状态;
模式复合状态,包括连接伪状态、卫星导航子状态和非卫星导航子状态;连接伪状态用于对从其他状态迁移至模式复合状态的事件进行判断,若需要全球卫星导航系统辅助飞行的迁移至卫星导航子状态,否则迁移至非卫星导航子状态;卫星导航子状态用于使用调库复合状态中的传感库子状态得到的数据和数据获取复合状态中的自写子状态得到的目标点位置数据,如果通过全球卫星导航系统得到的位置信息和当前位置吻合则意味着到达目标位置,迁移至下降状态,否则迁移至调库复合状态中的接口库子状态,如果在卫星导航子状态中检测到飞行员发出了操作信号就转换至非卫星导航子状态;非卫星导航子状态用于接收飞行员操作,再通过使用已有库函数计算得到的数据或根据不同模式需求手写函数计算得到的目标点位置数据,该状态中的行为执行结束后迁移至调库复合状态中的接口库子状态;
控制复合状态,包括位置控制器子状态、姿态控制器子状态和数据发送子状态;位置控制器子状态用于获取无人机竖直方向数据,该状态中的行为执行结束后结束后迁移至姿态控制器子状态;姿态控制器子状态用于期望数据调用库函数或自写函数的接口改变无人机姿态,该状态中的行为执行结束后转换至数据发送子状态;数据发送子状态用于向无人机操作员发送结果数据,该状态中的行为执行结束后转换至数据获取复合状态中的连接伪状态;
(3)基于框架SysML状态机图构建飞行模式mi的子SysML状态机图:
根据每个飞行模式mi中三个模块的工作流程为框架SysML状态机图中的每个子状态添加行为和事件,得到与n个飞行模式对应的n个子SysML状态机图T={t1,t2,...,ti,...,tn};
(4)获取每个飞行模式mi的XMI文件:
通过papyrus软件,将每个飞行模式mi对应的子SysML状态机图ti转化为XMI文件X={x1,x2,...,xi,...,xn};
(5)制定层次性代码生成规则:
(5a)制定层次性代码生成规则的第一层代码生成规则:
(5a1)对XMI文件xi逐行查找以<packagedElementname="name*">中name*命名一个接口类,作为外界访问此状态机图的接口,在该接口类中定义各个状态的state变量,接口类的初始化函数中包括各个状态机图中的状态的state变量初始化,以及接口类state的默认定义用来确定初始状态,其次该类中包括状态机图中所有<transitionxmi:type="uml:Transition"xmi:id="*"name="*"source="*"target="*"/>事件的定义;
(5a2)建立一个以<packagedElementname="name*">中name*加state命名的用于接口类访问内部状态的具体接口的抽象类,此抽象类中包含(5a1)定义的接口类的变量context,抽象类的初始化函数的形参为(5a1)定义接口类变量,以d命名,在该初始化函数内部定义context=d,在该抽象类中包含ti中所有事件的声明,事件具体的实现由继承于该抽象类的子类来完成;
(5a3)在(5a1)定义的接口类中加入一个由(5a2)定义的抽象类state变量,用来记录当前状态图所处的状态;
(5b)制定层次性代码生成规则的第二层代码生成规则:
(5b1)对XMI文件xi逐行查找,xi中每一<subvertexxmi:type="uml:State"xmi:id="*"name="*"></subvertex>作为简单状态,将xi每一<subvertexxmi:type="uml:State"xmi:id="*"name="*"></subvertex>之中有<regionxmi:type="uml:Region"xmi:id=""name=""></regio...

【专利技术属性】
技术研发人员:马建峰康龙宇尹文耀孙聪张涛沈玉龙李亚晖王中华
申请(专利权)人:西安电子科技大学中国航空工业集团公司西安航空计算技术研究所
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1