主要内容

机械臂的多回路PI控制

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

机械臂模型与控制器

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

图1:机械臂机械手。

文件“cst_robotarm.”slx”包含了该系统的电气和机械万博1manbetx组件的Simulink模型。

图2:机械臂的Sim万博1manbetxulink模型。

“控制器”子系统由六个数字PI控制器(每个关节一个)组成。每个PI控制器都是使用Simulink库中的“2-DOF PID控制器”块实现的万博1manbetxPID整定的设定值跟踪vs.干扰抑制激励的例子)。控制样本时间为Ts=0.1 (10 Hz)。

图3:控制器结构。

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

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

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

图4:未调优响应。

线性化植物

机械臂动力学是非线性的。为了理解手臂是否可以用一组PI增益来控制,在感兴趣的轨迹上的各个点(快照时间)线性化植物。这里的“plant”指的是控制信号(PID块的输出)和测量信号(“6 DOF Robot Arm”块的输出)之间的动态。

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 =线性化选项(“SampleTime”, 0);寻求连续时间模型线性化(“cst_robotarm”, SnapshotTimes LinIOs LinOpt);大小(G)
状态空间模型的6x1数组。每个模型有6个输出,6个输入和19个状态。

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

G5 = G(:,:,end);% t = 5G5。SamplingGrid = [];sigma(G5,G(:,:,2:5)-G5,{1e-3,1e3}),网格标题(线性化动力学沿轨迹的变化)传说(' t=5 s时的线性化'“绝对变化”...“位置”“西南”

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

使用LOOPTUNE调优PI控制器

looptune,您可以直接调优所有六个PI环路,以实现所需的响应时间,同时实现最小的环路交互和足够的MIMO稳定裕度。控制器在连续时间内进行调优,并在将PI增益写入Simulink时自动离散化。万博1manbetx使用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“六自由度机械臂”标记参考信号RefSignals = {...“裁判选择/不洁净的”...“裁判选择/ bREF”...“裁判选择/ fREF”...“裁判选择/ wREF”...“裁判选择/ hREF”...“裁判选择/ gREF”};addPoint (ST0 RefSignals)

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

Wc = 3;%目标增益交叉频率控件= TunedBlocks;%执行器命令测量=“六自由度机械臂”%关节角测量ST1 = looptune(ST0,控制,测量,wc);
最终:峰值增益= 0.957,迭代= 10实现目标增益值TargetGain=1。

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

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

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

利用第二自由度

2-DOF PI控制器有一个前馈和一个反馈组件。

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

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

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

2-DOF调谐消除超调和改善二头肌的反应。

T2 = getIOTransfer(ST2,RefSignals,Measurements);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),网格

优化设计

为了提高二头肌对这种特定的手臂动作的反应,我们必须保持交叉耦合效应较小相对于每个关节的最终角位移。为此,将步长跟踪要求中的交叉耦合项按参考角振幅缩放。

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

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

UR = TuningGoal.Gain(RefSignals,Controls,6);

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

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

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

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

将返回值推到Simulink进行进一步验证。万博1manbetx

writeBlockValue (ST3)

仿真结果如图8所示。在沉降时间和平滑瞬态方面,Bicep的响应现在与其他关节相当,并且执行器饱和度比以前的设计要低。

图8:带有细化控制器的Angular位置和控制信号。

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

图9:微调响应。

另请参阅

|||

相关的话题