OpenModelica中的可视化仿真

1 篇文章 1 订阅
1 篇文章 0 订阅

OpenModelica中的可视化仿真

OpenModelica中的可视化仿真主要是关于机械运动的可视化以及运动仿真

在OpenModelica中也提供了大量的案例,案例的目录主要在Modelica-Mechanics-multiBody-Examples这个路径下,想要学习OpenModelica的可视化可以先学习这个路径下的可视化案例。

接下来首先对其中的复合摆以及机械臂案例做代码分析的介绍,希望可以帮助到想要学习OpenModelica的朋友。

1. 复合摆

1.1 综述

复合摆在OpenModelica中的路径为Modelica-Mechanics-multiBody-Examples-Elementary-DoublePendulum

在组件视图中可以看到主要部件之间的连接关系,复合摆主要由两个revolute和两个boxBody组成。其中将第一个revolute1连接在world上,world指的是世界坐标–绝对坐标系,在可视化完成后,用户看见的唯一的坐标,也是一个统一的坐标。然后在revolute1上我们可以看见一个damper,damper组件的作用是为revolute1转轴提供一个阻尼,模仿显示世界中的带有阻尼的运动。

图片1

1.2 组件的介绍

图2为复合摆的组件连接图,其中共有四种组件,下面依次对四种组件进行介绍,介绍的主要内容为组件的接口、组件的运动控制方式以及组件的可视化。

图片2
1.2.1 world组件

world表示世界坐标系+重力场,在惯性系统中使用,模型世界代表一个固定在地面上的全球坐标系。

world中拥有一个frame_b接口(图2中world的1接口),frame_b用于确定坐标原点以及在和其他组件连接时,将其他组件固定在坐标系的原点。

图1中的xyz就代表了world,图中左侧的红色小圆柱revolute1就是通过自身的接口3(frame_a)与world的frame_b相连接固定在坐标原点。

world中引入了在frames包下定义的许多转换旋转坐标系的函数,用于完成系统的旋转。例如axesRotations函数返回方向对象 R,该对象描述沿单位轴从第 1 帧旋转到第 2 帧的方向,就是所改变两帧之间所改变的角度,实现可视化。

1.2.2 damper组件

damper是线性一维旋转阻尼器,一般连接在惯性或齿轮与外壳之间,连接在revolute组件之上,通过tau变量设定剪切扭矩(提供阻力),具体的连接在连接部分中详细讲述。Damper是一个提供阻力的原件只为了模仿现实中轴承或齿轮之间存在的阻力,所以没有可视化。

1.2.3 revolute组件

旋转接头,可以理解为轴承,分内外两层,内层连接frame_a是支撑轴承用于固定,外层是旋转轴承用于旋转。

下图中显示了旋转关节的动画。浅蓝色坐标系是frame_a,深蓝色坐标系是关节的frame_b。黑色箭头是定义平移轴的参数向量“n”(此处:n = {0,0,1},phi.start = 45o)。

在默认情况下revolute是没有外来动力的,使得revolute受力的方式有两种1)如图1中连接boxBody后外层的frame_b就受到了力的作用(这里的力来自于boxBody的重力);2)设置useAxisFlange参数为true,在flange_a和flange_b(图2中的1和2号接口)两个接口上连接外部的部件。连接的部件可以提供动力也可以提供阻力。

revolute组件的可视化通过shape组件实现,这是一个专门用于可视化的组件,shapeType属性设置为cylinder,显示的内容是由系统渲染的圆筒,圆筒的大小、颜色由属性color、length、width设置。

1.2.4 boxBody组件

箱形刚体(一个有质量的长方体),质量和动画属性是根据框数据(内外边框的长宽高)和密度得到的。

可视化通过FixedTranslation实现,通过设置shapeType来设置显示的外观,这里可视化实现和revolute组件使用的组件不相同是因为在revolute中frame_a和frame_b的位置是相同的,但是在boxBody中frame_a和frame_b的位置不同,两端表示长方体的两端,是一个平移关系。frame_a和frame_b需要连接其他组件,在可视化中frame_a和frame_b需要在正确的位置才可以正确的可视化。

下面介绍一些boxBody中的参数以及主要作用,r_0为frame_a(图1中长方体)左侧的三维坐标,v_0为frame_a的速度(坐标的导数、变化率),下图给出了十秒内boxBody2中frame_a相对于x轴的速度和相对于y轴的速度。

img

1.3 接口的连接规则

详细讲述frame_a和frame_b这两个接口,两个接口本质是一样的,在连接时避免出错所以设计a、b两种,接口作用是提供在world坐标系下的坐标,可以通过frame_a.r_0获得,以及用于连接。

例如在revolute1中frame_b和boxBody1中frame_a相连接,会为revolute提供一个扭矩,公式为tau = -frame_b.t*e,tau是revolute1自带的扭矩参数,frame_b与boxBody1相连之后受重力影响因此会收到一个扭矩。

Frame_a和frame_b不但是接口还是参数传递的方式。

2. 机械臂(R3)

机械臂接口连接图

图2.1 组件连接图

2.1 组件介绍

2.1.1 MechanicalStructure组件

