掌桥专利:专业的专利平台
掌桥专利
首页

无人机任务规划模块配置错误检测方法、系统及存储介质

文献发布时间:2024-04-18 19:48:15


无人机任务规划模块配置错误检测方法、系统及存储介质

技术领域

本发明属于无人机通信领域,具体涉及一种无人机任务规划模块配置错误检测方法、系统及存储介质。

背景技术

无人机因为其体积小、速度快、支持无人驾驶的特性,在国防和国民经济领域均具有广阔的应用场景,例如巡逻、摄影、快递等。除了远程手动控制无人机飞行之外,无人机通常还支持自动驾驶。在这种应用场景下,用户将无人机切换至自动驾驶模式,并预先设计一个包含航路点和路线等信息的飞行计划。上传给无人机后,无人机系统便可以自动化地执行整个飞行任务而全程无需人工干预。

不同用户的飞行计划和任务场景千差万别,为了适应用户千变万化的需求,现代常见的无人机飞行控制系统均向用户提供了大量可以定制的配置参数。这些配置参数覆盖到了无人机飞行控制系统的绝大多数功能模块,包括硬件定义模块、无线电通信模块、动力系统模块和自动驾驶模块等等。用户可以根据无人机硬件特点和任务场景需求自由地更改这些配置参数。

修改无人机配置参数的操作可通过两种方式完成:一是将键盘和监视器连接至无人机硬件,使用无人机飞行控制系统提供的终端界面执行配置参数修改命令;二是使用无线通信协议,向无人机发送修改配置参数的命令报文,该报文包括了要修改的配置参数名称和对应的值。在实际应用场景中,第二种方法因其灵活性更高而更常被使用,也有一些地面控制站(GCS)软件封装了第二种方法,向用户提供了一个更加友好的界面来发送修改无人机配置参数的请求。此外,为了支持用户更加灵活地配置无人机,无人机飞行控制系统允许用户在无人机落地时或飞行中均可修改配置参数。

无人机作为一个微型的飞行器,时刻需要灵活地调整自身的各项动力参数,从而确保飞行器能够安全地完成指定的飞行任务。具体而言,无人机飞行控制系统以很高的频率进行循环,循环开始时,系统收集无人机当前的传感器数据(例如GPS、加速度计、陀螺仪等),通过这些传感器数据估算无人机当前的飞行状态(例如位置、速度、姿态等)。之后,系统会将当前状态与无人机下一个参考状态进行比对,向无人机的动力模块输出电信号,驱使无人机移动到参考状态,然后进入下一次循环。

在上述的无人机飞行控制系统执行流程中,参考状态指的是用户希望无人机达到的状态。在自动驾驶模式中,参考状态是飞行控制系统的任务规划模块根据用户的飞行计划预先计算得到的。任务规划模块会将用户粗粒度的飞行计划进行拆解,输出细粒度的、包括详细无人机状态信息的参考状态,用以无人机的实时飞行参考。然而,任务规划模块受相关的一系列配置项的影响,如果这些配置项设置不当,会导致无人机飞行控制系统计算出错误的参考状态,例如计算出的参考状态包含偏离航线的位置、过低的速度等。错误的参考状态会指导无人机陷入不稳定的飞行状态,轻则偏航,重则坠毁。

现有的模糊测试、符号执行等技术难以检测到此类任务规划模块配置错误。一方面,任务模块输出的参考状态不仅受配置参数的影响,还是基于用户输入的飞行计划而得到的,而后者有无穷多种可能的输入,这使得现有技术无法通过变异输入的方式检查配置参数的正确性,从而在判断是否存在任务规划相关的配置错误时准确率较低——因为出错的场景极有可能在先前的模糊测试中没有遇到过。另一方面,用户输入的飞行计划与配置参数的合理区间也有十分紧密的联系,例如一个较大的转角速度配置参数,在飞行路径较为平滑的飞行任务中可能会导致过冲,但在飞行路径转角较大的任务中又会被认为是合理的。对于这种不同计划期望的配置参数取值范围不同的情况,现有的分析技术也难以给出针对特定任务的判断,存在适用性差的问题。

