技术文章和通讯

使用SimMechanics创建Stewart平台模型


摘要

SimMechanics与Simulink和MATLAB相结合,使工金宝app程师能够对复杂的机械系统建模,仿真和分析模型,并开发机械系统的控制器。在这个技术示例中,我们将研究如何使用SimMechanics建模物理组件,综合控制器,并模拟Stewart平台(一个六自由度定位系统)的闭环性能。Stewart平台在许多应用中用于定位对象。

斯图尔特平台的各种应用

Stewart平台最初设计于1965年,是一种飞行模拟器,目前仍被广泛用于此目的。从那时起,各种各样的应用都受益于这种设计。一些使用Stewart平台设计的行业包括航空航天和国防、汽车、运输和机床技术,他们使用该平台进行飞行模拟、处理车辆维护和设计起重机起重机机构。斯图尔特平台的设计也被用于卫星通信天线和望远镜的定位,并应用于造船、桥梁建设、运输和月球车上的钻井平台。

Stewart平台的规格

Stewart平台是用于位置控制的机械设计的经典示例。它是一种平行的机构,其包括连接到固定基板的刚体顶板或移动板,并且由连接到六个独立运动腿的接地基座上的至少三个固定点限定。通常,六个腿通过位于每个腿的两端的平行的通用接头连接到基板和顶板。腿部设计有可以调节的上身和下主体,允许每个腿长度变化。

移动平台的位置和取向根据调节六条腿的长度而变化。斯图尔特平台可用于将平台定位在六个自由度(三个旋转自由度,以及三个翻译程度的自由度)。通常,顶板是三角形的,并且从底板旋转60度,允许所有腿彼此等距离,并且每个腿以独立于其他腿移动。

斯图尔特平台的优势

工程师和研究人员已经检查了Stewart平台的许多变体。大多数变体有六个线性驱动腿,腿平台连接的不同组合。在许多类型的运动控制平台中,Stewart平台是一个有用的研究,因为它是一个广泛接受的运动控制设备的设计。这主要是因为系统的大范围运动和精确定位能力。对于给定的结构质量,它提供了大量的刚度或刚度,使Stewart平台系统提供了一个重要的位置确定性来源。

斯图尔特平台的设计支持高承载能力。金宝app由于设计,腿承受压缩和张紧力,不会屈服于其他设计中发现的不良弯曲力。六个支腿围绕着顶板分开,分担顶板上的负荷。这不同于串行设计,如机器人手臂,负载是支持在一个长的力矩手臂。金宝app

定义Stewart平台的控制问题

在这个例子中解决的问题是找到一种方法来驱动六个腿的力,以适当地定位Stewart平台的移动板给定一个理想的轨迹。对于这个特殊的问题,我们给出了移动板相对于固定基板所需的位置和方向。这些期望的值可能会随着时间而改变。我们希望控制Stewart平台的非线性对象模型,并有输入和输出来实现这一点。这六条腿的力是工厂的输入,而输出是六条腿的长度和速度。我们的任务是创造一种控制策略和设计,使顶板遵循预期的轨迹。我们必须通过驱动六条腿的力来实现这一点,感知腿的长度和速度,并读取所需的轨迹。

传统上,设计Stewart平台控制器的常用方法需要操纵复杂的方程,这些方程建模用于求解力学方程的物理部件。然后,工程师不得不使用复杂的数值积分技术来解决这些方程。随着诸如动态等计算工具的出现仿真软件,现在可以很容易地建模和模拟Stewart平台的机械和控制系统。

使用SimMechanics构建Stewart平台模型

在本文中,我们将展示如何使用SimMechanics,Simulink和Matlab来模拟和模拟Stewart金宝app平台的行为。SimMechanics将用于模拟系统的机械组件,并且Simulink将用于模拟控制器。金宝app使用来自SimMechanics的预定义库,我们将能够模拟Stewart平台而无需明确导出运动方程,这可能是繁琐和错误的过程。

用SimMechanics建模物理组件

我们将首先使用SimMechanics构建工厂模型。斯图尔特平台的机械部件包括顶板,底板和将顶板连接到底板的六个腿。整体系统有六个自由度。每个腿子系统包含两个与圆柱形接头连接的体。上主体使用通用接头连接到顶部移动板,并且下主体使用第二通用接头连接到基板。

使用SimMechanics体块,我们为底板、顶板和上下腿的刚体建模。接下来,我们使用SimMechanics Joint blocks将实体连接在一起。

