主要内容

机械臂的多环PI控制

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

机械臂模型与控制器

下面这个例子使用了六自由度机械臂。这个手臂由六个关节组成,从底部到顶端分别标明:“转盘”、“二头肌”、“前臂”、“手腕”、“手”和“夹持器”。除了使用两个直流电机串联的二头肌关节外,每个关节都由直流电机驱动。

图1:机械臂机械手。

cst_robotarm文件”。slx”包含该系统的电气和机械部金宝app件的Simulink模型。

图2:机械臂的Sim金宝appulink模型。

“控制器”子系统由六个数字PI控制器组成(每个关节一个)。每个PI控制器都是使用Simulink库中的“2-DOF PID控制器”模块实现的金宝appPID整定跟踪与干扰抑制动机的例子)。控制采样时间Ts=0.1 (10 Hz)。

图3:控制器结构。

通常,这样的多回路控制器是通过一次调整一个PID环和循环循环的循环顺序调整,直到整体行为是令人满意的。这个过程可能很耗时,并且不能保证收敛到最佳的总体调优。或者,您可以使用systunelooptune根据响应时间和最小交叉耦合等系统级要求,联合调整所有6个PI回路。

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

在Simulink模型中按下“Play”按钮,模拟模型中指定的金宝appPI增益值的角轨迹。你可以先双击蓝色按钮来显示机械臂的3D动画。角度响应和3D动画如下所示。显然,回应过于迟缓和不准确。

图4:未调优的响应。

线性的植物

机器人手臂动力学是非线性的。为了理解是否可以用一组PI增益来控制手臂,沿着感兴趣的轨迹在不同的点(快照时间)对对象进行线性化。这里的“植物”是指控制信号(PID块的输出)和测量信号(“6自由度机械臂”块的输出)之间的动力学。

SnapshotTimes = 0:1:5;% Plant是从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, {1 e - 3, 1 e3}),网格标题(沿轨迹线性化动力学的变化)传说(' t= 5s时的线性化'“绝对变化”...“位置”“西南”

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

使用LOOPTUNE调整PI控制器

looptune,您可以直接调整所有6个PI循环,以实现所需的响应时间,最小的环路交互和适当的MIMO稳定裕度。控制器在连续时间内调谐,并在将PI增益写入Simulink时自动离散化。金宝app使用slTuner接口来指定必须调优哪些块,并定位设备/控制器边界。

%在t=3s时线性化植物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”...“裁判选择/ 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达到所请求的带宽。比较初始和调谐控制器在角位置的阶跃命令的响应。

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

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

利用第二自由度

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

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

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

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

二自由度调谐消除了超调,改善了二头肌的响应。

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

验证调优控制器

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

writeBlockValue (ST2)

图6:调整后的角度响应。

二头肌关节的非线性响应明显不足。进一步的调查表明有两名嫌疑人。首先,PI控制器过于激进,使电机饱和(输入电压限制在±5v)。

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

其次,手腕和肱二头肌之间的交叉耦合效应,当规模,有一个显著和持久的影响肱二头肌反应。为了看到这个,画出这三个关节的阶跃响应实际在操作过程中发生的步幅变化(二头肌关节-10度,腕关节90度)。

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

细化设计

为了改善肱二头肌对这一特定手臂动作的反应,我们必须保持交叉耦合效应小相对于每个关节的最终角位移。为此,用参考角度振幅来缩放阶跃跟踪要求中的交叉耦合项。

JointDisp = [60 10 60 90 90 60];%表示角位移,以度表示TR.InputScaling = JointDisp;

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

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

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

ST3 = looptune (ST0、控制测量、TR UR);
最终:峰值增益= 1.13,迭代= 216

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

T2 = diag(1./JointDisp) * T2 * diag(JointDisp);T3s = diag(1./JointDisp) * getIOTransfer(ST3,RefSignals,Measurements) * diag(JointDisp);stepplot (t2,“g——”t3,“米”4选择)传说(“初始双自由度”“精二自由度”“位置”“东南”

将返回的值推入Simulink进行进一步验证。金宝app

writeBlockValue (ST3)

仿真结果如图8所示。在稳定时间和平滑瞬态方面,Bicep的响应现在与其他关节相当,而且驱动器饱和比以前的设计更少。

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

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

图9:经过微调的响应。

另请参阅

|||

相关的话题