此外,配置参数和飞行计划均可以在无人机飞行过程中实时修改。在实际飞行的过程中,当无人机接收到配置参数修改请求时,需要立刻判断这一修改是否有误,也就是说要立刻判断它对任务规划模块后续计算出的参考状态是否是可接受的。因此,使用仿真器预先模拟无人机表现的方法也是不能使用的,因为仿真器在时间和性能上的开销较大,无法满足无人机实时配置更改场景的灵活性要求。

综上所述,设计一种高效且准确的任务规划模块配置错误检测方法是至关重要的,即能够及时地对任务规划模块配置项修改做出反应,判断它对无人机后续参考状态计算的影响是否符合用户预期,并快速做出反馈,如果存在错误的配置参数,则提醒用户进行更正。

发明内容

为了解决现有技术在检测无人机任务规划模块配置错误时存在的准确率低、适用性差、效率较低、灵活性差的问题,本发明提供了一种基于静态分析的技术方案,设计了一套无人机任务规划模块配置错误检测方法、系统及存储介质,可准确、普适、高效、灵活地诊断任意需求场景下、无人机是否存在任务规划相关的配置错误,并可提供有助于用户改正错误的辅助信息。

为实现上述目的,本发明提供了如下技术方案:

无人机任务规划模块配置错误检测方法,包括以下步骤:

读取指定的无人机飞行控制系统源代码,并分析建立数据流图;

根据无人机飞行控制系统的源代码和数据流图,提取任务规划模块配置参数相关的语法约束和语义约束,并根据用户期望执行的飞行任务,读取用户输入的配置参数,检测其是否存在错误。

本技术方案进一步的优化,所述数据流图的建立过程为:首先定位飞行控制系统源代码中以键值对形式出现的配置参数变量,然后执行Andersen指针分析来识别程序中的指针别名,将识别出的存储配置参数的那些变量视为感兴趣的变量;以这些感兴趣的变量作为分析起始点,计算它们的数据流依赖关系;对于程序源码中直接或间接引用这些配置参数变量的其他变量,直接将它们一并添加至感兴趣变量集合中;对于C++代码中的指针,为每个感兴趣的变量维护它的抽象内存使用情况,分析源码中的指针是否访问了这些抽象内存地址,以此追踪指针相关的程序数据流

本技术方案进一步的优化,所述提取任务规划模块配置参数相关的语法约束,其过程为:

基于得到的数据流图,分析数据流中的所有语句节点,从中提取和语法约束检查的语句;语法约束检查语句通常采用比较和边界函数的形式,使用Backus-Naur范式定义这类配置参数语法约束检查语句;

基于通过上述文法提取出的配置参数语法约束,整理出和配置项相关的语法约束检查语句,如果用户输入的配置项数值无法通过这些约束检查语句,则可以认为当前配置项违反了语法约束,即存在配置错误。

本技术方案进一步的优化,所述提取任务规划模块配置参数相关的语义约束,其过程为:

第一步,将配置参数映射到飞行控制系统中的函数,找出哪些函数受到它们的影响。这通过已经提取到的无人机飞行控制系统数据流图来完成分析,在数据流图中,追踪每个配置参数影响的路径,提取路径中调用函数的结点,将这些函数全部视为受此配置项影响的函数,最终得到配置项到影响的函数的映射;

第二步,辨识无人机飞行控制系统中关键函数的物理语义,这一步骤通过两种方法完成:其一,利用无人机飞行控制系统开发人员编写的单元测试代码,检查程序源代码中的所有测试代码块,定位和无人机物理表现有关的断言,断言之前的函数即为该物理表现相关的关键函数;其二,使用无人机飞行控制系统配套的模拟器和程序插桩技术来提取关键函数及其影响的无人机物理量,对第一步提取到的受配置参数影响的每个函数进行插桩,然后启动模拟器,执行无人机飞行控制系统文档中的示例飞行任务,这些示例任务涵盖了无人机大部分的关键函数,在执行过程中,当观察到无人机特定的物理量发生变化时,总是在该物理量变化时被调用的那个函数即为关键函数,上述两种方法共同采用,取两者结果并集,作为提取到的无人机关键函数及其物理语义的映射关系;