当开始建立Stewart平台的物理模型时,我们首先需要定义相对于惯性系(或世界)的附着点。我们通过使用《SimMechanics》中的body Library中的Ground块来定义这一点。地块作为一个固定点,用于连接系统组件。

现在我们将建造Stewart平台的腿,通过连接地面块和万向节块,并将万向节块连接到身体块来创建小腿。接下来,我们添加另一个Body块来表示小腿。然后我们使用一个圆柱形关节块连接小腿和小腿,使整个腿在一个平移和一个旋转的自由度移动来调整其长度。接下来,我们简单地添加另一个万向节块连接到上肢体块,这将最终连接到顶板。

Stewart平台的线性驱动是通过改变腿的长度来完成的。为了移动腿部,我们使用了SimMechanics中的Sensor & Actuators库中的关节执行器块。该关节执行器用于控制圆柱关节的平移自由度。(转动自由度不受限制。)一个力信号将被创建并用于驱动,而不是使用位移。这使我们能够创建一个更真实的Stewart平台模型,其中液压执行器可以用于在上下肢之间施加力。我们还使用来自传感器和执行器库的关节传感器块来感知腿的长度,以提取控制器将使用的位置和速度。

通过创建分支组件的库子系统,我们可以轻松地创建Stewart Platform模型分支的6个实例。现在我们可以把每一个连接到我们六个腿的上半部分的关节连接到我们的顶板上。这代表Stewart平台模型的工厂部分,它将接受顶板的驱动输入以及力、位置和速度信号。

使用m文件脚本定义几何图形

使用M文件脚本和自定义库块是SimMechenics中的强大技术,使您可以创建复杂的机械模型。我们在这个例子中展示了这种技术。

在我们用SimMechanics创建Stewart平台模型的物理组件之后,我们需要在初始配置和Stewart平台的动态参数中定义特定的几何形状。这些变量定义将在一个基本的MATLAB脚本中编写,并在我们用于构建SimMechanics模型的块的对话框中引用。

首先,我们定义基本的角度单位转换和轴。

deg2rad = pi / 180;x_axis = [1 0 0];Y_AXIS = [0 1 0];z_axis = [0 0 1];

现在我们定义基座和顶板上相对于基座中心的世界参考系的连接点。下面的定义代表了基座和顶板之间60度的偏移角,基座和顶板的半径,以及系统的初始位置高度。

pos_base = [];pos_top = [];alpha_b = 2.5 *函数;alpha_t = 10 *函数;身高= 2.0;radius_b = 3.0;radius_t = 1.0;For I = 1:3, % base points angle_m_b = (2*pi/3)* (I -1) - alpha_b;(1) = (2*pi/3)* (i-1) + (i-1));pos_base (2 * i0:) = radius_b * (cos (angle_m_b), sin (angle_m_b), 0.0); pos_base(2*i,:) = radius_b* [cos(angle_p_b), sin(angle_p_b), 0.0]; % top points (with a 60 degree offset) angle_m_t = (2*pi/3)* (i-1) - alpha_t + 2*pi/6; angle_p_t = (2*pi/3)* (i-1) + alpha_t + 2*pi/6; pos_top(2*i0,:) = radius_t* [cos(angle_m_t), sin(angle_m_t), height]; pos_top(2*i,:) = radius_t* [cos(angle_p_t), sin(angle_p_t), height]; end

下面将对顶部点的数组进行置换,以便顶部点和底部点中的索引指向单个分支的连接点。板顶坐标系中的点也被定义。计算了支腿向量和单位支腿向量。

pos_top = [pos_top(6,:);pos_top(1:5,:)];body_pts = pos_top' - 高度* [零(2,6);那些(1,6)];腿= pos_top  -  pos_base;leg_length = [];leg_vectors = [];对于i = 1:6,leg_length(i)= norm(腿(i,i :));leg_vectors(我,:) =腿(i,:) / leg_length(i);结束

下面是一个环路,计算将输入到物理工厂模型中的关节块的转动轴和圆柱轴。连接顶板的万向节块有两转,圆柱和圆柱关节块的直线运动有一转,连接底板的万向节块有两转。

对于i = 1:6,Rev1(I,:)=十字架(Leg_Vectors(i,:),z_axis);Rev1(I,:) = Rev1(I,:)/常规(Rev1(I,:));Rev2(I,:) =  - 十字架(Rev1(I,:),Leg_vectors(I,:));Rev2(I,:)= Rev2(I,:)/常规(Rev2(I,:));cyl1(i,:) = leg_vectors(i,:);Rev3(I,:) = Rev1(I,:);Rev4(I,:) = Rev2(I,:);结束

