使用SimMechanics创建Stewart平台模型


摘要

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

Stewart平台的各种应用

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

斯图尔特平台的规格

Stewart平台是一个用于位置控制的机械设计的经典例子。它是一种并联机构,由连接固定底板的刚体顶板或移动板组成,其定义为在接地底座上至少有三个固定点,并与六个独立的运动腿相连。通常,这六个支腿通过位于每个支腿两端平行的万向节连接到底板和顶板。双腿的上半身和下半身可以调整,使每条腿的长度可以变化。

移动平台的位置和方向取决于调整的六个腿的长度。Stewart平台可以用来定位平台在六个自由度(三个转动自由度,以及三个平移自由度)。一般来说,顶板是三角形的,并从底部板旋转60度,使所有的腿彼此相等的距离,每个腿独立于其他的移动。

Stewart平台的优势

工程师和研究人员对Stewart平台的许多变体进行了研究。大多数变体都有六个线性驱动腿,腿-平台连接的组合各不相同。在许多类型的运动控制平台中,Stewart平台非常有用,因为它是广为接受的运动控制装置设计。这是largely,因为系统的运动范围广,定位准确。它为给定的结构质量提供了大量的刚度,使Stewart平台系统能够提供位置确定性的重要来源。

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

定义Stewart平台的控制问题

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

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

使用SimMechanics构建Stewart平台模型

在本文中,我们将演示如何使用SimMechanics、Simulink和MATLAB来建模和模拟Stewart金宝app平台的行为。SimMechanics将用于建模系统的机械部件,而Simulink将用于建模控制器。金宝app使用来自SimMechanics的预定义库,我们将能够在不需要明确推导运动方程的情况下对Stewart平台进行建模,这是一个冗长且容易出错的过程。

用SimMechanics建模物理组件

我们将首先使用SimMechanics构建植物模型。Stewart平台的机械部件包括一个顶板、一个底板和连接顶板与底板的六个支腿。整个系统有6个自由度。每个腿子系统包含两个通过圆柱形关节连接在一起的物体。所述上体通过万向节与所述顶部活动板连接,下体通过第二万向节与所述底座连接。

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

在开始建立Stewart平台的物理模型时,我们首先需要定义相对于惯性系(或世界)的附着点。我们使用SimMechanics中Bodys Library中的接地块来定义该附着点。接地块用作附着系统组件的固定点。

现在,我们将通过将接地块连接到通用关节块,并将其连接到身体块来创建小腿来构建Stewart平台的腿。接下来,我们添加另一个身体块来表示大腿。然后,我们使用圆柱形关节块将小腿连接到大腿,使整个腿能够调整i通过在一个平移和一个旋转自由度中移动来测量长度。接下来,我们只需添加另一个连接到大腿体块的通用关节块,它最终将连接到顶板。

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

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

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

在SimMechanics中,使用m文件脚本和自定义库块是一项强大的技术,它使您能够创建复杂的机械模型。我们在这个例子中演示了这种技术。

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

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

函数=π/ 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”——高度* [0 (2,6);1 (1,6)];腿部= pos_top - pos_base;[];[];For I = 1:6, leg_length(I) = norm(legs(I,:));Leg_vectors (i,:) = legs(i,:) / leg_length(i);结束

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

因为我= 1:6,rev1十字架(我:)= (leg_vectors(我,:),z_axis);Rev1 (i,:) = Rev1 (i,:) / norm(Rev1 (i,:));rev2(我:)= -十字架(rev1(我,:),leg_vectors(我,:));Rev2 (i,:) = Rev2 (i,:) / norm(Rev2 (i,:));cyl1(我:)= leg_vectors(我:);rev3(我:)= rev1(我:);rev4(我:)= rev2(我:);结束

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

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,我是腿部的附着点在顶板中相对于顶板坐标系,P是顶板相对于底板的位置,Pb,我是腿部的附着点在底板中相对于底板坐标系,以及ln,我是腿的标称长度.腿轨道子系统和这个子系统中的所有其他模块对每一个腿执行这个方程。

简单PID低电平控制器

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

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

线性化模型

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

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

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

sim(“StewartPlatformequirement”);u=力;

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

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

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

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

[A, B, C, D] = minreal (A, B, C, D);

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

多变量控制器的设计

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

模拟和可视化模型

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

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

一旦我们选择了想要代表身体的形状,我们就会要求SimMechanics在模拟过程中绘制动画表示。现在我们可以模拟这个模型。在仿真过程中可视化我们的模型可以很容易地看到,我们的模型模拟的速度比标准PC上的时钟时间快。

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

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

未来的发展方向

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

在这个例子中,斯图尔特平台的其他组件没有被探索,如直线电机、限位开关和安全关键逻辑。可以使用Simulink、statflow、SimMechanics和SimPowerS金宝appystems轻松地执行这些任务。

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

2002年出版的