第三步,提取无人机由用户给定的飞行任务来生成检查点的相关代码,首先,确定检查点生成代码的位置,检查点生成代码的输入是飞行任务,输出是检查点接口,包括3D位置、3D速度、3D加速度、偏航(或航向)和偏航速度,通过这样的输入输出接口,可以在整个飞行代码中对应找到检查点生成代码的开始和结束,然后,提取上述位置中,和无人机任务规划模块配置参数有关的语句;

第四步,用户输入飞行任务,以及需要判断正确性的无人机配置参数列表,执行第三步提取到的检查点生成代码,输出无人机将产生的检查点及其对应的飞行表现,用户可以直观地检查该表现是否符合预期,如存在偏航、失速、失衡等不合预期的无人机表现,即可判断当前无人机任务规划模块配置参数不满足无人机完成用户预期的飞行任务语义约束,需要进行修正。

一种无人机任务规划模块配置错误检测系统,该系统包括三个模块:数据流图模块,用于读取无人机飞行控制系统的源代码,进行分析并生成系统对应的数据流图;语法检测模块,用于从无人机飞行控制系统的源代码和数据流图中提取任务规划模块配置参数相关的语法约束,并读取用户输入的配置参数,检测其是否存在错误;语义检测模块,用于从无人机飞行控制系统的源代码和数据流图中提取任务规划模块配置参数相关的语义约束,并读取用户期望执行的飞行任务和输入的配置参数,检测其是否存在错误。

本技术方案进一步的优化,所述检测系统独立于用户无人机本身的飞行控制系统之外,可运行于任意通用计算机系统之上,该系统于无人机实际执行飞行任务之前执行并输出检测结果,结果用于提示用户当前无人机的任务规划模块配置参数是否存在错误。

一种计算机可读存储介质,其特征在于:所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现如权利要求1至4中任意一项所述的无人机任务规划模块配置参数错误检测方法。

区别于现有技术,本发明从无人机飞行控制系统源代码中提取配置参数的语法约束和语义约束,判断用户当前的配置参数是否符合两种约束,从而检测错误。本发明首先使用静态分析的手段对系统源代码提取数据流图,然后使用范式提取语法约束。对于配置参数的语义约束,分为四个步骤进行:将配置参数映射到飞行控制系统中的函数;辨识无人机飞行控制系统中关键函数的物理语义;提取检查点生成代码;预测检查点和无人机的物理语义表现,用户确认是否符合预期。结合语法约束和语义约束两方面的检测,本发明可以准确、普适、高效、灵活地诊断任意任务场景下、无人机是否存在任务规划相关的配置错误。

附图说明

图1为无人机任务规划模块配置错误检测方法的流程示意图;

图2为语义约束提取和检查的流程示意图。

具体实施方式

为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。

请参阅图1,为无人机任务规划模块配置错误检测方法的流程示意图。本发明提出的无人机任务规划模块配置错误检测方法首先对所研究的无人机飞行控制系统源代码建立数据流图。基于此数据流图,本发明随后从中分析并提取任务规划模块配置参数相关的语法约束(见图1上半部分)和语义约束(见图1下半部分),最后读取用户给定的无人机飞行任务和希望判断正误的配置参数,检查输入的配置参数是否符合语法约束和语义约束,从而检测是否存在错误。

无人机任务规划模块配置错误检测方法设计如下:

第一步,为了分析无人机配置参数在飞行控制系统中的应用,需要定位飞行控制系统源码中最初储存配置参数的变量,这是后续分析的基础。

