【无标题】

今天基于simscape建立的机械臂模型搭建PID控制器,并使用matlab looptuning实现PID参数的自动调节。

本节所采用的模型基于simscape搭建的ABB 120六轴机械臂模型,其模型细节如下,模型输入为关节力矩,输出为关节位置。

图片

01

PID控制器

本文中的控制结构如下:

图片

Plant即为上述提到的六轴机器人模型,本章介绍PID控制器及其具体实现。

PID控制器是工业控制系统中最常用的一种控制器。PID控制器通过比例(P)、积分(I)和微分(D)三个控制参数来调节控制对象的输出,以达到预期的控制目标。

PID控制器由比例控制(Proportional)、积分控制(Integral)和微分控制(Derivative)三个部分组成。其控制输出可以表示为:

u(t)=Kpe(t)+Ki∫e(t)dt+Kdde(t)dt

其中:

  • u(t)是控制器的输出

  • e(t)是控制误差,即参考值与实际值之间的差异

  • Kp是比例增益

  • Ki是积分增益

  • Kd是微分增益

在matlab simulink中,有集成的PID模块,此处我们直接使用simulink的二自由度PID。该模块基于参考信号与测得的系统输出之间的差异来生成输出信号。此模块根据您指定的设定点权重(b 和 c)来计算比例和导数动作的加权差异信号。模块输出等于对各差异信号进行的比例、积分和导数动作的总和,其中的每个动作根据增益参数 PI 和 D 进行加权。导数动作通过一阶极点进行滤波。双击模块进行设置,此处对于六轴机器人来说,我们使用PD控制器:

图片

此外,还需为PID控制器添加输出限制。在仿真时,如果不限制输出,那么控制器可能会产生非常大的输出来使控制器有很好的性能,但是在实际的机械系统中,关节所使用的驱动器如电机的输出是有力矩限制的,没有办法产生非常大的力矩来驱动机构运动。因此为了尽可能模拟真实物理系统,限制控制器输出是非常有必要的。

图片

给各个关节均添加PID控制器,并给各个关节添加输入(本例中,J1/J2为阶跃信号,其余为0),模型如下:

图片

至此,我们的simulink模型已经搭建完成,此时若直接运行系统,会发现机器人的实际位置与期望值相差甚远,原因在于控制器的参数并不匹配当前系统,因此需要调节控制器参数来使控制器性能表现较好。

参数整定可以基于经验手动调整,也可以用如Ziegler-Nichols方法调整,此处我们使用matlab中的looptuning方法来实现PID参数的自动调节

02

PID自动调节-loop tune

looptune 是 MATLAB 控制系统工具箱中的一个函数,专门用于自动调节控制器参数。它能够处理单输入单输出 (SISO) 系统和多输入多输出 (MIMO) 系统。通过指定一些性能目标和约束,looptune 可以自动优化控制器参数,以实现期望的系统行为。

looptune 基于频域优化技术,利用传递函数模型和频率响应数据来优化控制器参数。其基本步骤如下:

  1. 模型建立:首先,需要建立系统的数学模型,包括传递函数或状态空间表示。

  2. 定义控制器结构:确定控制器的类型(如 PID 控制器)及其参数。

  3. 指定性能目标:设定系统的性能目标,例如阶跃响应时间、超调量和稳态误差等。

  4. 执行优化:调用 looptune 函数,根据设定的目标和约束,自动调节控制器参数。

  5. 验证和调整:对优化结果进行验证,必要时可以进一步调整参数。

我们已经建立了仿真模型,接下来我们来定义控制器结构。首先确定控制器的类型(如PID控制器)及其参数,并定义了六个PID控制器块作为要调谐的控制器结构。

% Create sluner interface
TunedBlocks = {'PD1','PD2','PD3','PD4','PD5','PD6'};
ST0 = slTuner('sm_abbIrb120_PID',TunedBlocks);

% Mark outputs of PID blocks as plant inputs
addPoint(ST0,TunedBlocks);

随后设定系统的性能目标,例如阶跃响应时间、超调量和稳态误差等。我们需要定义参考信号和测量信号,并设定调谐目标。

% Mark joint angles as plant outputs
addPoint(ST0,'Robot/qm');

% Mark reference signals
RefSignals = {...
    'sm_abbIrb120_PID/q1r','sm_abbIrb120_PID/q2r','sm_abbIrb120_PID/q3r',...
    'sm_abbIrb120_PID/q4r','sm_abbIrb120_PID/q5r','sm_abbIrb120_PID/q6r'};
addPoint(ST0,RefSignals);

%% defining Input and Outputs and Tuning the systems
Controls = TunedBlocks; % actuator commands
Measurements = 'sm_abbIrb120_PID/Robot/1';
options = looptuneOptions('RandomStart',80,'UseParallel',false);
TR = TuningGoal.StepTracking(RefSignals,Measurements,0.05,0);

最后执行优化,并将参数更新到模型中:

% execute optimization
ST1 = looptune(ST0,Controls,Measurements,TR,options);

%% Update PID Block
writeBlockValue(ST1);

运行上述代码,则会进行自动优化过程,最终有最低峰值增益的迭代组对应的参数即为优化后参数,优化后的参数会更新到simulink模块中。

图片

执行simulink模块,观测J1/J2位置,可以看到反馈位置最后稳定在期望值处。

图片

最后来看一下仿真运动效果吧!

图片


欢迎关注获取代码。

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值