每个体块需要一个定义的重心坐标系统。

Lower_leg = struct('origin', [0 0 0], 'rotation', eye(3), 'end_point', [0 0 0]);= struct('origin', [0 0 0], 'rotation', eye(3), 'end_point',[0 0 0]); / /使用实例对于I = 1:6, lower_leg(I)。原点= pos_base(i,:) + (3/8)*legs(i,:);lower_leg(我)。结束_point = pos_base(i,:) + (3/4)*legs(i,:); lower_leg(i).rotation = [rev1(i,:)', rev2(i,:)', cyl1(i,:)']; upper_leg(i).origin = pos_base(i,:) + (1-3/8)*legs(i,:); upper_leg(i).end_point = pos_base(i,:) + (1/4)*legs(i,:); upper_leg(i).rotation = [rev1(i,:)', rev2(i,:)', cyl1(i,:)']; end

现在我们要计算顶部板,底部板和腿的惯性和质量。计算中使用了钢的密度:

top_thickness = 0.05;base_thickness = 0.05;inner_radius = 0.03;outer_radius = 0.05;密度= 76 e3/9.81;% ^ 3公斤/米

腿的惯性和质量在这里被计算在一个叫做惯性圆柱体的函数中,该函数计算给定密度、长度和圆柱体内外半径的圆柱体的质量和惯性:

[lower_leg_mass, lower_leg_惯性]=惯性圆柱体(密度,…0.75 * leg_length(1)、outer_radius inner_radius);[upper_leg_mass, upper_leg_惯性]=惯性圆柱体(密度,…0.75 * leg_length (1) inner_radius 0);

顶部和基座的惯性和质量在这里使用与腿相同的函数计算,接受密度、板厚和板半径的输入:

[质量,惯性]=惯性圆柱体(密度,…top_thickness radius_t 0);[base_mass, base_惯性]=惯性圆柱(密度,…base_thickness radius_b 0);

控制器的策略

在典型的串行机器人应用中,正运动学问题比较容易解决,而逆运动学问题则比较困难。正运动学问题计算给定关节角的机器人末端执行器的位置和姿态,逆运动学问题计算给定末端执行器位置和姿态的关节角度(倍数)。在Stewart平台,它很容易计算关节角度(腿长度)给定的位置和方向的末端执行器(顶板)。

这个控制器的基本目标是在位置和方向上指定理想的顶板轨迹。然后我们用逆运动学将这个想要的轨迹映射到腿上相应的轨迹。最后,我们对每条腿使用一个较低的水平控制器来命令腿遵循期望的轨迹。这样就避免了Stewart平台的正运动学问题。

该控制器由两部分组成:腿轨迹和控制器。腿轨迹为每个时间步生成所需的腿长。它从理想的旋转和顶部板的位置开始,并计算理想的腿长度来实现这一点。下面的公式计算每条腿的腿长:

在哪里R旋转矩阵将顶板取向相对于底板,PT,I是腿的附着点吗在顶板中相对于顶板坐标系,P是顶板相对于底板的位置,Pb,我是腿的附着点吗在底板坐标系中,并且ln,我腿的标称长度是多少.腿轨道子系统和这个子系统中的所有其他模块对每一个腿执行这个方程。

简单的PID低级控制器

我们首先在经典PID设计的基础上实现一个简单的低电平控制器。这个控制器的输入是实际的腿的位置和速度以及期望的腿的位置。腿轨迹子系统不产生腿速度,尽管一个更复杂的可以。然后我们在位置上形成一个误差,并根据误差的增益和积分创建一个力。我们还提供了一个速度反馈项。

我们可以开发更复杂的低级控制器但首先我们需要线性化平衡点。

线性化模型

我们现在提取了Stewart平台的线性模型,以便我们可以使用更强大的线性控制设计技术,例如那些µ-分析和综合工具箱。

首先,我们必须找到非线性模型的平衡点。我们通过提取保持Stewart平台静止的每条腿的平衡力来做到这一点。这些是当系统处于初始静止状态时所施加的力。为此,我们首先将植物模型提取到一个新的Simulink模型中,然后将致动器块属性设置为运动,并将位置、速度和加速金宝app度设置为零。我们还为每条腿设置了传感器块来提取计算出的力。为了找到作用在模型上的合力为零的平衡点,我们需要改变分析模式参数。

