CN117472352A - 一种自动驾驶应用的开发方法及装置 - Google Patents

一种自动驾驶应用的开发方法及装置 Download PDF

Info

Publication number
CN117472352A
CN117472352A CN202311428719.0A CN202311428719A CN117472352A CN 117472352 A CN117472352 A CN 117472352A CN 202311428719 A CN202311428719 A CN 202311428719A CN 117472352 A CN117472352 A CN 117472352A
Authority
CN
China
Prior art keywords
function
code
file
generating
description file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311428719.0A
Other languages
English (en)
Inventor
井明军
潘文彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guoqi Intelligent Control Beijing Technology Co Ltd
Original Assignee
Guoqi Intelligent Control Beijing Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guoqi Intelligent Control Beijing Technology Co Ltd filed Critical Guoqi Intelligent Control Beijing Technology Co Ltd
Priority to CN202311428719.0A priority Critical patent/CN117472352A/zh
Publication of CN117472352A publication Critical patent/CN117472352A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0486Drag-and-drop
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及计算机技术领域,公开了一种自动驾驶应用的开发方法及装置,该方法包括:获取自动驾驶算法代码,对自动驾驶算法代码进行扫描,生成描述文件;基于描述文件调用代码组件,将代码组件进行图形化显示;在图形化显示的代码组件中,响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于代码组件配置信息生成自动驾驶应用。本发明降低了自动驾驶应用的开发难度,且图形化的开发方式,提高了自动驾驶应用的开发效率,降低了开发成本。

Description

