一种四轮分布式电机的仿真方法及系统与流程

文档序号:20916724发布日期:2020-05-29 13:37阅读:509来源:国知局
一种四轮分布式电机的仿真方法及系统与流程

本发明涉及自动驾驶技术领域,尤其涉及一种carsim、simulink和python联合用于四轮分布式电机的仿真方法及系统。



背景技术:

近年来,随着自动驾驶技术的蓬勃发展,对该领域的计算机仿真技术也提出了许多新的要求。其中,carsim是专门针对车辆动力学的仿真软件,carsim模型在计算机上运行的速度比实时快3到6倍,可以仿真车辆对驾驶员、路面及空气动力学输入的响应,作为一款成熟的车辆动力学仿真软件,由于其参数化建模的便捷性以及拥有众多可扩展的接口,被广泛应用到自动驾驶和adas算法的开发中;simulink是matlab中的一种可视化仿真工具,是一种基于matlab的框图设计环境,实现动态系统建模、仿真和分析的一个软件包,被广泛应用于线性系统、非线性系统、数字控制及数字信号处理的建模和仿真中,是用来建模、仿真和分析动态多维系统的交互工具,可以使用simulink提供的标准模型库或者自行创建模型库,描述、模拟、评价和精化系统行为;python是一种跨平台的计算机程序设计语言,是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

由于carsim和simulink在车辆动力学、自动驾驶仿真和控制算法开发的便捷性,一直以来carsim/simulink的联合仿真是运用得最多也是最成熟的,但随着智能驾驶发展的需要,一些高级语言的编程如python已经成为算法开发方面的潮流语言,carsim2018版本之后有了专门的python接口,可以用来进行ai算法的开发;但在某些方面的建模如四轮分布式电机、主动悬架等都是在simulink中建立比较方便也更为成熟,这样就迫切需要我们提出一种有效的针对carsim、simulink和python联合仿真的方案。



技术实现要素:

本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。

鉴于上述现有自动驾驶仿真算法存在的问题,提出了本发明。

因此,本发明解决的技术问题是:解决现有自动驾驶仿真中没有实行carsim、simulink和python联合仿真从而造成的某些方面建模不便的问题。

为解决上述技术问题,本发明提供如下技术方案:一种四轮分布式电机的仿真方法,包括:建立基于simulink的四轮分布式电机控制策略模型,并明确所述控制策略模型的输入和输出;基于carsim2019自带的python外接接口,将所述控制策略模型通过代码生成程序编译成c代码,并通过gcc命令将所述控制策略模型的输入输出和控制逻辑编译后打包生成dll文件;在python中通过ctypes调用所述dll文件,实现联合仿真。

作为本发明所述的四轮分布式电机的仿真方法的一种优选方案,其中:所述控制策略模型为carsim外接simulink的四轮分布式电机模型,建立所述控制策略模型具体为:依据扭矩分配策略将总扭矩1:1分配到四个轮端,明确carsim的输出变量为转速和节气门开度;通过电机外特性查表的曲线关系利用simulink中的1-d查表模块得到对应所述转速下的电机扭矩输出;将所述电机扭矩输出再乘以所述节气门开度得到需求扭矩命令;将所述需求扭矩命令输入给电机扭矩输入端,形成一个闭环的控制,建立起所述控制策略模型。

作为本发明所述的四轮分布式电机的仿真方法的一种优选方案,其中:所述控制策略模型在simulink中的code模块下c/c++code中的c代码自动生成功能进行c代码的转换。

作为本发明所述的四轮分布式电机的仿真方法的一种优选方案,其中:在python中通过ctypes调用所述dll文件具体包括:在carsim的python外接接口对应的py文件中调用车辆模型的所述dll文件;添加simulink生成所述dll文件的路径;在所述py文件中修改仿真步长simulinkstep;明确输入输出变量并进行赋值;调用所述dll文件。

作为本发明所述的四轮分布式电机的仿真方法的一种优选方案,其中:所述仿真步长simulinkstep为0.56。

作为本发明所述的四轮分布式电机的仿真方法的一种优选方案,其中:明确输入输出变量并进行赋值具体包括:定义总的电机扭矩输入为tc_input=300;定义ctypes调用的格式;定义所述控制策略模型的输入为tc_input;定义simulink输出变量的数据格式以及输出的四个轮端的分布式电机扭矩分别为tc_output0、tc_output1、tc_output2和tc_output3;通过import_array命令来调用对应carsim的python外接接口中所控制的量。

为解决上述技术问题,本发明还提供如下技术方案:一种四轮分布式电机的仿真系统,包括:建立模块,用于建立基于simulink的四轮分布式电机控制策略模型;定义模块,用于明确所述控制策略模型的输入输出和控制策略;转化模块,用于转化所述定义模块明确的输入输出和控制策略成c代码,并打包生成dll文件;调用模块,用于在python中通过ctypes来调用所述dll文件。