配置参数以键值对的形式出现。在常见的飞行控制系统(如PX4和ArduPilot)中,开发者通常使用结构体来表示一个配置参数,其中包含一个字符串和一个对应名称和值的数值变量。受到这种机制的启发,本技术方案首先解析飞控程序的软件文档,并提取它们的参数名称,然后使用这些名称作为关键词来搜索源代码。当在源码中的一个结构内发现一个配置参数名称时,就认为同结构体内的数值变量存储了对应的配置参数。

第二步,提取配置参数在无人机飞行控制系统中的数据流图。

程序数据流图(value-flow graph)是一种表示程序中变量相关性和数据流的图形化方式。在程序数据流图中,程序的每个变量都表示为一个节点,并通过指向变量之间的数据流边来表示它们之间的依赖关系。数据流边表示的是数据值从一个变量流向另一个变量的过程,它们提供了程序中值的传输方向和数据依赖关系的可视化表示。程序数据流图可用于本技术方案后续的静态分析,了解无人机飞行控制系统中配置参数数据的传播和依赖关系,进而分析出配置参数对无人机任务规划的影响。

为了提取无人机飞行控制系统源代码的数据流图,首先执行Andersen指针分析来识别程序中的指针别名,然后将第一步中识别出的存储配置参数的那些变量视为感兴趣的变量。以这些感兴趣的变量作为分析起始点,计算它们的数据流依赖关系。对于程序源码中直接或间接引用这些配置参数变量的其他变量,直接将它们一并添加至感兴趣变量集合中。对于C++代码中的指针,本技术方案为每个感兴趣的变量维护它的抽象内存使用情况,分析源码中的指针是否访问了这些抽象内存地址,以此追踪指针相关的程序数据流。通过上述方法,最终可以提取出飞行控制系统源代码中的配置参数相关数据流图。

每个无人机配置参数均需符合两方面的约束——语法约束和语义约束。若配置参数的取值违背了任一约束,即说明该配置参数是错误的。

配置参数的语法约束是指,配置参数在语法层面的数据类型、数值大小或格式应满足程序源代码中的检查条件。例如某个配置参数应为整数类型,并要求其数值在某个合法区间内,此时若用户将该配置参数修改为字符串,或将其数值设置为合法区间外的数值,均会导致该配置参数违反其语法约束。

配置参数的语义约束则和具体的飞行任务强相关。即使一个配置参数符合语法约束,如果它不符合用户期盼的飞行任务,仍然可能引起无人机的错误表现。例如在一个时间紧迫的飞行任务中,将无人机巡航速度设置得过低会违反任务的紧急性需求。检测无人机配置项是否符合语义约束是十分困难的,也是本技术方案着力解决的难题,因为它们取决于用户的主观期望和特定的飞行任务,而飞行控制系统本身也无法通过通用的程序代码判断当前配置是否符合用户特定任务的语义约束。

考虑到无人机配置参数的以上两种约束,接下来的技术方案将分为两个并行的步骤,分别分析配置参数的语法约束和语义约束,最终共同判断用户输入的配置项是否有错。

在语法约束检查方面,可以直接从飞行控制系统源代码中提取这些语法约束,然后检查配置参数能否通过这些检查。

基于第二步得到的数据流图,分析数据流中的所有语句节点,从中提取和语法约束检查的语句。语法约束检查语句通常采用比较和边界函数的形式,可以使用Backus-Naur范式定义这类配置参数语法约束检查语句如下:

上述文法描述中,是我们要查找的语法约束检查语句。它们可以有两种方式来指定。其一,程序员可以使用边界函数来将配置参数限制在有效范围内。常见的此类实现可能包括min()、max()、interpolate()等。在这种情况下,配置参数的数值将作为参数传递给边界函数,而一并传给边界函数的其他参数则极有可能为配置参数的某个边界约束。其二,语法约束检查语句也可以是一个简单的比较语句。这种语句通常出现在if语句块中。