一种自动驾驶应用的开发方法及装置
技术领域
本发明涉及计算机技术领域,具体涉及一种自动驾驶应用的开发方法及装置。
背景技术
AD/ADAS(Auto Drive System/Advanced Driving Assistance System,自动驾驶系统/高级驾驶辅助驾驶)的应用普及依赖于汽车EE(Electrical/ElectronicArchitecture,电子/电器)架构的升级,以及AD/ADAS算法的不断迭代。图形化开发器作为工具链支撑整个ADAS系统的开发,其功能为向ADAS/AD开发者提供了将算法代码图形化展示、重新组合成新的算法或者新的ADAS应用、并支持其适配到底层的消息中间件。
但是,利用图形化开发器进行自动驾驶应用的开发过程中,代码图形化表达的难度较高,开发效率低。
发明内容
有鉴于此,本发明提供了一种自动驾驶应用的开发方法及装置,以解决利用图形化开发器进行自动驾驶应用的开发过程中,代码图形化表达的难度较高,开发效率低的问题。
第一方面,本发明提供了一种自动驾驶应用的开发方法,该方法包括:
获取自动驾驶算法代码,对自动驾驶算法代码进行扫描,生成描述文件;
基于描述文件调用代码组件,将代码组件进行图形化显示;
响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于代码组件配置信息生成自动驾驶应用。
本实施例提供的一种自动驾驶应用的开发方法,通过对自动驾驶算法代码进行扫描,生成描述文件,进而将扫描文件对应的代码组件进行图形化显示,进而开发人员直接选取代码组件,形成代码组件配置信息,进而生成自动驾驶应用,降低了自动驾驶应用的开发难度,且图形化的开发方式,提高了自动驾驶应用的开发效率,降低了开发成本。
在一种可选的实施方式中,对自动驾驶算法代码进行扫描,生成描述文件,包括:
按照预设代码格式改写自动驾驶算法代码,生成代码文件;
获取代码文件的扩展名,基于代码文件的扩展名确定文件类型;
基于文件类型对代码文件进行解析,基于解析结果生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,按照预设代码格式改写自动驾驶算法代码,降低了后续代码图形化显示的难度,并且针对不同的文件分别进行解析,使得描述文件更加具有针对性,描述文件更能准确地描述自动驾驶算法代码,为后续图形化显示奠定了基础。
在一种可选的实施方式中,文件类型为头文件;基于文件类型对代码文件进行解析,基于解析结果生成描述文件,包括:
对头文件进行语义分析,生成第一抽象语法树;其中,第一抽象语法树中包含多个树节点,且多个树节点与头文件中的语法结构对应;
基于多个树节点对应的语法结构生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,通过对头文件进行语义分析,生成第一抽象语法树,进而生成描述文件,避免了文本扫描方式对语法格式无法检查,而如果要检测则需要引入语法检查的逻辑,即构建第一抽象语法树,降低了自动驾驶应用的开发实现的复杂度。
在一种可选的实施方式中,文件类型为源文件;基于文件类型对代码文件进行解析,基于解析结果生成描述文件,包括:
对源文件进行语义分析,生成第二抽象语法树;其中,第二抽象语法树中包含多个树节点,且多个树节点与源文件中的语法结构对应;
根据树节点对应的语法结构类型确定目标节点函数;
获取目标节点函数对应的函数信息,基于函数信息生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,利用第二抽象语法树中的树节点进行代码解析,进而获取相对应的函数信息,使得描述文件对源文件的描述更加准确,并且避免了对代码文本的逐行分析,减少了开发成本,降低了自动驾驶应用的开发实现的复杂度。
在一种可选的实施方式中,获取目标节点函数对应的函数信息,基于函数信息生成描述文件,包括:
当目标节点函数为基础函数时,则遍历第二抽象语法树中的函数声明节点和返回节点,生成函数名称、函数输入变量和函数输出变量;
基于函数名称、函数输入变量和函数输出变量生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,通过第二抽象语法树中节点对应的函数名称、函数输入变量和函数输出变量生成描述文件,使得描述文件对基础函数的描述更加准确,且具有针对性。
在一种可选的实施方式中,获取目标节点函数对应的函数信息,基于函数信息生成描述文件,还包括:
当目标节点函数为复合函数时,则遍历第二抽象语法树中的函数声明节点、返回节点、变量名节点和函数调用节点,生成函数名称、函数输入变量、局部变量和函数调用关系;
基于函数输入变量、局部变量和函数调用关系构建图数据结构,并基于图数据结构生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,通过第二抽象语法树中节点对应的函数名称、函数输入变量、局部变量和函数调用关系构建图数据结构,基于图数据结构生成描述文件,使得复合函数的描述更加清楚准确,降低了自动驾驶应用的开发难度,提高了自动驾驶应用的开发效率,降低了开发成本。
在一种可选的实施方式中,获取目标节点函数对应的函数信息,基于函数信息生成描述文件,还包括:
当目标节点函数为主函数时,则遍历第二抽象语法树中的函数调用节点,生成函数调用关系,并基于函数调用关系生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,通过历第二抽象语法树中的函数调用节点,生成函数调用关系,并基于函数调用关系生成描述文件,使得描述文件对主函数的描述更加具有针对性,实现了图形化的开发方式。
第二方面,本发明提供了一种自动驾驶应用的开发装置,该装置包括:
扫描模块,用于获取自动驾驶算法代码,对自动驾驶算法代码进行扫描,生成描述文件;
图形化显示模块,用于基于描述文件调用代码组件,并将代码组件进行图形化显示;
生成模块,用于响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于代码组件配置信息生成自动驾驶应用。
第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的自动驾驶应用的开发。
第四方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的自动驾驶应用的开发。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的车载计算平台系统的分层架构的示意图;
图2是根据本发明实施例的将求和功能表示为输入输出模块的示意图;
图3是根据本发明实施例的一种自动驾驶应用的开发的流程示意图;
图4是根据本发明实施例的自动驾驶应用的开发步骤的示意图;
图5是根据本发明实施例的另一种自动驾驶应用的开发的流程示意图;
图6是根据本发明实施例的average函数对应的图数据结构的示意图;
图7是根据本发明实施例的图形开发器图形化显示的示意图;
图8是根据本发明实施例的一种自动驾驶应用的开发装置的结构框图;
图9是本发明实施例的计算机设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
AD/ADAS算法包括感知、融合、预测、决策、规划、控制等,是运行在车载中央计算平台上的功能软件,为AD/ADAS应用软件提供了运行的基础,也是整个自动驾驶软件系统的核心之一;在整个车载计算平台架构中,如图1所示,图形化开发器作为工具链支撑整个ADAS系统的开发,其功能为提供ADAS的功能软件层和应用软件的图形化开发功能。功能软件通常是C/C++代码实现,其开发和调试难度非常大,图形化开发器提供了算法的基础功能组件,使得应用软件的图形化开发得以实现。
图形化开发器为ADAS/AD开发者提供了将算法代码图形化展示、重新组合成新的算法或者新的ADAS应用、并支持其适配到底层的消息中间件。图形化开发器得以运行的基础是首先需要将自动驾驶算法、算法依赖的底层代码库(比如数学计算、物理计算)以及算法节点通信的消息中间件等代码的图形化展示的功能,其具体步骤为:将底层的代码进行扫描识别,将其抽象为图形化模型模块,以json(javascript object notation,JS对象简谱,一种轻量级的数据交换格式)文件形式对图形化模块以一定的规则进行描述,转交给开发器前端,尤其展示给自动驾驶应用软件的开发者。
其中,C/C++程序表达成图形化的一系列具有输入输出的模块,需要解决如下问题:1、每一个具体的功能都表达为输入和输出的模块,比如一个求和(Sum)的功能,如图2所示,实现求和功能需要有2个输入:2个加数In-1和In-2;1个输出Out:对输入的加数求和的结果;2、图形化模块需要分为3种类型:不可拆分的模块,这里称之为基本模块;可以拆分成基本模块或其他的非基本模块,称之为组合模块;进程模块,作为一个独立的程序在车载计算平台上运行,是一个特殊的组合模块;3、需要引入一个扫描程序,负责对算法的程序代码进行扫描,而算法代码需要按照一定的规则开发,扫描程序对算法代码扫描,生成各个模块的描述文件,如果是非基本模块,还需要生成其内部对其他模块的调用关系的描述;4、扫描程序生成的描述文件转交给前端的图形化展示程序,进行展示。
为解决算法代码扫描的问题,相关的解决方案为:可以对代码的各个函数增加注释,注释按照一定的规则来书写,包括模块/函数的输入输出,模块的类型等,对其他模块的调用关系;扫程序对注释进行扫描,然后就可以形成以上3种模块的表达文件;扫描结果被保存成json文件;该方案的本质是对程序代码的扫描,被转化为对一定格式的注释文本进行扫描。
上述解决方案存在以下技术问题:需要对所有的程序代码中的函数一一进行注释,而且注释必须正确,需要引入一些规则对注释个进行限制;其局限性在于:1)如果代码被修改了,注释也必须同步修改;2)注释和代码的区别在于代码可以通过编译,检查出其中的语法错误,而注释由于是文本性质的,只能对其格式检查,无法做到对其内容检查是否正确,这样就会产生如果注释内容错误与代码功能不一致,导致生成的模块描述文件不正确,这种错误需要通过人工核对才能检查出来。
相关的算法代码扫描的解决方案还采用对代码通过文本分析的方式扫描:对算法代码,逐行扫描,按照C/C++的的词法、语法规则进行分析;对于函数,分析其函数名,参数,返回值;对于非基础函数,分析其内部的调用关系;生成对所有的函数模块的描述的json文件。
上述解决方案对代码文件进行逐行的扫描和分析,同时可以借助C/C++语言的词法分析库,获取到词法数据流,然后在词法分析的基础上,分析出函数的输入输出信息和内部对其函数的调用关系。该方案的缺点在于,扫描程序开发难度相对较大,而且实现逻辑复杂。
为解决上述技术问题,本发明实施例提供了一种自动驾驶应用的开发方法及装置。
根据本发明实施例,提供了一种自动驾驶应用的开发方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种自动驾驶应用的开发方法,可用于上述的移动终端,如手机、平板电脑等,图3是根据本发明实施例的一种自动驾驶应用的开发方法的流程图,如图3所示,该流程包括如下步骤:
步骤S301,获取自动驾驶算法代码,对自动驾驶算法代码进行扫描,生成描述文件。
具体地,自动驾驶算法代码包括自动驾驶算法对应的代码和底层代码,其中,自动驾驶算法对应的代码存储在算法代码库中,算法代码库包括感知算法、规划算法、控制算法等等,这些代码是支持一个或者多个特定的自动驾驶的应用比如ACC等;底层代码存储在底层代码库中,底层代码库为操作系统基础的函数库,比如POSIX接口(可移植操作系统接口)库、消息中间件的API接口(Application Programming Interface,应用程序接口)库、执行管理接口库等等。
步骤S302,基于描述文件调用代码组件,并将代码组件进行图形化显示。
具体地,如图4所示,根据描述文件对应的图数据结构,调用代码组件数据库中的代码组件,并将代码组件以图形模块的形式显示至图形化开发器中,进而自动驾驶开发人员通过拖拽的方式,选取代码组件,组成新的自动驾驶应用算法。
步骤S303,响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于代码组件配置信息生成自动驾驶应用。
具体地,根据新的自动驾驶应用算法,利用代码组件数据库对自动驾驶应用进行编译构建,并将自动驾驶应用部署到仿真环境或者实车进行测试。
进一步地,用户也可以使用图形化的方式,生成对应函数的功能,即在图形化界面上,通过将代码组件对应的模型函数连线生成一个大的模型,然后保存为模型的描述json文件,代码生成程序,读取json文件,按照内部的函数之间的关系,还原成代码,就可以编译运行自动驾驶应用。
本实施例提供的一种自动驾驶应用的开发方法,通过对自动驾驶算法代码进行扫描,生成描述文件,进而将扫描文件对应的代码组件进行图形化显示,进而开发人员直接选取代码组件,形成代码组件配置信息,进而生成自动驾驶应用,降低了自动驾驶应用的开发难度,且图形化的开发方式,提高了自动驾驶应用的开发效率,降低了开发成本。
在本实施例中提供了一种自动驾驶应用的开发方法,可用于上述的移动终端,如手机、平板电脑等,图5是根据本发明实施例的一种自动驾驶应用的开发方法的流程图,如图5所示,该流程包括如下步骤:
步骤S501,获取自动驾驶算法代码,对自动驾驶算法代码进行扫描,生成描述文件。
具体地,上述步骤S501包括:
步骤S5011,按照预设代码格式改写自动驾驶算法代码,生成代码文件。
具体地,预设代码格式包括:文件和文件夹组织、代码内容规范和函数类型。
进一步地,文件和文件夹组织包括:头文件,一个库采用一个头文件的方式;源文件,每一个函数,使用一个文件定义,函数的名称和文件/文件夹名称相同。
进一步地,代码内容规范包括:源文件名与内部实现函数名一致,以及函数的输出必须包含函数计算的结果。
进一步地,函数类型包括:函数分为相应的3种类型:基本函数,组合函数和主函数(c/c++中的main函数);基本函数只关注其输入和输出,也就是入输入参数和返回值,对于需要多个输入或者输出的情况,使用structure(语法结构)封装多个变量;组合函数,处理关注输入输出,还需要规范其内容:①其内部允许存在对其他函数的调用语句;②其每个语句都是对基础函数或者其他组合函数的调用,函数调用的中间值;③对其他函数调用的结果,保存到局部变量中;主函数是特殊的组合函数,除其内部调用外,还需要关注其输入,通常是来自系统的输入(比如配置文件)或者其他来自其他进程的消息。
步骤S5012,获取代码文件的扩展名,基于代码文件的扩展名确定文件类型。
具体地,配置被扫描的代码(即代码文件)的文件夹路径、输出的模型描述文件的文件夹路径,作为输入/输出变量。
进一步地,遍历输入文件夹下的文件,按照文件的扩展名进行区分其是头文件(后缀为.h或.hpp)或者是c/c++源文件(后缀为.c、或.cpp、或.cc)。
步骤S5013,基于文件类型对代码文件进行解析,基于解析结果生成描述文件。
本实施例提供的一种自动驾驶应用的开发方法,按照预设代码格式改写自动驾驶算法代码,降低了后续代码图形化显示的难度,并且针对不同的文件分别进行解析,使得描述文件更加具有针对性,描述文件更能准确地描述自动驾驶算法代码,为后续图形化显示奠定了基础。
在一些可选的实施方式中,文件类型为头文件时,上述步骤S5013包括:
步骤a1,对头文件进行语义分析,生成第一抽象语法树;其中,第一抽象语法树中包含多个树节点,且多个树节点与头文件中的语法结构对应。
具体地,头文件中通常定义的是代码文件中的structure,调用编译器前端Clang中的Libclang(一种开发库)的API(Application Programming Interface,应用程序接口),将头文件扫描生成Translation Unit(编译单元,简称TU);编译单元经过预处理后,由单个源文件的内容组成,包含任何不带块的头文件,这些头文件使用条件预处理语句(如条件编译ifdef或ifndef等)被忽略。
其中,Libclang提供了一个函数clang_parseTranslationUnit,该函数读取要被编译的代码文件,对该代码文件进行词法分析,然后进行语义分析(包括词法分析和语法分析),生成第一抽象语法树(Abstract Syntax Tree,简称AST)。
进一步地,对头文件进行词法分析的步骤为:编译器或解释器(Clang)对头文件中的源代码进行词法分析,将源代码分解为一系列的标记(tokens);其中,标记是源代码中的最小语法单位,如关键字、标识符、运算符、字面量等。
进一步地,在对头文件进行词法分析后,进行语法分析,具体步骤为:编译器或解释器(Clang)对标记进行语法分析,根据编程语言的语法规则将它们组合成更高层次的语法结构,如表达式、声明和控制结构等;在语法分析过程中,编译器或解释器会创建AST的节点并逐步建立节点间的关系;其中,每个树节点代表一个语法结构,如函数定义、变量声明、赋值语句等,树的根节点通常表示整个源代码文件,而子节点表示具体的语法元素及其关系。
步骤a2,基于多个树节点对应的语法结构生成描述文件。
具体地,遍历TU对应的抽象语法树(AST),调用相应的处理函数,即对于多个树节点中的CXCursor_StructDecl类型的节点处理,分别获取到该头文件内的各个strut(结构体)的名字,其内部成员的类型,成员变量的名字,这些内容保存一个链表中;其中,由于树节点保存了语法结构类型,进而直接访问树节点即可。
进一步地,处理函数为在对AST中各个节点进行遍历的时候的函数,处理函数可以访问AST的节点信息,比如节点的类型,节点的名字等,进而获取该节点在代码中的作用。
进一步地,基于每一个语法结构输出一个对应的json文件(即描述文件),该描述文件保存structure的名字和成员信息。
本实施例提供的一种自动驾驶应用的开发方法,通过对头文件进行语义分析,生成第一抽象语法树,进而生成描述文件,避免了文本扫描方式对语法格式无法检查,而如果要检测则需要引入语法检查的逻辑,即构建第一抽象语法树,降低了自动驾驶应用的开发实现的复杂度。
在一些可选的实施方式中,文件类型为源文件时,上述步骤S5013包括:
步骤b1,对源文件进行语义分析,生成第二抽象语法树;其中,第二抽象语法树中包含多个树节点,且多个树节点与源文件中的语法结构对应。
具体地,第二抽象语法树的生成步骤与第一抽象语法树的生成步骤相同。
步骤b2,根据树节点对应的语法结构类型确定目标节点函数。
步骤b3,获取目标节点函数对应的函数信息,基于函数信息生成描述文件。
具体地,当目标节点函数为基础函数时,则遍历第二抽象语法树中的函数声明节点和返回节点,生成函数名称、函数输入变量和函数输出变量;基于函数名称、函数输入变量和函数输出变量生成描述文件。
进一步地,对于基础函数,只需要获取函数名称、函数输入变量和函数输出变量,进而调用处理函数访问第二抽象语法树中函数定义节点的两个函数CXCursor_FunctionDecl(获取到输入参数的类型,即函数声明节点)和CXCursor_ReturnStmt(返回语句,即返回节点),进而获取到函数名称、以及该函数的输入和返回变量的类型,将这些信息保存到链表中,同时每一个函数输出一个对其输入输出描述的描述文件。
例如,当基础函数为int func(int a,int b){return a+b},处理函数获取到基础函数的函数名称为func,函数输入变量为a,函数输出变量为b,其类型是int和out。
具体地,当目标节点函数为复合函数时,则遍历第二抽象语法树中的函数声明节点、返回节点、变量名节点和函数调用节点,生成函数名称、函数输入变量、局部变量和函数调用关系;基于函数输入变量、局部变量和函数调用关系构建图数据结构,并基于图数据结构生成描述文件。
进一步地,对于复合函数,除需要访问第二抽象语法树中函数定义节点外,还需要对复合函数内部的所有的语句进行分析,需要处理CXCursor_BinaryOperator(等号节点)类型的节点及其子节点,CXCursor_BinaryOperator类型的节点类型包括CXCursor_DeclRefExpr(即变量名节点)和CXCursor_CallExpr(即函数调用节点),进而获取到复合函数内的每个语句的局部遍历名称,以及对其他函数的调用的信息,包括函数名称、传入的变量名称,进而将所有局部变量都按照函数调用关系,保存一个图的数据结构中,得到图数据结构;按照上述方法遍历完所有的函数调用关系之后,按照图数据结构的内容输出描述文件。
进一步地,在输出描述文件的过程中,如果访问的树节点的节点类型为locvar(局部变量)时,需要忽略该类型的节点,并且将其对应的输入输出直接相连;对于in(输入)、const(关键字)类型节点,将其关联为复合函数中的输入/输出变量;对于out(输出)节点,关联为复合函数的输出变量。
具体地,当目标节点函数为主函数时,则遍历第二抽象语法树中的函数调用节点,生成函数调用关系,并基于函数调用关系生成描述文件。
进一步地,对于主函数,只需处理函数内部的调用关系,与复合函数一致。
步骤S502,基于描述文件调用代码组件,并将代码组件进行图形化显示。详细请参见图3所示实施例的步骤S302,在此不再赘述。
步骤S503,响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于代码组件配置信息生成自动驾驶应用。详细请参见图3所示实施例的步骤S303,在此不再赘述。
本实施例提供的一种自动驾驶应用的开发方法,利用抽象语法树中的树节点进行代码解析,进而获取相对应的函数信息,使得描述文件对源文件的描述更加准确,并且避免了对代码文本的逐行分析,减少了开发成本,降低了自动驾驶应用的开发实现的复杂度。
下面通过具体实施例来说明一种自动驾驶应用的开发方法的步骤。
实施例1:
当自动驾驶算法代码为:
则对于上述自动驾驶算法代码的处理步骤如下:
(1)首先处理basic/sum.c文件,利用clang生成抽象语法树;遍历抽象语法树,采用先序遍历的方式(即先访问父节点,然后访问其左子节点,然后一次访问其他子节点,进而递归循环访问剩余节点),其中,
①当访问到FunctionDecl节点,则函数名称为sum;
②进而访问pramVarDecl,获取sum第一个参数类型float;
③接下来访问下一个paramVarDecl,获取第二个参数类型是float;
(2)处理basic/devide.c文件,函数devide和sum类似是一个基础函数,处理过程和sum函数类似;
(3)处理文件compound/average.c,其中,
①访问到FunctionDecl时,则获取到函数名称为average;
②访问ParamDecl时,则获取第一个参数类型为float;
③访问ParamDecl时,则获取第二个参数类型float;
④遍历到节点VarDecl时,则获取一个局部变量c;
⑤遍历节点BinaryOperator和其子节点,能够获取到c=sum(a,b),即average的输入参数a和b,传给了函数sum,同时结果保存到局部变量c中;
⑥遍历下一个节点VarDecl,说明定义了又一个局部变量d;
⑦遍历BinaryOperator和其子节点,获取信息为d=devide(c,2),同时在FloatingLiteral访问时,确定2.0是一个float类型的常数量;
(4)将步骤(1)-(3)步骤获取到信息,保存到一个图的数据结构中,就能得到如下的average函数对应的图数据结构,如图6所示。
进而扫描程序生成的描述文件如下:
/>
/>
如图7所示,读取上述描述文件,进而调用代码组件,将main函数(主函数)按照其内容展示为一个图形化的模型。
自动驾驶开发人员通过图形化拖拽的方式,选择组件形成代码组件配置信息,进而基于代码组件配置信息组成自动驾驶应用,将自动驾驶应用进行编译部署到仿真环境或者实车进行测试。
在本实施例中还提供了一种自动驾驶应用的开发装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种自动驾驶应用的开发装置,如图8所示,包括:
扫描模块801,用于获取自动驾驶算法代码,对自动驾驶算法代码进行扫描,生成描述文件;
图形化显示模块802,用于基于描述文件调用代码组件,并将代码组件进行图形化显示;
生成模块803,用于响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于代码组件配置信息生成自动驾驶应用。
在一些可选的实施方式中,扫描模块801包括:
改写单元,用于按照预设代码格式改写自动驾驶算法代码,生成代码文件;
确定单元,用于获取代码文件的扩展名,基于代码文件的扩展名确定文件类型;
解析单元,用于基于文件类型对代码文件进行解析,基于解析结果生成描述文件。
在一些可选的实施方式中,文件类型为头文件时,解析单元包括:
第一语义分析子单元,用于对头文件进行语义分析,生成第一抽象语法树;其中,第一抽象语法树中包含多个树节点,且多个树节点与头文件中的语法结构对应;
第一生成子单元,用于基于多个树节点对应的语法结构生成描述文件。
在一些可选的实施方式中,文件类型为源文件时,解析单元包括:
第二语义分析子单元,用于对源文件进行语义分析,生成第二抽象语法树;其中,第二抽象语法树中包含多个树节点,且多个树节点与源文件中的语法结构对应;
确定子单元,用于根据树节点对应的语法结构类型确定目标节点函数;
第二生成子单元,用于获取目标节点函数对应的函数信息,基于函数信息生成描述文件。
在一些可选的实施方式中,第二生成子单元,具体用于当目标节点函数为基础函数时,则遍历第二抽象语法树中的函数声明节点和返回节点,生成函数名称、函数输入变量和函数输出变量;基于函数名称、函数输入变量和函数输出变量生成描述文件。
在一些可选的实施方式中,第二生成子单元,还用于当目标节点函数为复合函数时,则遍历第二抽象语法树中的函数声明节点、返回节点、变量名节点和函数调用节点,生成函数名称、函数输入变量、局部变量和函数调用关系;基于函数输入变量、局部变量和函数调用关系构建图数据结构,并基于图数据结构生成描述文件。
在一些可选的实施方式中,第二生成子单元,还用于当目标节点函数为主函数时,则遍历第二抽象语法树中的函数调用节点,生成函数调用关系,并基于函数调用关系生成描述文件。
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本实施例中的自动驾驶应用的开发装置是以功能单元的形式来呈现,这里的单元是指ASIC(Application Specific Integrated Circuit,专用集成电路)电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
本发明实施例还提供一种计算机设备,具有上述图8所示的自动驾驶应用的开发装置。
请参阅图9,图9是本发明可选实施例提供的一种计算机设备的结构示意图,如图9所示,该计算机设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在计算机设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个计算机设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图9中以一个处理器10为例。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
该计算机设备还包括输入装置30和输出装置40。处理器10、存储器20、输入装置30和输出装置40可以通过总线或者其他方式连接,图9中以通过总线连接为例。
输入装置30可接收输入的数字或字符信息,以及产生与该计算机设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等。输出装置40可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。上述显示设备包括但不限于液晶显示器,发光二极管,显示器和等离子体显示器。在一些可选的实施方式中,显示设备可以是触摸屏。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的方法。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

