机械臂的多回路PI控制

这个例子展示了如何使用looptune为六自由度机械臂调整多回路控制器。

机械臂模型和控制器

本例使用以下所示的六个程度的自由度机器人臂。此臂由标记的从底部到尖端六个关节的:“转盘”,“二头肌”,“前臂”,“手腕”,“手”和“抓取”。每个关节由DC马达除了使用两个直流电动机串联的二头肌关节致动。

图1:机械手。

cst_robotarm文件”。slx”包含了该系统的机电部分的万博1manbetxSimulink模型。

图2:机器人手臂的S万博1manbetximulink模型。

“控制器”子系统由6个数字PI控制器(每个关节1个)组成。每个PI控制器都是使用Simulink库中的“2-DOF PID控制器”块实现的(参见万博1manbetxPID调优用于定点跟踪和干扰抑制动机的例子)。控制采样时间为Ts=0.1 (10hz)。

图3:控制器结构。

通常,这样的多回路控制器是通过每次调整一个PID循环来依次调整的,并在循环中循环,直到整体性能令人满意为止。这个过程可能很耗时,而且不能保证收敛到最佳的整体调优。或者,您可以使用systune要么looptune根据系统级需求(如响应时间和最小交叉耦合),联合调优所有6个PI循环。

在这个例子中,手臂必须在大约1秒内移动到一个特定的配置,每个关节都要有平滑的角度运动。手臂以完全伸展的垂直姿势开始,除了二头肌角度为90度外,所有关节角度为0。末端配置由角度位置指定:转台= 60度,二头肌= 80度,前臂= 60度,手腕= 90度,手= 90度,夹持器= 60度。

在Simulink模型中按下“Play”按钮,以模拟在模型中指万博1manbetx定的PI增益值的角度轨迹。你可以先双击蓝色按钮,也可以显示机器人手臂的3D动画。角响应和3D动画如下图所示。显然,这种反应过于迟缓和不准确。

图4:未调优的响应。

线性的植物

机器人臂动力学是非线性的。了解有无臂可与一组PI涨幅得到控制,线性沿着感兴趣的轨迹不同点(快照倍)的工厂。这里的“植物”是指控制信号(PID块的输出)和测量信号(“6 DOF机器人手臂”块的输出)之间的动态关系。

SnapshotTimes = 0:1:5;工厂是从PID输出到机械手输出LinIOs = [...的LiNiO(“cst_robotarm /控制器/ turntablePID”,1“openinput”),...的LiNiO('cst_robotarm /控制器/ bicepPID',1“openinput”),...的LiNiO(“cst_robotarm /控制器/ forearmPID”,1“openinput”),...的LiNiO(“cst_robotarm /控制器/ wristPID”,1“openinput”),...的LiNiO(“cst_robotarm /控制器/ handPID”,1“openinput”),...的LiNiO(“cst_robotarm /控制器/ gripperPID”,1“openinput”),...的LiNiO(“cst_robotarm/6自由度机械臂”,1“输出”));LinOpt = linearizeOptions (“SampleTime”,0);寻求连续时间模型G =线性化(“cst_robotarm”,SnapshotTimes LinIOs LinOpt);大小(G)
6x1状态空间模型数组。每个模型有6个输出,6个输入,19个状态。

在t=0、1、2、3、4秒时绘制线性化模型与t=5秒时最终模型之间的差距。

G5 = G(:,:,结束);% t = 5G5.SamplingGrid = [];西格玛(G5,G(:,:,2:5)-G5,{1E-3,1e3}),网格标题(“线性化动力学沿轨迹的变化”)传说(在t=5秒处线性化,“绝对差异”,...“位置”,“西南”)

在低频率和高频率时,动态变化显著,但在10 rad/s附近,变化下降到10%以下,这大致是期望的控制带宽。在目标增益交叉频率附近的小的工厂变化表明,我们可以用一组PI增益来控制手臂,而不需要使用增益调度。

使用LOOPTUNE调整PI控制器

looptune,您可以直接调整所有六个PI环来实现所需的响应时间以最小的循环互动和足够的MIMO稳定裕度。控制器在连续的时间调整和写入PI增益回到Simulink中时自动离散化。万博1manbetx使用slTuner接口,用于指定必须调优哪些块并定位工厂/控制器边界。

%线性化该植物在t = 3秒tLinearize = 3;创建slTuner接口TunedBlocks = {“turntablePID”,“bicepPID”,“forearmPID”,...“wristPID”,“handPID”,“gripperPID”};ST0 = slTuner(“cst_robotarm”、TunedBlocks tLinearize);将PID块的输出标记为工厂输入addPoint (ST0 TunedBlocks)将接头角度标记为设备输出addPoint(ST0,“6自由度机械臂”)%标记参考信号RefSignals = {...“裁判选择/不洁净的”,...“裁判选择/ bREF”,...“裁判选择/ fREF”,...'REF SELECT / WREF',...“裁判选择/ hREF”,...“裁判选择/ gREF”};addPoint (ST0 RefSignals)