指的是对配置参数的引用。这包括配置参数变量本身,由配置参数结构体中的get()方法表示。另外,配置参数可以被间接引用,可以通过递归跟踪的方式检查数据流中的变量是否与配置参数存在引用关系。在实践中,为了避免路径爆炸问题,一般将追踪过程限制在最多5个不同的编译单元之内。

通过上述手段,可以整理出和配置项相关的语法约束检查语句。如果用户输入的配置项数值无法通过这些约束检查语句,则可以认为当前配置项违反了语法约束,即存在配置错误。

提取配置参数语法约束的过程请参阅图2。

第一步,将配置参数映射到飞行控制系统中的函数,找出哪些函数受到它们的影响。这通过已经提取到的无人机飞行控制系统数据流图便可完成分析。在数据流图中,追踪每个配置参数影响的路径,提取路径中调用函数的结点,将这些函数全部视为受此配置项影响的函数,最终得到配置项到影响的函数的映射。

在实践中,飞行控制系统往往十分复杂,体现在数据流图中,配置参数相关的数据流路径数量会非常多,这种路径爆炸问题会使得分析过程难以进行。为了解决路径爆炸问题,一般采用剪枝的操作。现实常见的无人机飞控系统均采用模块化的软件工程设计思路,即将软件功能拆分为多个尽可能相互独立的小模块,无人机系统模块内部的配置项一般只对同模块内的其他函数有影响。考虑到这种实践经验,本技术方案只提取与配置参数变量声明处距离5个编译单元内的受影响函数,进而降低分析过程的性能消耗,高效地提取受无人机配置参数影响的函数列表。

而在受配置参数影响的这些函数中,有一些函数十分重要,它们和无人机的实际飞行物理表现直接相关,例如直接控制无人机马达动力的函数。下文将此类函数称为关键函数。由于关键函数的调用受任务规划相关的配置项控制,因此通过分析关键函数对无人机的具体物理语义影响,然后分析在给定的飞行任务下,用户输入的配置项会如何指导飞行控制系统如何调用这些关键函数,便可判断无人机最终的飞行表现。

基于以上原理,第二步,辨识无人机飞行控制系统中关键函数的物理语义。这一步骤可通过两种方法完成。其一,利用无人机飞行控制系统开发人员编写的单元测试代码。通常,开发者会编写测试代码,主动调用关键函数并检查其输出表现是否符合预期。因此,检查程序源代码中的所有测试代码块,定位和无人机物理表现有关的断言,断言之前的函数即为该物理表现相关的关键函数。其二,针对没有配套单元测试的关键函数,使用无人机飞行控制系统配套的模拟器和程序插桩技术来提取关键函数及其影响的无人机物理量。对第一步提取到的受配置参数影响的每个函数进行插桩,然后启动模拟器,执行无人机飞行控制系统文档中的示例飞行任务,这些示例任务涵盖了无人机大部分的关键函数。在执行过程中,当观察到无人机特定的物理量发生变化时,总是在该物理量变化时被调用的那个函数即为关键函数。需要注意的是,部分非关键函数,例如日志系统等,会在每个物理量变化时均被触发。对于此类非关键函数,需要通过人工观察的方式进行过滤去除。为了尽可能全面地收集无人机飞行控制系统中的关键函数及其影响的无人机物理语义表现,上述两种方法可以共同采用,取两者结果并集,作为提取到的无人机关键函数及其物理语义的映射关系。

第三步,需要分析无人机飞行控制系统中的关键函数在给定的飞行任务下会被如何调用,也就是将用户期望执行的飞行任务转换为一系列的关键函数调用,从而用于预测无人机的语义表现。

为了解决这个问题,本技术方案利用无人机飞行控制系统中的检查点(setpoint)机制。在背景技术章节中提到,无人机飞行控制系统通过计算参考状态来指导无人机在每次系统循环中做出动力反馈。而在这些参考状态中,一部分的参考状态会决定无人机飞行控制系统中关键函数的调用,而另一部分则仅用于保持当前操作,不影响关键函数调用,对于前者,本技术方案采用现实中常见无人机飞行控制系统的称呼,将它们称为检查点。然而,实际飞行过程中,检查点的生成是实时的,而本技术方案需要预先诊断无人机的表现是否符合语义约束,因此,本技术方案直接将检查点生成代码从无人机飞行控制系统源代码中提取出来,然后在无人机实际执行任务之前,提供用户当前的配置参数并提前执行这些代码,即可预知无人机的物理表现并做出诊断,而无需任何实际飞行。