Claims (10)

1.一种自动驾驶应用的开发方法,其特征在于,所述方法包括:
获取自动驾驶算法代码,对所述自动驾驶算法代码进行扫描,生成描述文件;
基于所述描述文件调用代码组件,将所述代码组件进行图形化显示;
响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于所述代码组件配置信息生成自动驾驶应用。
2.根据权利要求1所述的方法,其特征在于,所述对所述自动驾驶算法代码进行扫描,生成描述文件,包括:
按照预设代码格式改写所述自动驾驶算法代码,生成代码文件;
获取所述代码文件的扩展名,基于所述代码文件的扩展名确定文件类型;
基于所述文件类型对所述代码文件进行解析,基于解析结果生成所述描述文件。
3.根据权利要求2所述的方法,其特征在于,所述文件类型为头文件;所述基于所述文件类型对所述代码文件进行解析,基于解析结果生成所述描述文件,包括:
对所述头文件进行语义分析,生成第一抽象语法树;其中,所述第一抽象语法树中包含多个树节点,且所述多个树节点与所述头文件中的语法结构对应;
基于所述多个树节点对应的语法结构生成所述描述文件。
4.根据权利要求2所述的方法,其特征在于,所述文件类型为源文件;所述基于所述文件类型对所述代码文件进行解析,基于解析结果生成所述描述文件,包括:
对所述源文件进行语义分析,生成第二抽象语法树;其中,所述第二抽象语法树中包含多个树节点,且所述多个树节点与所述源文件中的语法结构对应;
根据所述树节点对应的语法结构类型确定目标节点函数;
获取所述目标节点函数对应的函数信息,基于所述函数信息生成所述描述文件。
5.根据权利要求4所述的方法,其特征在于,所述获取所述目标节点函数对应的函数信息,基于所述函数信息生成所述描述文件,包括:
当所述目标节点函数为基础函数时,则遍历所述第二抽象语法树中的函数声明节点和返回节点,生成函数名称、函数输入变量和函数输出变量;
基于所述函数名称、所述函数输入变量和所述函数输出变量生成所述描述文件。
6.根据权利要求5所述的方法,其特征在于,所述获取所述目标节点函数对应的函数信息,基于所述函数信息生成所述描述文件,还包括:
当所述目标节点函数为复合函数时,则遍历所述第二抽象语法树中的所述函数声明节点、所述返回节点、变量名节点和函数调用节点,生成所述函数名称、所述函数输入变量、局部变量和函数调用关系;
基于所述函数输入变量、所述局部变量和所述函数调用关系构建图数据结构,并基于所述图数据结构生成所述描述文件。
7.根据权利要求6所述的方法,其特征在于,所述获取所述目标节点函数对应的函数信息,基于所述函数信息生成所述描述文件,还包括:
当所述目标节点函数为主函数时,则遍历所述第二抽象语法树中的函数调用节点,生成所述函数调用关系,并基于所述函数调用关系生成所述描述文件。
8.一种自动驾驶应用的开发装置,其特征在于,所述装置包括:
扫描模块,用于获取自动驾驶算法代码,对所述自动驾驶算法代码进行扫描,生成描述文件;
图形化显示模块,用于基于所述描述文件调用代码组件,并将所述代码组件进行图形化显示;
生成模块,用于响应于拖拽操作,基于图形化显示的代码组件确定代码组件配置信息,并基于所述代码组件配置信息生成自动驾驶应用。
9.一种计算机设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1至7中任一项所述的自动驾驶应用的开发方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令,所述计算机指令用于使计算机执行权利要求1至7中任一项所述的自动驾驶应用的开发方法。
CN202311428719.0A 2023-10-31 2023-10-31 一种自动驾驶应用的开发方法及装置 Pending CN117472352A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311428719.0A CN117472352A (zh) 2023-10-31 2023-10-31 一种自动驾驶应用的开发方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311428719.0A CN117472352A (zh) 2023-10-31 2023-10-31 一种自动驾驶应用的开发方法及装置