在Simuli金宝appnk模型中,我们选择“模拟”菜单下的“机械环境设置”。这将显示我们为模型设置的力学参数。通过改变分析模式,SimMechanics可以计算向机械系统施加力所导致的运动,或者在机械系统中产生特定运动所需的力。在这里,运动分析模式的选择是因为Stewart平台是一个闭环系统,我们想要计算的力施加没有系统移动。一旦选择了这个,我们就模拟模型,并使用传感器块的输出,以获得当平台处于静止时,每个腿的致动器块将被施加的力。要在MATLAB命令提示符中做到这一点,我们可以使用:

sim(“StewartPlatformEquilibrium”);u =势力”;

现在,我们可以提取线性模型了。为了线性化平衡点附近的模型,我们可以使用linmod命令只对植物模型:

[A, B, C, D] = linmod(“StewartPlatformPlant”,[],u);

这将从SimMechanics模型生成一个LTI状态空间模型,用作控制系统工具箱和µ- 生成控制器模型的分析和综合工具箱命令。

线性化命令返回一个LTI系统,其状态数与机械系统树中的状态数相同(本例中为52)。由于这个模型是封闭的,独立状态的数量更少(在这个例子中是12个)。我们使用minreal功能得到最小实现的工厂与12个状态:

[A,B,C,D] =微米(A,B,C,D);

这些是状态空间矩阵,我们将使用它来设计Stewart平台模型的控制器。

多变量控制器设计

我们现在使用控制系统工具箱µ-分析和综合工具箱,为Stewart平台合成一个多变量,鲁棒控制器。设计的细节(这里没有包含)可以在文件StewartMVController.m中找到。通过更改控制器可配置子系统以使用H_inf控制器,您可以用多变量控制器模拟Stewart平台。

模拟和可视化模型

现在我们已经用Simulink和SimMechanics建模了我们的系统,我们可以金宝app通过模拟系统来验证设计。我们通过在模型窗口菜单栏中选择Simulink和start开始仿真。金宝app在模拟过程中,我们可以使用Scope块查看信号。我们范围中的第一个图显示Body块位置的x、y和z值,表示模型模拟时顶板随时间移动。第二幅图显示了在腿轨迹子系统中计算的腿长期望值与随时间变化的腿长实际值之间的差异。第三个图显示了模拟过程中每条腿上的力。

虚拟现实工具箱或MATLAB图形选项可用于为在SimMechenics中设计的系统创建三维动画。任何一种工具都可用于分析量化机械系统运动的数值结果。让我们查看Matlab图形提供的基本动画。机械环境设置下的可视化选项卡为我们提供了两个选项,用于表示每个主体的形状:等效椭圆形和凸壳。等效椭圆体是基于其质量特性和惯性位置的主体的形状,并且凸壳是基于其坐标系的主体的形状。

一旦我们选择要代表机构的形状,我们就会要求SimMechanics在仿真期间绘制表示动画。现在我们可以模拟模型。在模拟期间可视化我们的模型使得可以轻松看出我们的模型比标准PC上的时钟时间更快地模拟。

使用虚拟现实工具箱可以实现更真实的模型可视化。虚拟现实工具箱使用虚拟现实建模语言(VRML),用用户定义的身体创建和填充虚拟世界。在SimMechanics中使用虚拟现实工具箱的最简单方法是在机械环境设置的可视化选项卡下选择虚拟现实工具箱而不是MATLAB图形。这将为可用于MATLAB图形的身体形状提供相同的选项。选择虚拟现实工具箱后,默认的VRML查看器将打开,显示模型初始位置的表示。

也可以创建或导入Stewart平台的VRML场景,并使用虚拟现实工具箱块将其连接到我们的Simulink和SimMechanics模型。金宝app

未来的发展方向

本文研究了Stewart平台,以及如何使用SimMechanics创建控制器和机械组件的模型。SimMechanics使构建机械设备的层次模型和修改模型设置变得很容易。利用命令行功能对模型进行了修剪和线性化,证明了模型与MATLAB先进控制设计产品的连接是容易的。下载188bet金宝搏最重要的是,这个例子演示了如何在一个环境中进行植物建模、控制器综合和闭环仿真。

在此示例中没有探索斯图尔特平台的其他组件,例如线性电机,限位开关和安全关键逻辑。可以使用Simulink,StateFlow,SimMechanics和SimPower金宝appsystems轻松执行这些任务。

运行此示例所需的文件可以从以下网站下载MATLAB中央

2002年出版的