MechanicalStructure中包括R3机器人机械臂的极限部分,包括轴承和外壳的组成。

R3机械臂的外观如图2.2,在关闭外观的可视化后,得到图2.3,图中红色部分展现的就是每个组件内部的轴承。

img 旋转结构图

在R3机械臂中所有的机械部件都在MechanicalStructure组件中进行声明,其中包括r1-r6共六个轴承,这里的轴承的复合摆中使用的轴承相同,同样开启了useAxisFlang,轴承受到外力(除去重力的力,例如阻力、驱动力等)。MechanicalStructure中还声明了world世界坐标系,以及七个外观部件(b0-b6),通过BodyShape组件完成可视化,BodyShape是通过shapeType属性控制显示的外观,shapeType属性的值可以是系统自动渲染的3d模型的名字如box等,也可以指定自己想要的dxf文件的地址(目前尝试下需要放在modelica环境路径下,使用绝对路径会出错),使用自己描绘的3d文件无法根据程序中参数改变外观,只能在3d软件中重新描绘,所以3d文件只是做一个展示作用。在使用BodyShape进行可视化时,不管使用的3d文件还是系统渲染的模型都是位于frame_a和frame_b之间,frame_a和frame_b平行。

b0-b6的运动都是通过控制frame_a的坐标变换进行控制的。下图给出了几个轴在一秒内x轴坐标的变换曲线。

关节速率图

在MechanicalStructure中还有一个load组件,一个形状类似于权杖的物体,和前面的b0相同,只是使用了系统的渲染方式,没有使用自己的外观组件。

此外还提供六个Flange_a接口(取名为axis),用于和轴承的Flange_b接口相连接,这个接口的作用是向外提供的统一的接口,作为中间过渡,与axis相连接就是与轴承上的Flange_a接口相连接,轴承的Flange_a接口的作用是根据外部组件收到相关的受力。

2.1.2 AxisType组件

AxisType1的主要作用是将刚刚MechanicalStructure中提到的前三个轴承r1-r3设置为由一个齿轮弹性和轴承摩擦建模的齿轮箱、一个电机模型和一个连续时间级联控制器的形式。该组件是没有可视化外观的,主要是通过flange同MechanicalStructure的axis接口相连接,提供受力。

AxisType2组件和AxisType1组件类似,唯一区别是齿轮箱中的弹性和阻尼未被忽略,连接在轴承r4-r6上。

2.1.3 PathPlanning6组件

设定每个轴的开始和结束角度,各轴最大速度,每个轴的最大加速度,该组件计算给定约束下的最快移动。

该组件向外暴露由六个接口汇聚而成的一个统一接口——controlBus,该接口内部有六个接口,分别与AxisType组件相连接,通过相关变量,控制AxisType的运动角度、速度等。

2.2 接口连接

所有组件都声明在FullRobot中,其中pathPlanning组件内部控制轴运动参数的六个接口会汇聚成为一个统一的接口就是controlBus接口,在FullRobot中同样声明一个controlBus接口,将FullRobot中的controlBus接口与pathPlanning中的controlBus接口相连接,这样在FullRobot中可以之间使用controlbus接口。

FullRobot中还有三个AxisType1接口和三个AxisType2接口以及MechanicalStructure接口,AxisType接口是MechanicalStructure中轴体外力的提供者,所以将AxisType与MechanicalStructure中的axis接口分别对应连接。pathPlanning内部还有axisControlBus接口用于连接AxisType进行数据交互,同样是一一连接。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Open Inventor的卫星姿态控制可视化仿真是一种利用Open Inventor技术来实现卫星姿态控制系统的可视化仿真工具。Open Inventor是一种三维可视化仿真开发工具包,它提供了一套丰富的图形处理和可视化功能,能够方便地创建和展示三维场景。 在卫星姿态控制,姿态是指卫星的空间方向和角度,而姿态控制是通过改变卫星的推力、姿态控制器等方式来维持卫星在轨道上的稳定和目标对准。然而,卫星姿态控制系统的设计和验证是一项复杂的任务,需要进行大量的计算和仿真工作。 基于Open Inventor的可视化仿真工具可以将卫星姿态控制系统的设计、控制算法和仿真场景等进行可视化展示。它可以将卫星的3D模型导入到仿真场景,并实时显示卫星的运动和姿态变化。同时,它也可以将卫星的传感器数据、控制指令和仿真结果进行绘制和分析,从而帮助工程师和研究人员更好地理解和评估姿态控制系统的性能。 利用基于Open Inventor的卫星姿态控制可视化仿真工具,研究人员可以快速建立各种仿真场景,验证不同姿态控制算法的有效性和稳定性。他们可以观察卫星在不同推力和控制指令下的姿态响应,分析其稳定性和规划控制策略。此外,他们还可以进行实时的可视化调试和仿真结果的交互展示,提高卫星姿态控制系统设计和验证的效率和准确性。 综上所述,基于Open Inventor的卫星姿态控制可视化仿真工具是一种便捷、实用的工具,可以帮助研究人员更好地设计和验证卫星姿态控制系统。它将卫星的运动和姿态变化以可视化的方式展示出来,为工程师和研究人员提供了一个直观、高效的仿真平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值