基于Simulink的多体机械系统模型转换方法设计与实践
2023-04-19石永康
石永康,王 垚,邹 楠,于 超,李 梁,李 鹏
新疆大学, 乌鲁木齐 830017
0 引 言
国家航天局编制的《2016中国的航天》[1]、国家国防科技工业局编制的《航天发展“十三五”规划》[2]、《中国制造2025重点领域技术路线图》[3]中将大型航天器提上发展日程,载人航天器、探月工程、高分辨率对地观测系统、北斗导航系统等被列为重大科技专项.然而,这些大型航天器对位形精度、振动水平等具有苛刻要求[4],这与其柔性大、阻尼弱、基频低、模态密集、时变的动力学特性[5-7]相矛盾,所以需要建立精确的模型,准确预测其动力学响应,才能设计出满足要求的挠性航天器机械系统及其控制器[8-9].
柔性多体动力学实时仿真算法一直以来是一个有挑战的研究领域[10].美国喷气推进实验室(JPL)的RODRIGUEZ创造出空间算子代数(SOA)理论[11-13],然后又与其同事JAIN等基于该理论得到递推形式的柔性多体动力学方程[14],并完成了柔性多体动力学实时仿真算法软件包(dynamics algorithms for real-time simulation,DARTS)的开发,将DARTS软件包成功应用于Galileo航天器、Cassini探测器等的地面仿真试验中[15].中国空间技术研究院的孟占峰在继承前人研究成果的基础上,将FEATHERSTONE提出的铰接体惯量[16]的概念首次应用到柔性多体动力学方程的推导中,使得递推形式的算法更加直接、严格、物理意义也更明确,其数值计算也很容易实现[17],进一步完善了DARTS航天器动力学仿真软件包,使之能处理正、逆混合动力学问题,变拓扑结构问题,满足实时仿真的需求.但是,在进行仿真之前,尚需手工编写描述航天器多体机械系统的模型文件,操作繁琐,且容易出错,使得其应用和推广一直受阻.本文研究DARTSM软件包的图形化建模方法,将为其开发一个更直观、便捷的建模工具.
SimMechanics是依据物理建模(physical modeling)的概念开发的多体机械系统模块化框图建模(block diagram modeling environment)仿真工具箱[18].SimMechanics提供表示物理意义的构件、铰链、约束等模块组,使用子系统模块的方式来组织管理各级子系统模型.用户只要拖放并连接这些模块就可以组建所需要的机械系统,而无需列写庞杂晦涩的动力学方程,无需编写模型代码,其建模过程极为简单快捷,可以用2个字概括为“拖拽”.然而,SimMechanics使用标准牛顿动力学理论来推导多体机械系统的动力学微分方程,构件的柔性也被忽略了,导致模型精度欠缺,另外,由此类模型所自动生成的代码只能在Matlab自身的xPC平台上运行,且不是真正的实时代码,使得其在大型机械系统中的应用受到了限制.
综上可知,SimMechanics的图形化建模方式简单、快捷,而DARTSM中的动力学模型更精准,算法更高效,且支持实时仿真,因此,本文将两者的优点相互结合,通过开发相应的转换程序进行模型转换(本文称该转换程序为模型转换器),从而实现两者优势的结合.本文模型转换的总思路如图1所示,将模型转换器导入SimMechanics建模环境下的模块化框图模型文件,提取多体机械系统的建模信息,如图1中的110步所示;利用中性数据格式(neutral data format)存储多体机械系统的拓扑结构信息,见图1中120步;模型转换器根据中性数据格式对110步所提取的建模信息进行必要处理,使之与DARTSM建模环境下的所需要的模型数据相匹配;生成多体机械系统的C++模型文件,如图1中140步所示
(本文各图中的编号只是指明步骤或构件的一个序号,该序号也可以改成1、2、…).
1 多体航天器SimMechanics建模
1.1 SimMechanics模型
利用SimMechanics可以很方便地为大型航天器中的复杂机械系统(开环或闭环多体系统)建立模块化框图模型.图2为某一航天器机械系统示意图,如图所示,航天器200以空间桁架结构210为飞行器平台,210上对称安装有4块太阳能电池阵,依次标号为220、230、240、250,且分别通过转动副与平台210相连.260为航天器上搭载的Six-DoF机械臂子系统,各相邻构件之间的铰接关系如下:基座261与平台210之间为滑移副,上臂262与261之间为转动副,前臂263与262之间为转动副,手爪264与263之间为转动副,手指265、266与264之间为滑移副.图中箭头表示关节运动方向.
图2 大型航天器机械系统示意图及编号Fig.2 Schematic diagram and number of mechanical system of large spacecraft
在Matlab/SimMechanics中搭建航天器机械系统200的模块框图模型如图3所示,中心体模块对应飞行器平台210,依次与六自由度铰模块、地球模块、机械系统环境模块相连,图3中的太阳能电池阵01~04模块依次对应太阳能电池阵220~250,它们分别通过转动副01~04模块与平台210即中心体模块相连,中心体模块上对应的连接端口依次为CS3~CS6.图中灰色的机械手子系统模块为机械臂子系统260的子系统模块,从图中可以看出该子系统已被封装为下一级子系统模型,子系统的模块框图展开如图4所示.基座模块向内通过滑移副01与上一级的中心体模块相连,向外通过转动副05模块与上臂模块相连.前臂模块向内以转动副06与上臂相连,向外以转动副07与手爪模块相连,末端为手指01~02模块,分别通过滑移副02~03模块与手爪相连.根据多体动力学相关理论,可以称手指01为手爪的外接构件,滑移副02为手爪的外接铰链,内接构件、内接铰链反之.
图3 航天器机械系统SimMechanics模块框图Fig.3 SimMechanics block diagram of spacecraft mechanical system
图4 机械臂子系统SimMechanics模块框图Fig.4 SimMechanics block diagram of manipulator subsystem
1.2 SimMechanics模型文件的解析
SimMechanics模型所对应的模型文件与Simulink模型文件格式一致,为一分层结构的 ASCII代码文件,主要内容为描述模型的一系列“参数名称—参数值”对(
为节省版面,将原本单独占一行的“}”符号提前到该代码区前端界定符“{”的同一行,之间的省略号表示该代码区所包含的一系列“参数名称—参数值”对,如需了解详细请读者自行查看模型文件和MATLAB帮助文档[18].另外,为便于理解,这里将整个代码区按层级关系逐一标注,每对花括号对应一层,最顶层的一对花括号记为第1层,其他依次为第2层、第3层…,手工添加的注释以“%”号开头,注意,源代码中并无此注释内容,本文为方便读者理解而添加的.
从附录中可得完整的模型文件最顶层为Model代码区,记为层1,其下包含Simulink.ConfigSet、BlockDefaults、BlockParameterDefaults、Annotation-Defaults、LineDefaults、System等代码区[19],这些代码区均处于第2层.第2层的System代码区为航天器多体机械系统的最顶层,该层包含图3所示各模块及模块间连线的代码区,其中子系统模块代码区对应图3所示机械臂子系统,机械臂子系统中的具体模块在第4层System代码区中.各代码区含义见附录中注释.下文选取航天器机械系统所对应的第2层System代码区进行具体说明.
图5 机械臂子系统Base模块需提取的“参数名称—参数值”代码段Fig.5 Code segment of “parameter name-parameter value” to be extracted from base module of manipulator subsystem
第2层的System代码区和第4层的System代码区都包含同一层级水平上的构件、铰链、连线等代码区.具体来说,第2层System代码区包含中心体、地球、机械系统环境、机械臂子系统模块及其它如太阳能电池阵01、转动副01等代码区.第4层System代码区包含基座、手指01、滑移副、连线等代码区.本文以第4层System代码区中基座模块所对应的代码为例,反向推演出SimMechanics对多体机械系统的基本建模方法,其代码如图5,为节省篇幅这里只列出与建模相关的代码,各“参数名称—参数值”对的含义请参考图中注释.
SimMechanics中包含的基本模块有铰链、构件等类型.通过前述模型文件的“解析”可知,SimMechanics中各模块按约定方式、层级、参数等来定义,例如,铰链类模块是通过给定相对运动的方向以及基准轴来定义铰链的;构件类模块是通过给定构件的质量和转动惯量等参数,以及给定构件的固连坐标系来定义构件的,如图5中基座构件代码所示,其中固连坐标系(CG、CS1、CS2等)的作用有:确定重心的位置,作为基座附属外接/内接构件及铰链方位的参考坐标系[18].
2 DARTSM软件包多体系统建模
DARTSM是使用C++编写,用于复杂航天器动力学分析与仿真的软件包,DARTSM支持高可信性、柔性体、及多任务仿真计算.DARTSM软件包主要包括初始化模块、动力学建模模块、仿真计算模块.
初始化模块完成航天器机械系统模型参数、空间环境及驱动、仿真控制以及结果输出等初始设置.由于DARTSM缺乏用于机械系统建模的软件界面,初始参数的设定是通过编写固定格式的C++语句段来实现的,也就是说,需要手工编写航天器机械系统的模型文件,这对于大型航天器的建模来说工作量大,且建模过程无法直观描述,容易出错.
动力学建模模块包括航天器机械系统物理模型、轨道模型的建立以及递推形式多体动力学方程的推导.该模块为机械系统建模提供各种铰链和构件.其中的铰链列表为:固接(0)、滑移副X(1)、滑移副Y(2)、滑移副Z(3)、转动副X(4)、转动副Y(5)、转动副Z(6)、万向节XY(7)、万向节YZ(8)、球绞(8)、六自由度虚铰(10),括号中的数字为区分不同铰链的标识.
仿真计算模块提供正动力学求解、逆动力学求解、变拓扑结构问题等解算模式,支持对仿真结果保存.其中变拓扑问题求解时需启动碰撞检测.
DARTSM软件包仿真的流程主要包括初始化、机械系统建模、生成递推形式动力学方程、添加驱动、仿真运算、结果保存.其中机械系统建模是本文要重点解决的问题,对其进行详细分析.
对于多体航天器,DARTSM引入图论的理论,将其分解为一个中心体和多个附属构件或附属机构,首先以中心体为多体机械系统树状拓扑的根节点,建立中心体的模型,然后建立附属构件或机构的模型.具体建模过程如图6所示.
1)中心体建模
中心体模型又包括轨道动力学模型和中心体物理模型.
轨道动力学模型:生成一个以六自由度虚铰与惯性系相连的中心体DARTSSatellite,设置其内接构件为空(NULL);根据bPositionVelocity的值,设定中心体惯性系下的初始位置和速度或者是轨道要素rvInertial.这里用虚铰表示航天器与地球的相对轨道运动关系.其中bPositionVelocity、rvInertial等均属于DARTSM软件参数.
物理模型:设置中心体的运动学、动力学参数.根据init->QuaternionFrame的值,设定中心体在惯性系下的姿态四元素qECI;根据init->AngularVelocityFrame的值,设定其初始角速度wBodyWrtECIBodyPrj.
2)添加附件
根据init->totalBodyNumber确定附件的数目,进而确定附件生成函数的循环次数.根据内接构件编号init->RigidBody[i].baseID及铰链类型init->RigidBody[i].jointType在此编号的内接构件上生成一个新的铰链,并设置铰链相对于内接构件本体坐标系的位姿及初始速度;生成铰链类型为joint的附属构件,设置其运动学参数、动力学参数,并设置其编号init->RigidBody[i].bodyID及其他相关参数,开始生成下一个附件,直到循环结束.
机械系统各构件的建模顺序与初始化模型文件中构件的编号有关,模型文件通过构件编号和内接构件编号来描述机械系统的拓扑结构,可以是链状拓扑系统或树状拓扑系统.在建模的过程中,基于铰链生成所关联的构件,这与SimMechanics中铰链和构件相互独立的情况不同,比SimMechanics中用连线来表示相邻关系更简洁.由此也可以看出,DARTSM采用了拓扑树的建模思路及更简洁的机械系统参数描述.
图6 航天器机械系统建模过程示意图Fig.6 Modeling process of spacecraft mechanical system
图7 机械臂子系统中性数据格式的匹配矩阵NFig.7 Matching matrix N of neutral data format of manipulator subsystem
3 模型转换器设计及实现
3.1 模型转换方法
模型转换是将某个建模环境或软件中生成的原始模型转变为另一个建模环境或软件能使用或能识别的目标模型,也就是要将原始模型各要素的全部或部分信息传递到目标建模环境/软件中,同时必须得到一个信息完备的新模型,达到与原模型等价的结果[20].本文需要将SimMechanics图形化建模环境中的模型转换到DARTSM多体系统仿真环境中.然而不同建模环境对模型的描述不同,所使用的数据格式也不同,在某一建模环境中生成的模型就不能在另一建模环境中直接使用.
本文利用中性数据格式作为转换的桥梁,将不同建模仿真环境中的模型信息关联起来,模型转换方法如前文图1所示.该方法设计一个中性数据格式的(N+1)×(N+1)匹配矩阵(N为模块框图模型中各级子系统中构件或铰链模块的数目),用它来存储机械系统的拓扑结构并与DARTSM仿真软件包中的铰链列表相关联,如图7是以机械臂子系统的匹配矩阵的一个示例.图7中左上角的方框内是一个N×N的子矩阵,其用来表示模块框图模型中构件模块与铰链模块的连接关系,该子矩阵的每一列表示一个构件模块,每一行表示一个铰链模块;该子矩阵中的数字1表示对应列的构件模块是对应行的铰链模块的外接构件,数字0则表示无连接关系;矩阵的第N+1行来存储对应构件模块上与其内接铰链模块相连的坐标系编号,矩阵的第N+1列用来将SimMechanics中铰链模块与DARTSM中的铰链列表(见第3节)相关联;矩阵中(N+1,N+1)处的元素无意义.
3.2 转换器编程实现
本文选择与DARTSM一致的编程语言开发模型转换的转换程序,并将该程序作为一个模块添加到DARTSM软件包中,从而使转换得到的目标模型可直接进行动力学仿真运算.由以上第2节中SimMechanics原始模型文件和第3节中目标模型的内容可知,DARTSM中构件所包含的信息大致对应于SimMechanics中构件模块及该构件内接铰链模块的信息总和,构件、铰链等模块的信息见前文.
为转换程序开发构件、各种类型的铰链、连线等C++类,各个类的数据成员与SimMechanics中同一类型的模块代码区中建模所需参数一一对应.转换程序读取SimMechanics模型文件并从中提取出建模信息(包括“参数名称—参数值”等)存储到各个C++类中,开发类的成员函数用于数据处理及其他操作,这里不再一一展开叙述.
模型转换器的具体工作流程如图8所示,下面以航天器200为具体实例说明模型转换的详细过程.
步骤1:转换器导入SimMechanics模型文件500.由于前文已对SimMechanics模型文件进行了代码区层级的划分,转换程序只需按照代码区的自然顺序搜索并判别各层代码区及机械系统代码区中各子模块代码区,利用代码区前后的花括号来控制各级层次关系.转换器读取各代码区的参数名称并判断是否为DARTSM建模所需信息,对于构件类型的模块,需读取图5所示的基本信息,提取的信息存储在对应C++类对象中,如构件类对象、连线类对象,以供处理器后续使用.
步骤2:建立各级机械系统中性数据格式的匹配矩阵.找到该级机械系统根节点模块,一般为与地球模块或与图4中PMIOPort类型的Conn模块相连的构件模块.再以根节点模块开始按模块框图连线秩序查找其外接连线模块、铰链模块等,依次循环直到末端或与已知构件模块形成闭环为止.每完成一次循环,填写匹配矩阵对应元素,例如图7中下标为(1,1)、(1,7)、(7,1)的元素.
图8 模型转换器将航天器200模块框图模型转换为DARTSM模型的工作流程 (图中省略线段为其他模块或C++类如铰链模块、铰链类等)Fig.8 The model converter converts the block diagram model of spacecraft 200 module into the workflow of DARTSMmodel (the lines omitted in the figure are other modules or C + + classes, such as Joint module, Joint class, etc.)
步骤3:根据匹配矩阵,按照DARTSM建模规范重新组装所有构件类和铰链类对象.依次查找中性格式的匹配矩阵,根据其数值建立构件类对象的内接构件指针、外接构件指针及外接铰链指针,本文使用指针是为了便于对机械系统进行拓扑树遍历,并对步骤1中所提取的数据进行处理,如坐标系转换、单位换算等,使符合DARTSM初始化数据规范.
步骤4:对构件类对象进行深度优先遍历,最终生成DARTSM仿真环境中的航天器机械系统模型文件.所编写的转换程序使用了中性数据格式的匹配矩阵来描述机械系统的构型信息,从而只需对物理模型进行数值处理.另外,模型转化过程中,借助了图论的相关理论,使得多体机械系统的描述极为精简,同时,使用拓扑树遍历的方式进行模型重构,生成目标模型文件,便于编程实现.
4 结 论
本文深入探究了MATLAB模块化框图建模技术,解析出SimMechanics模型文件对多体机械系统模型的建模规则和方法,设计了一个中性数据格式的匹配矩阵,使SimMechanics模型信息与DARTSM软件中的模型信息在“参数名称—参数值”层面上一一关联,而无需考虑复杂的物理系统.利用中性数据格式进行模型转换的方法还可以应用到其他建模环境之间的模型转换.
所开发的SimMechanics-to-DARTSM模型转换器将图形化建模环境下的模型转换到航天器多体动力学专用仿真环境下,从而可以为SimMechanics模块框图模型建立更精确的递推形式的动力学方程,进而实施实时仿真;利用SimMchanics快捷、友好的建模界面,能高效地为复杂航天器生成初始化模型文件,解决DARTSM缺少建模软件界面的问题;由于Simulink与SimMechanics的图形化建模环境基本相同,因此,本文模型转换器的设计方法同样适用于其他Simulink模型文件的处理或转换.