提取检查点生成代码的过程如下:首先,确定检查点生成代码的位置。检查点生成代码的输入是飞行任务,输出是检查点接口,包括3D位置、3D速度、3D加速度、偏航(或航向)和偏航速度。通过这样的输入输出接口,可以在整个飞行代码中对应找到检查点生成代码的开始和结束。然后,提取上述位置中,和无人机任务规划模块配置参数有关的语句。这一做法是因为不是所有的检查点生成代码都可以直接在离线状态下执行。与无人机实际飞行时实时计算检查点的方式不同,本技术方案无法预测无人机飞行时环境因素的信息。但相比之下,可以提供用户当前配置参数,实际上本技术方案也只关注配置参数对无人机语义表现的影响。因此,本技术方案进一步提取与配置参数相关的代码,并用它们来预测检查点。如果这些计算出的检查点符合语义约束,则意味着在当前配置参数下,只要环境因素不在极端情况下,无人机总能完成飞行任务。上述过程的算法如下:

第四步,用户输入飞行任务,以及需要判断正确性的无人机配置参数列表。本技术方案将其中与无人机任务规划模块相关的配置项作为输入,执行第三步提取到的检查点生成代码,可以得知在当前的任务和配置下,无人机飞行控制系统对关键函数的调用计划。又由于在第二步已经知晓了关键函数对无人机的飞行物理表现语义的影响,因此可以最终输出无人机将产生的飞行表现。用户可以直观地检查该表现是否符合预期,如存在偏航、失速、失衡等不合预期的无人机表现,即可判断当前无人机任务规划模块配置参数不满足无人机完成用户预期的飞行任务语义约束,需要进行修正。

结合语法约束和语义约束两个方面,对无人机任务规划模块的配置项进行分析和诊断,即可对其是否存在错误得出最终检测结论。

本发明同时提供了应用前文所述无人机任务规划模块配置错误检测方法的系统。该系统独立于用户无人机本身的飞行控制系统之外,可运行于任意通用计算机系统之上,其共包含三个模块:第一个模块读取无人机飞行控制系统的源代码,进行分析并生成系统对应的数据流图;第二个模块从无人机飞行控制系统的源代码和数据流图中提取任务规划模块配置参数相关的语法约束,并读取用户输入的配置参数,检测其是否存在错误;第三个模块从无人机飞行控制系统的源代码和数据流图中提取任务规划模块配置参数相关的语义约束,并读取用户期望执行的飞行任务和输入的配置参数,检测其是否存在错误。该系统于无人机实际执行飞行任务之前执行并输出检测结果,该结果用于提示用户当前无人机的任务规划模块配置参数是否存在错误。此后,本发明提供的系统便可退出。

最后,本发明同时提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现所述的无人机任务规划模块配置错误检测方法。

示例性的,所述的计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在计算机可读存储介质中,并由所述处理器执行,以完成本发明无人机任务规划模块配置错误检测方法中的步骤。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机可读指令段,该指令段用于描述所述计算机程序在服务器中的执行过程。

所述服务器可以是智能手机、笔记本、掌上电脑及云端服务器等计算设备。所述服务器可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述服务器还可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述服务器还可以包括输入输出设备、网络接入设备、总线等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括……”或“包含……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的要素。此外,在本文中,“大于”、“小于”、“超过”等理解为不包括本数;“以上”、“以下”、“以内”等理解为包括本数。

尽管已经对上述各实施例进行了描述,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改,所以以上所述仅为本发明的实施例,并非因此限制本发明的专利保护范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围之内。

技术分类

06120116311771