作为本发明所述的四轮分布式电机的仿真系统的一种优选方案,其中:所述转化模块具体包括:转化单元,用于转化所述输入输出和所述控制策略成c代码;生成单元,用于将转化的所述c代码打包生成所述dll文件。

作为本发明所述的四轮分布式电机的仿真系统的一种优选方案,其中:所述调用模块具体包括:调动单元,用于在carsim的python外接接口对应的py文件中调用车辆模型的所述dll文件;修订单元,用于修改仿真步长simulinkstep;赋值单元,用于明确输入输出变量并进行赋值。

本发明的有益效果:本发明设计了一种高效的carsim、simulink和python联合仿真方法,实现了carsim车辆动力学模型、simulink控制逻辑和基于python的ai算法的集成仿真。本方法快速有效,并且利用了carsim自带python接口的机理,执行起来方便,为广大自动驾驶设计公司和自动驾驶仿真设计工程师们在遇到此类问题时候,以及如何实现多种算法的联合仿真过程指明了道路。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:

图1为本发明提供的四轮分布式电机的仿真方法的流程图;

图2为本发明提供的四轮分布式电机的仿真系统的模块图;

图3为本发明提供的四轮分布式电机的仿真方法中的四轮分布式电机模型示意图;

图4为本发明提供的四轮分布式电机的仿真方法中的电机外特性曲线;

图5为本发明提供的四轮分布式电机的仿真方法中四轮分布式电机模型的控制逻辑部分;

图6为本发明提供的四轮分布式电机的仿真方法中gcc编译后的simulink模型c文件夹示意图;

图7为本发明提供的四轮分布式电机的仿真方法中在py文件中添加simulink模型路径的示意图;

图8为本发明提供的四轮分布式电机的仿真方法中在py文件中设置仿真步长的示意图;

图9为本发明提供的四轮分布式电机的仿真方法在py文件中定义输入输出变量并进行赋值的示意图;

图10为本发明提供的四轮分布式电机的仿真方法的仿真原理图;

图11为本发明提供的四轮分布式电机的仿真方法中carsim通过python控制的输入接口变量示意图;

图12为本发明提供的四轮分布式电机的仿真方法的仿真运行过程图;

图13为本发明提供的四轮分布式电机的仿真方法的仿真结果图;

图14为图13的仿真曲线局部放大图;

图15为本发明提供的四轮分布式电机的仿真方法的仿真结果图的放大图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明,显然所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护的范围。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。

其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。

本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度、宽度及深度的三维空间尺寸。

同时在本发明的描述中,需要说明的是,术语中的“上、下、内和外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一、第二或第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

本发明中除非另有明确的规定和限定,术语“安装、相连、连接”应做广义理解,例如:可以是固定连接、可拆卸连接或一体式连接;同样可以是机械连接、电连接或直接连接,也可以通过中间媒介间接相连,也可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

实施例1

请参阅图1和图3~15,为本发明提供的四轮分布式电机的仿真方法的第一个实施例:一种四轮分布式电机的仿真方法,包括:

建立基于simulink的四轮分布式电机控制策略模型,并明确控制策略模型的输入和输出;

基于carsim2019自带的python外接接口,将控制策略模型通过代码生成程序编译成c代码,并通过gcc命令将控制策略模型的输入输出和控制逻辑编译后打包生成dll文件;

在python中通过ctypes调用dll文件,实现联合仿真。

需要说明的是:carsim老版本中是没有直接建立电机模型的功能,2019版本开始可以直接建立电机模型,但也仅仅是针对单电机模型或者是等效单电机模型,而实际的电动车往往都会涉及到双电机或四轮分布式电机驱动模型,这种模型只能通过外接simulink接口的方式来进行,以图3中的一种1:1扭矩分配的模型来近似代替。

具体的,本控制策略模型为carsim外接simulink的四轮分布式电机模型,建立本控制策略模型具体为:

依据扭矩分配策略将总扭矩1:1分配到四个轮端,明确carsim的输出变量为转速和节气门开度;

通过图4中显示的电机外特性的曲线关系,利用simulink中的1-d查表模块得到对应转速下的电机扭矩输出;

将电机扭矩输出再乘以节气门开度得到需求扭矩命令,即carsim中的车辆模型在该工况和驾驶员操作下所需要的实时扭矩输入;

将需求扭矩命令输入给电机扭矩输入端,形成一个闭环的控制,建立起控制策略模型。

进一步的,控制策略模型在simulink中的code模块下c/c++code中的c代码自动生成功能进行c代码的转换。