在最简单的使用,looptune只需要知道目标控制带宽,它应该至少是所需响应时间的倒数的两倍。这里期望的响应时间是1秒,所以尝试3 rad/s的目标带宽(记住,植物动态变化最小,接近10 rad/s)。

wc = 3;%目标增益交叉频率控制= TunedBlocks;%执行命令测量=“6自由度机械臂”;接头角度测量相约= looptune (ST0、控制测量、wc);
最终:峰值增益= 0.957,迭代次数= 10次,达到目标增益值TargetGain=1。

接近或低于1的最终值表示looptune达到要求的带宽。比较初始控制器和调优控制器在角度位置上对step命令的响应。

T0 = getIOTransfer (ST0 RefSignals,测量);T1 = getIOTransfer (RefSignals相约,测量);选择= timeoptions;opt.IOGrouping =“所有”;opt.Grid =“上”;stepplot (T0,'b--',T1,“r”4选择)传说(“初始”,“调”,“位置”,“东南”)

y=1附近的六条沉降曲线代表各节点的阶跃响应,y=0附近的沉降曲线代表交叉耦合项。调谐的控制器是一个明显的改进,但有一些超调和二头肌反应需要很长时间来解决。

利用第二自由度

该2自由度PI控制器具有前馈和反馈两部分。

图5:两个自由度PID控制器。

默认情况下,looptune只调整反馈回路,不“看到”前馈组件。这可以通过验证b美元PI控制器的参数保持为初始值$ B = 1 $(类型showTunable(死神)以查看调优值)。为了利用前馈作用,减少超调,将带宽目标替换为从参考角到关节角的明确的步进跟踪要求。

TR = TuningGoal.StepTracking (RefSignals,测量,0.5);ST2 = looptune (ST0、控制测量,TR);
最终:峰值增益= 0.766,迭代次数= 13达到目标增益值目标值目标值=1。

二自由度调谐消除超调和改善二头肌反应。

T2 = getIOTransfer (ST2 RefSignals,测量);stepplot (T1,“r——”,T2,‘g’4选择)传说(“1-DOF调优”,“双自由度优化”,“位置”,“东南”)

验证调优的控制器

调整后的线性响应看起来令人满意,因此将PI增益的调整值写回Simulink块,并模拟整体机动。万博1manbetx仿真结果如图6所示。

writeBlockValue (ST2)

图6:调优的角响应。

二头肌关节的非线性响应明显冲。进一步的调查表明,两种可能的罪魁祸首。首先,将PI控制器是过于激进和饱和电机(输入电压限制在±5 V)。

图7:直流电机的输入电压(控制信号)。

第二,腕部和肱二头肌之间的交叉耦合效应,在进行测量时,会对肱二头肌的反应产生显著而持久的影响。要看这个,画出这三个关节的阶跃响应实际在机动过程中出现的台阶变化(肱二头关节-10度,腕关节90度)。

H2 = T2([2 4],[2-4])* DIAG([ -  10 90]);%按步幅缩放H2。u = {“二”,“手腕”};H2。y = {“二”,“手腕”};步骤(H2, 5),网格

细化设计

为了改善这种特定的手臂动作的二头肌回应,我们必须保持交叉偶联反应小相对于最终的角位移在每个关节。要做到这一点,在缩放由基准角度振幅步骤跟踪需求交叉耦合项。

[6010 60 90 90 90 60];命令角度位移,以度为单位TR.InputScaling = JointDisp;

为了减少执行器的饱和,限制从参考信号到控制信号的增益。

你= TuningGoal.Gain (RefSignals控制6);

使用这些优化的调优目标重新调整控制器。

ST3 = looptune (ST0、控制测量、TR UR);
决赛:峰值增益= 1.13,迭代= 189

将比例响应与之前的设计进行比较。注意腕部和肱二头肌运动之间的耦合显著减少,无论是峰值还是总能量。

T2s = diag(1 /合营disp) * T2 * diag(合营disp);T3s = diag(1 /合营disp) * getIOTransfer(ST3,RefSignals,Measurements) * diag(合营disp);stepplot (t2,“g——”t3,'M'4选择)传说(“初始2- DOF”,“精二自由度”,“位置”,“东南”)

将重新调整的值推入Simulink进行进一步验证。万博1manbetx

writeBlockValue (ST3)

仿真结果显示在图8中二头肌响应是现在看齐其他关节在稳定时间的术语和平滑的过渡,并且有致动器饱和度比在以前的设计更小。

图8:角位置和与精制控制器的控制信号。

在3D动画证实,现在手臂快速,准确地移动到所需的配置。

图9:微调响应。

另请参阅

|||

相关话题