MATLAB - 控制小车上的倒立摆

系列文章目录


前言


一、小车 - 摆杆

小车 - 摆杆模型如图 1 所示,使用 Simscape™ Multibody™ 在 Simulink® 中建模。

MATLAB - 控制小车上的倒立摆_第1张图片 图 1:小车上的倒立摆
MATLAB - 控制小车上的倒立摆_第2张图片 图 2:Simscape 多体模型

 

该系统通过对小车施加可变力 F 进行控制。控制器需要在将小车移动到新位置或摆锤被推向前方(脉冲干扰 dF)时保持摆锤直立。

二、控制结构

竖直位置是倒立摆的不稳定平衡点。被控对象的不稳定性使控制任务更具挑战性。在本例中,您将使用以下双回路控制结构:

open_system('rct_pendulum.slx')
set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','off');

MATLAB - 控制小车上的倒立摆_第3张图片

内环使用二阶状态空间控制器将摆稳定在竖直位置(\theta 控制),而外环使用比例-微分 (PD) 控制器控制小车位置。使用 PD 控制器而不是 PID 控制器,是因为被控对象已经提供了一些积分动作。

三、设计要求

使用 TuningGoal 要求指定所需的闭环行为。指定跟踪小车位置 x 设定点变化的响应时间为 3 秒。

% Tracking of x command
req1 = TuningGoal.Tracking('xref','x',3);

为充分抑制摆尖上的脉冲干扰 dF,可使用以下形式的 LQR 惩罚

\int_0^\infty(16\theta^2(t)+x^2(t)+0.01F^2(t))dt

强调较小的角度偏差 \theta,并限制控制力度 F。 

% Rejection of impulse disturbance dF
Qxu = diag([16 1 0.01]);
req2 = TuningGoal.LQG('dF',{'Theta','x','F'},1,Qxu);

为确保稳健性,要求设备输入端至少有 6 分贝的增益裕度和 40 度的相位裕度。

% Stability margins
req3 = TuningGoal.Margins('F',6,40);

最后,对闭环极点的阻尼和固有频率进行限制,以防止出现抖动或欠阻尼的瞬态。

% Pole locations
MinDamping = 0.5;
MaxFrequency = 45;
req4 = TuningGoal.Poles(0,MinDamping,MaxFrequency);

四、控制系统调整

闭环系统在 PD 控制器和状态空间控制器的初始值(分别为 1 和 2/s)下是不稳定的。您可以使用 systune 对这两个控制器进行联合调整。使用 slTuner 界面指定可调块,并将工厂输入 F 注册为分析点,以测量稳定裕度。

ST0 = slTuner('rct_pendulum',{'Position Controller','Angle Controller'});
addPoint(ST0,'F');

接下来,根据上述性能要求,使用 systune 调整 PD 和状态空间控制器。优化跟踪和干扰抑制性能(软要求),但必须符合稳定性裕度和极点位置约束条件(硬要求)。

rng(0)
Options = systuneOptions('RandomStart',5);
[ST, fSoft] = systune(ST0,[req1,req2],[req3,req4],Options);
Final: Soft = 1.37, Hard = 0.99968, Iterations = 320
Final: Soft = 1.44, Hard = 0.99917, Iterations = 266
Final: Soft = 1.26, Hard = 0.99907, Iterations = 351
Final: Soft = 1.37, Hard = 0.99934, Iterations = 311
Final: Soft = 1.27, Hard = 0.99903, Iterations = 281
Final: Soft = 1.37, Hard = 0.99911, Iterations = 274

最佳设计的软要求值接近 1,同时满足硬要求 (硬<1)。这意味着调整后的控制系统几乎达到了跟踪和干扰抑制的目标性能,同时满足了稳定性裕度和极点位置约束。

五、验证

使用 viewGoal 进一步分析最佳设计如何满足各项要求。

figure('Position',[100   100   575   660])
viewGoal([req1,req3,req4],ST)

MATLAB - 控制小车上的倒立摆_第4张图片

这些曲线图证实,前两个要求几乎得到了满足,而后两个要求则得到了严格执行。接下来,绘制小车对位置阶跃变化和力脉冲的响应图。 

T = getIOTransfer(ST,{'xref','dF'},{'x','Theta'});
figure('Position',[100   100   650   420]);
subplot(121), step(T(:,1),10)
title('Tracking of set point change in position')
subplot(122), impulse(T(:,2),10)
title('Rejection of impulse disturbance')

MATLAB - 控制小车上的倒立摆_第5张图片

响应平稳,达到预期的稳定时间。检查控制器的调整值。 

C1 = getBlockValue(ST,'Position Controller')
C1 =
 
               s    
  Kp + Kd * --------
             Tf*s+1 

  with Kp = 5.74, Kd = 1.77, Tf = 0.0495
 
Name: Position_Controller
Continuous-time PDF controller in parallel form.
C2 = zpk(getBlockValue(ST,'Angle Controller'))
C2 =
 
  -1600.6 (s+13.05) (s+4.14)
  --------------------------
      (s+134.7) (s-14.2)
 
Name: Angle_Controller
Continuous-time zero/pole/gain model.

请注意,角度控制器有一个不稳定极点,它与被控对象的不稳定极点配对,以稳定倒立摆。要了解这一点,请获取被控对象输入端的开环传递并绘制根位置图。

L = getLoopTransfer(ST,'F',-1);
figure
rlocus(L)
set(gca,'XLim',[-25 20],'YLim',[-20 20])

MATLAB - 控制小车上的倒立摆_第6张图片

为完成验证,将调整值上传到 Simulink,并模拟小车/摆锤组件的非线性响应。下面是模拟结果的视频。 

writeBlockValue(ST)
MATLAB - 控制小车上的倒立摆_第7张图片 图 3:使用调谐控制器的小车/摆仿真

模拟结束后关闭模型。 

set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','on');
close_system('rct_pendulum',0);

你可能感兴趣的:(MATLAB,机器人与控制系统应用,matlab,开发语言,机器人,自动驾驶,ROS,机器人控制,LQR)