需要说明的是:为了方便转换成c代码,这里取图3中的控制逻辑部分进行转化的说明,如图5所示:

图中左边1的输入就是总的电机扭矩输入(峰值扭矩为270nm),右边1的输出为四个轮端的电机扭矩输出。将此简化模型在simulink中的code模块中进行c代码的转换,然后通过gcc命令(gcc是一种专业处理c、c++等语言并将其编译生成动态链接dll文件的一种编程语言译器):

d:\>cdsimulink_2_c

d:\simulink_2_c>x86_64-mingw32-gccert_main.cengmodel_2.c-shared-oengmodel_2.cdll

d:\simulink_2_c>

将simulink模型的输入输出和控制逻辑打包生成dll文件,得到如图6所示的一个文件夹。

进一步的,在python中通过ctypes调用dll文件具体包括:

在carsim的python外接接口对应的py文件中调用车辆模型的dll文件(一般在carsim工作目录的\extensions\custom_py文件夹中);

添加simulink生成dll文件的路径,如图7所示;

在py文件中修改仿真步长simulinkstep,如图8所示;

明确输入输出变量并进行赋值;

调用dll文件。

具体的,设置的仿真步长为0.56。

进一步的,如图9所示,明确输入输出变量并进行赋值具体包括:

定义总的电机扭矩输入为tc_input=300;

定义ctypes调用的格式为ctypes.c_double;

定义控制策略模型的输入为tc_input;

定义simulink输出变量的数据格式以及输出的四个轮端的分布式电机扭矩分别为tc_output0、tc_output1、tc_output2和tc_output3;

通过import_array命令来调用对应carsim的python外接接口中所控制的量,共八个:四个轮端的电机扭矩输入和四个车轮转角的实际输入。

具体的,import_array命令具体为:

import_array=

[tc_output_0,tc_output_1,tc_output_2,tc_output_3,34.9167,30.6667,0,0]。

本发明提出了一种carsim、simulink和python三方联合仿真的方法,利用carsim仿真环境中的python接口,以及该接口通过调用ctypes来关联车辆dll文件的机理,将simulink的输入输出和控制逻辑打包生成c代码和dll文件,再在python接口对应的py文件中进行二次调用,最后集成在python接口中对车辆进行控制及相关的信息反馈。其中,carsim通过python控制的输入接口变量见图9所示,simulink对应的控制逻辑和输入输出变量均可以在所生成的.c文件中可以查看到。三方联合仿真原理图如图10所示,carsim通过python控制的输入接口变量如图11所示。

现在将如图3的四轮分布式驱动电机控制的simulink模型和carsim自带的e级suv车辆放在python接口中,进行基于四个轮子扭矩和四个车轮转向的联合仿真,可以看到,当输入总电机扭矩为300nm的时候,simulink每一步输出的四个车轮扭矩均为270nm,如图12所示,这完美地反应了之前图5中的控制逻辑。另外,不考虑转向、制动和其他外部输入的情况下,carsim车辆模型也会随着提供的300nm的扭矩仿真运行,仿真结果如图13所示。

将图13中第九张图的车轮输出扭矩结果放大,可以看出四个车轮的输出扭矩也一直是270nm,如图15所示。

本发明设计的carsim、simulink和python三方联合仿真的方法,相较于其他方法,比如carsim内嵌的python库(比较有限)和在simulink环境下调用python的方法都更为快速准确,仿真结果也能够完美的体现车辆、逻辑和控制的有效结合。为我公司及其他自动驾驶设计公司在后续控制逻辑和ai算法的开发如:四轮分布式电机、四轮转向、mrc减震器和主动空气弹簧等都提供了一种快速有效的联合仿真的实现方法。

实施例2

请参阅图2,为本发明提供的四轮分布式电机的仿真系统的第一个实施例:一种四轮分布式电机的仿真系统,包括:

建立模块100,用于建立基于simulink的四轮分布式电机控制策略模型;

定义模块200,用于明确控制策略模型的输入输出和控制策略;

转化模块300,用于转化定义模块200明确的输入输出和控制策略成c代码,并打包生成dll文件;

调用模块400,用于在python中通过ctypes来调用dll文件。

进一步的,转化模块300具体包括:

转化单元,用于转化输入输出和控制策略成c代码;

生成单元,用于将转化的c代码打包生成dll文件。

进一步的,调用模块400具体包括:

调动单元,用于在carsim的python外接接口对应的py文件中调用车辆模型的dll文件;

修订单元,用于修改仿真步长simulinkstep;

赋值单元,用于明确输入输出变量并进行赋值。

应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。

此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。

进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、ram、rom等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。

如在本申请所使用的,术语“组件”、“模块”、“系统”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互)的信号,以本地和/或远程过程的方式进行通信。

应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1