主要内容

机械臂的多回路PI控制

此示例演示如何使用环调为6自由度机械臂操纵器调整多回路控制器。

机械臂模型与控制器

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

图1:机械臂操纵器。

文件“cst_robotarm.slx”包含该系统电气和机械部件的Simuli金宝appnk模型。

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

“控制器”子系统由六个数字PI控制器(每个关节一个)组成。每个PI控制器使用Simulink库中的“2-DOF PID控制器”块实现(参见金宝app设定点跟踪与干扰抑制的PID调节控制采样时间为Ts=0.1(10 Hz)。

图3:控制器结构。

通常,此类多回路控制器通过一次调整一个PID回路并在回路中循环直到整体性能令人满意来顺序调整。此过程可能非常耗时,并且不能保证收敛到最佳整体调整。或者,您可以使用系统环调根据系统级要求,如响应时间和最小交叉耦合,联合调整所有六个PI回路。

在本例中,手臂必须在约1秒内移动到特定配置,每个关节的角度运动平稳。手臂从完全伸展的垂直位置开始,除二头肌角度为90度外,所有关节角度均为零。末端配置由角度位置指定:转盘=60度,二头肌=80度,前臂=60度,手腕=90度,手=90度,夹钳=60度。

按下Simulink模型中的“播放”按钮,模拟模型中指定PI增金宝app益值的角度轨迹。您可以先双击蓝色按钮,也可以显示机械臂的3D动画。角度响应和3D动画显示在下面。显然,响应太慢且不精确。

图4:非协调响应。

线性化设备

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

快照时间=0:1:5;%设备从PID输出到机械臂输出里尼奥斯=[...linio (“cst_机器人手臂/控制器/转盘PID”1.“openinput”),...linio (“cst_robotarm /控制器/ bicepPID”1.“openinput”),...linio (“cst_机器人手臂/控制器/前臂PID”1.“openinput”),...linio (“cst_机器人手臂/控制器/手腕ID”1.“openinput”),...linio (“cst_机器人手臂/控制器/手动PID”1.“openinput”),...linio (“cst_机器人手臂/控制器/夹持器ID”1.“openinput”),...linio (“cst_机器人手臂/6自由度机器人手臂”1.“输出”)]; LinOpt=线性化选项(“采样时间”, 0);%寻找连续时间模型G=线性化(“cst_机器人手臂”,LinIOs,快照时间,LinOpt);尺寸(克)
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=5 s时的线性化’,“绝对变化”,...“位置”,“西南”)

虽然在低频和高频时,动态变化显著,但在10 rad/s附近,变化降至10%以下,这大致是所需的控制带宽。目标增益交叉频率附近的小电厂变化表明,我们可以使用一组PI增益控制arm,无需采用增益调度。

使用LOOPTUNE调整PI控制器

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

%在t=3s时线性化植物t线性化=3;%创建slTuner接口TunedBlocks = {“转盘PID”,“双塞皮德”,“前臂PID”,...“手腕”,“笨手笨脚的”,“爪类”};ST0 = slTuner (“cst_机器人手臂”,调谐块,t线性化);%将PID模块的输出标记为设备输入添加点(ST0、TunedBlocks)%将接头角度标记为设备输出addPoint (ST0“6自由度机械臂”)%标记参考信号RefSignals = {...“参考选择/tREF”,...“参考选择/bREF”,...“参考选择/fREF”,...“裁判选择/ wREF”,...'参考选择/hREF',...“参考选择/gREF”}; 添加点(ST0、REF信号)

最简单的用法是,环调只需知道目标控制带宽,该带宽应至少为所需响应时间倒数的两倍。此处所需响应时间为1秒,因此尝试3 rad/s的目标带宽(请记住,电厂动态变化至少接近10 rad/s)。

wc=3;%目标增益交叉频率控件=调谐块;%执行器命令测量=“6自由度机械臂”%关节角度测量ST1=环路调谐(ST0、控制、测量、wc);
最终:峰值增益=0.957,迭代次数=10次,达到目标增益值TargetGain=1。

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

T0=getIOTransfer(ST0,参考信号,测量值);T1=getIOTransfer(ST1,参考信号,测量值);opt=时间选项;opt.IOGroup=“全部”;opt.Grid =“开”;阶跃图(T0,“b——”T1,“r”,4,opt)图例(“首字母”,“调谐”,“位置”,‘东南’)

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

利用第二自由度

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

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

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

TR=调谐目标。步进跟踪(参考信号,测量值,0.5);ST2=环路调谐(ST0,控制,测量值,TR);
最终:峰值增益=0.766,迭代次数=13次,达到目标增益值TargetGain=1。

2-DOF调谐消除了超调,改善了二头肌响应。

T2=获取传输(ST2、参考信号、测量);阶跃图(T1、,“r——”, T2,“g”,4,opt)图例(“单自由度调谐”,“2自由度调谐”,“位置”,‘东南’)

验证已调整的控制器

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

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 90 90 60];%指令角位移,单位为度TR.InputScaling = JointDisp;

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

UR=调谐目标增益(参考信号,控制,6);

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

ST3=环路调谐(ST0、控制、测量、TR、UR);
最终:峰值增益= 1.14,迭代= 195

将缩放响应与之前的设计进行比较。注意腕部和二头肌运动之间的耦合显著降低,峰值和总能量都显著降低。

T2s=diag(1./JointDisp)*T2*diag(JointDisp);T3s=diag(1./JointDisp)*getIOTransfer(ST3,参考信号,测量值)*diag(JointDisp);阶跃图(T2s,“g——”,T3s,“米”,4,opt)图例(“初始双自由度”,“精致的2自由度”,“位置”,‘东南’)

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

writeBlockValue(ST3)

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

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

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

图9:微调响应。

另见

|||

相关的话题