资源描述
学校学院年级专业课程设计
Huaqiao university
测控系统课程设计
题目: 单力臂机械手直接自适应模糊控制——方案B2 4
院 (系)
专 业
学 号
姓 名
级 别
指导老师
2011年7月
单力臂机械手直接自适应模糊控制
班级 姓名 指导老师
摘要:本文提出了一种自适应模糊控制器用于单力臂机械手的控制,该控制器根据实际系统性能与理想性能之间的偏差,通过一定的方法来直接调整控制器的参数,进而使得系统输出尽可能地跟踪理想输出。仿真实验表明,该控制器能够实现对单力臂机械手的较高精度控制。
关键词:模糊控制器;自适应控制;机械手
Abstract: This paper presents a design of adaptation fuzzy controller for single-arm robotics manipulators. According to the deviation between the actual performance of the system and the ideal performance, the controller uses a certain method to adjust the controller's parameters directly, and then the output of the system can track the desired output. The simulation results show that precision is very fine.
Keywords: fuzzy controller; adaptive control systems; robotic manipulators
1 引言
机械手是一个多变量、非线性、耦合的动态系统,很难通过准确的数学模型设计有效的控制。在人工智能领域,人们逐渐将模糊逻辑和神经网络理论应用到控制中,在原有的PID控制、计算力矩控制等方法中对无法准确计算部分用模糊方法以及神经网络方法进行补偿控制[2-3],控制精度有了一定提高。鉴于模糊控制的突出优点:能够比较容易地将人的控制经验融入到控制器中,于是本文在模糊控制的基础上提出机械手自适应模糊控制器设计方案,该方案通过设计一个反馈控制器和一个调整参数向量的自适应律,使得系统输出y尽可能地跟踪理想输出,从而获得机械手的较高精度的控制。
2 问题描述
考虑如下方程所描述的研究对象
(1)
(2)
式中,f为未知函数,b为未知的正常数。
直接自适应模糊控制采用下面IF-THEN模糊规则来描述控制知识:
IF is is,THEN u is (3)
式中,,为R中模糊集合,且r=1,2,,。
假设位置指令为 ,令
(4)
选择,使多项式的所有根部都在复平面左半开平面上。取控制律为
(5)
将式(5)代入式(1),得到闭环控制系统的方程:
(6)
通过K的选取,可使得当时,,即系统的输出y渐进地收敛于理想输出。
直接型模糊自适应控制是基于模糊系统设计一个反馈控制器和一个调整参数向量的自适应律,使得系统输出y尽可能地跟踪理想输出。
3 模糊控制器的设计
直接自适应模糊控制器为
(7)
式中,是一个模糊系统,是可调参数集合。
模糊系统可由以下两步来构造:
步骤1 对变量,定义个模糊集合。
步骤2 用以下条模糊规则来构造模糊系统:
(8)
其中,。
采用乘积推理机、单值模糊器和中心平均解模糊器来设计控制器,即
(9)
令是自由参数,分别放在集合中,则模糊控制器为
(10)
其中为维向量,其第个元素为
(11)
模糊控制规则式(3)是通过设置其初始参数而被嵌入到模糊控制器中的。
4 自适应律的设计
将式(5)、(7)代入式(1),并整理得:
(12)
令:
(13)
则闭环系统动态方程式(12)可写成向量形式:
(14)
定义最优参数为
(15)
定义最小逼近误差为
(16)
由式(14)可得
(17)
由式(10),可将误差方程式(17)改写为
(18)
定义Lyapunov函数:
(19)
其中参数是正的常数。
P为一个正定矩阵且满足Lyapunov方程
(20)
其中Q是一个任意的正定矩阵,由式(13)给出。
取,令,则式(18)变为
即
V的导数为
(21)
令为P的最后一列,由可知,则式(21)变为
(22)
取自适应律
(23)
则
(24)
由于,是最小逼近误差,通过设计足够多规则的模糊系统,可使充分小,并满足,从而使得。
直接型自适应模糊控制系统的结构如图1所示。
-
被控对象
模糊控制器
自适应律
初始值
图1 直接型自适应模糊控制系统
5 仿真实例
被控对象为一单力臂机械手:
其中为摩擦模型。
摩擦模型为库伦摩擦+黏性摩擦模型,即
其中和为正的常数。
位置指令为。取以下6中隶属函数:,
,,,
,。
系统摆初始状态为,的初始值取0,采用控制律(10),取,,自适应参数取。
根据隶属函数设计程序,可得到隶属函数图,如图2所示。在控制系统仿真程序中,分别用,和表示模糊系统的分子、分母和,仿真结果如图3、图4和图5所示,Simulink程序如图6所示。从图中可以看出控制器具有较好的动态特性, 系统响应速度快、 调节精度较高,可实现系统输出大致跟踪理想输出。
图2 X的隶属函数
图3 位置跟踪
图4 控制输入信号
图6 Simulink程序图
图5 位置跟踪报错图
6 结语
本文给出的直接适应模糊控制算法是基于模糊系统设计的,系统能够根据给定的初始参数,使得其输出Y尽可能地跟踪理想输出,是一种比较实用的自适应控制算法。
参考文献
[1] 张德丰 《MATLAB控制系统设计与仿真》 电子工业出版社,2009年
[2] 赵文峰 《基于MATLAB6.x控制系统设计与仿真》 西安电子科技大学出版社,2002年
[3] 刘金琨 《机器人控制系统的设计与MATLAB仿真》 清华大学出版社,2008年
以下共4个程序:(1)隶属函数设(2)控制器S函数(3)被控对象S函数(4)作图程序
隶属函数设计:
clear all;
close all;
L1=-3;
L2=3;
L=L2-L1;
T=0.001;
x=L1:T:L2;
figure(1);
for i=1:1:6
if i==1
u=1./(1+exp(5*(x+2))); %i=1,u(1)=Un3(x)
elseif i==6
u=1./(1+exp(-5*(x-2))); %i=6,u(6)=Up3(x)
else
u=exp(-(x+2.5-(i-1)).^2); %其他4种情况
end
hold on;
plot(x,u); %作图指令
end
xlabel('x');ylabel('Membership function degree'); %横纵坐标标签
控制器S函数
function [sys,x0,str,ts] = spacemodel(t,x,u,flag) %s-函数引导语句
switch flag,
case 0, %初始化设置
[sys,x0,str,ts]=mdlInitializeSizes;
case 1, %连续状态变量计算
sys=mdlDerivatives(t,x,u);
case 3, %输出量计算
sys=mdlOutputs(t,x,u);
case {2,4,9} %未定义标志
sys=[];
otherwise %处理错误
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes %进行初始化,设置系统变量的大小
sizes = simsizes; %取系统默认设置
sizes.NumContStates = 36; %设置连续变量个数
sizes.NumDiscStates = 0; %设置离散状态个数,无离散状态,故设0
sizes.NumOutputs = 1; %设置输出变量个数
sizes.NumInputs = 4; %设置输入变量的个数
sizes.DirFeedthrough = 1; %输出量的计算取决于输入量
sizes.NumSampleTimes = 0; %采样周期的个数
sys = simsizes(sizes); %设置系统的大小参数
x0 = [zeros(36,1)]; %设置为零初始状态
str = []; %设置字符串矩阵
ts = []; %采样周期的设置
function sys=mdlDerivatives(t,x,u) %计算系统的状态变量
r=u(1);
dr=u(2);
xi(1)=u(3);
xi(2)=u(4); %赋值语句
e=r-xi(1);
de=dr-xi(2);
gama=100;
k2=1;
k1=10;
E=[e,de]';
A=[0 -k2;
1 -k1];
Q=[150 0;0 150]; %赋初值语句
P=lyap(A,Q); %李亚普诺夫函数求解P,运用公式(20)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FS1=0; %表示模糊系统的分母
u1(1)=1/(1+exp(5*(xi(1)+2)));
u1(6)=1/(1+exp(-5*(xi(1)-2)));
for i=2:1:5
u1(i)=exp(-(xi(1)+1.5-(i-2))^2);
end
u2(1)=1/(1+exp(5*(xi(2)+2)));
u2(6)=1/(1+exp(-5*(xi(2)-2)));
for i=2:1:5
u2(i)=exp(-(xi(2)+1.5-(i-2))^2);
end
for i=1:1:6
for j=1:1:6
FS2(6*(i-1)+j)=u1(i)*u2(j);
FS1=FS1+u1(i)*u2(j);
end
end
FS=FS2/FS1; %用表示模糊系统
b=[0;1];
S=gama*E'*P(:,2)*FS;
for i=1:1:36
sys(i)=S(i);
end
function sys=mdlOutputs(t,x,u) %计算系统输出
r=u(1);
dr=u(2);
xi(1)=u(3);
xi(2)=u(4);
for i=1:1:36
thtau(i,1)=x(i);
end
FS1=0; %重复上面步骤
u1(1)=1/(1+exp(5*(xi(1)+2)));
u1(6)=1/(1+exp(-5*(xi(1)-2)));
for i=2:1:5
u1(i)=exp(-(xi(1)+1.5-(i-2))^2);
end
u2(1)=1/(1+exp(5*(xi(2)+2)));
u2(6)=1/(1+exp(-5*(xi(2)-2)));
for i=2:1:5
u2(i)=exp(-(xi(2)+1.5-(i-2))^2);
end
for i=1:1:6
for j=1:1:6
FS2(6*(i-1)+j)=u1(i)*u2(j);
FS1=FS1+u1(i)*u2(j);
end
end
FS=FS2/FS1;
ut=thtau'*FS';
sys(1)=ut;
被控对象S函数
%S-function for continuous state equation
function [sys,x0,str,ts]=s_function(t,x,u,flag)
switch flag,
%Initialization
case 0, %初始化设置
[sys,x0,str,ts]=mdlInitializeSizes;
case 1, %连续状态变量计算
sys=mdlDerivatives(t,x,u);
case 3, %输出量计算
sys=mdlOutputs(t,x,u);
%Unhandled flags
case {2, 4, 9 } %未定义标志
sys = [];
%Unexpected flags
Otherwise %处理错误
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes %进行初始化,设置系统变量的大小
sizes = simsizes; %取系统默认设置
sizes.NumContStates = 2; %设置连续变量个数
sizes.NumDiscStates = 0; %设置离散状态个数,无离散状态,故设0
sizes.NumOutputs = 2; %设置输出变量个数
sizes.NumInputs = 1; %设置输入变量的个数
sizes.DirFeedthrough = 0; %输出量的计算取决于输入量
sizes.NumSampleTimes = 0; %采样周期的个数
sys=simsizes(sizes); %设置系统的大小参数
x0=[0.15 0]; %设置为零初始状态
str=[]; %设置字符串矩阵
ts=[]; %采样周期的设置
function sys=mdlDerivatives(t,x,u) %Ref to PID411
g=9.8;
m=1;
l=0.25;
d=2.0;
I=4/3*m*l^2;
tol=u;
k1=0.30;
k2=1.5;
told=sign(x(2))*(k1*abs(x(2))+k2); %摩擦模型为库伦摩擦+黏性摩擦模型
fx=1/I*(-d*x(2)-m*g*l*cos(x(1))); %利用公式
gx=1/I;
sys(1)=x(2);
sys(2)=fx+gx*(tol-told); %利用公式
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);
作图程序
close all;
figure(1);
plot(t,y(:,1),'r',t,y(:,2),'b');
xlabel('time(s)');ylabel('Position tracking'); %绘制位置跟踪曲线
figure(2);
plot(t,y(:,1)-y(:,2),'r');
xlabel('time(s)');ylabel('Position tracking error'); %绘制位置跟踪报错曲线
figure(3);
plot(t,u(:,1),'r');
xlabel('time(s)');ylabel('Control input'); %绘制控制输入信号曲线
测控系统课程设计心得体会
首先很感谢学院能够开设MATLAB的实践课程,让我能够综合运用平时所学的知识,为我今后继续深入研究自动控制方向提供了一次很好的练兵机会,我想这是我此次设计收获最多的东西吧。
好的,现在讲一讲我设计的过程:刚开始的时候,我本来想挑战一下A类课题,但由于花了几天啃书本却不见进展,加上正值专业课考试复习时间,便放弃改做B类“单力臂机械手直接自适应模糊控制”。虽说课题难度有所下降,但在这调试过程中我也碰到各式各样的问题。首当其冲的便是所用到的模糊控制器和自适应律的设计,由于之前学习的自动控制原理的进度仅仅停留在前五章,然而设计中需要用到Lyapunov函数、模糊系统等知识却是后面讲到的。因此,这便需要我自学这些新的知识。经过不断地推演、运算,我已经能大致地了解它们的用法,例如可通过公式它判断P的稳定性。理论问题已经基本解决,我也可以进入绘制控制系统图和编写代码环节。虽说代码在参考书籍上大都可以找到,但实际编入MATLAB中也存在不少问题,例如undefined、文件损坏等,需要我一步一步仔细排除上述问题。最后经过多次调试,仿真实验实现了系统输出大致跟踪理想输出的结果。
主体部分已基本完成,剩下的便是论文撰写。在这之前,我早以听说指导老师要求十分严格,细到字体大小、段落格式,因此我也不敢怠慢,按照论文标准格式书写。在最后完本的时候,我猛然发觉老师的严格要求根本不是苛刻,因为如果没有这样的良好习惯,别人在阅读你的文章时会倍感费力。
展开阅读全文