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