Publications (1)

Publication Number Publication Date
CN117472352A true CN117472352A (zh) 2024-01-30

Family

ID=89626899

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311428719.0A Pending CN117472352A (zh) 2023-10-31 2023-10-31 一种自动驾驶应用的开发方法及装置

Country Status (1)

Country Link
CN (1) CN117472352A (zh)

Similar Documents

Publication Publication Date Title
US11200143B2 (en) Software development framework for a cloud computing platform
CN108885545B (zh) 用于实时数据流编程语言的工具和方法
Gosain et al. Static analysis: A survey of techniques and tools
EP3605324A1 (en) Application development method and tool, device, and storage medium thereof
Gargantini et al. A metamodel-based language and a simulation engine for abstract state machines.
US10269087B2 (en) Language translation using preprocessor macros
US11675575B2 (en) Checking source code validity at time of code update
US20130332449A1 (en) Generating data processing code from a directed acyclic graph
WO2018161509A1 (zh) 条件编译预处理方法、终端及存储介质
CN103136100B (zh) 一种Android测试的方法和系统
Allamanis et al. Smartpaste: Learning to adapt source code
CN113504900A (zh) 一种编程语言转换方法和装置
CN115599386A (zh) 代码生成方法、装置、设备及存储介质
Kurs et al. PetitParser: Building modular parsers
CN116107524B (zh) 低代码应用日志处理方法、介质、装置和计算设备
CN116541020A (zh) 基于领域模型的代码生成方法、装置、设备、介质及产品
US11842170B2 (en) Collaborative industrial integrated development and execution environment
CN116775034A (zh) 内核观测程序的构建方法、装置及设备
CN117472352A (zh) 一种自动驾驶应用的开发方法及装置
CN110737431B (zh) 软件开发方法、开发平台、终端设备及存储介质
CN111831277B (zh) 虚拟数据生成方法、系统、设备及计算机可读存储介质
CN113138767A (zh) 代码语言转换方法、装置、电子设备及存储介质
CN117075912B (zh) 用于程序语言转换的方法、编译方法及相关设备
Simonov DSL Designing And Evaluating For Ocean Models
CN112732254B (zh) 网页开发方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination