开篇:润墨网以专业的文秘视角,为您筛选了一篇浅析机械臂轨迹伺服控制的Matlab仿真范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘 要:针对基于Matlab的机械臂轨迹伺服控制仿真,通过一个简化的伺服控制模型,进行仿真编程分析,对比ode45算法与自编四阶龙哥库塔方法,并阐述仿真中经常用到的一些函数及图形格式处理方法,有利于机械臂轨迹控制及仿真的研究。
关键词:机械臂 伺服控制 仿真 Matlab
中图分类号:TP241.2 文献标识码:A 文章编号:1007-3973(2013)011-038-02
1 引言
进入21世纪,机器人工业已经进入高速崛起的时代,机械臂是机器人的操作终端,有一大批机器人爱好者在研究机械臂的控制技术。然而,伺服电机及需要配置的传感器价格昂贵,使得采用实体机械臂的轨迹控制研究难以普遍实现。Matlab作为计算机辅助分析设计仿真工具,相比之下,成本低,周期短,使用方便,在各学科领域得到了应用广泛。将机械臂的控制技术与Matlab编程仿真方法结合起来,对于机械臂轨迹控制的研究非常重要。
机械臂轨迹控制的方法很多,如PID控制、自适应控制、鲁棒控制以及智能控制方法,伺服控制是一种基于机械臂动力学模型的控制方法,本文将浅析基于Matlab的机械臂轨迹伺服控制仿真技术。
2 机械臂轨迹伺服控制的简化模型
一般机械臂的运动模型可以根据拉格朗日方程得到
其中: 、H、G为n维列向量,M为nn正定对称矩阵,由此得到
根据参考文献[1]就可以确定 的值,因此,下文视其为已知量,且初始条件为:。
3 基于matlab的数值积分编程
在机械臂轨迹控制仿真中,利用Matlab编程解微分方程,常用的方法是ode45函数方法。ode45是Matlab系统内置的一个微分方程数值求解函数,采用四阶、五阶Runge-Kutta算法,属于变步长算法。而采用自编四阶龙哥库塔方法,步长可根据情况自己设定。
仿真编程的步骤如下:
第一步,根据动力学方程建立RK.m文件。
function dx=RK(t,x)
%广义坐标微分方程
dx(1)=x(n+1);
dx(2)=x(n+2);
...
dx(n)=x(2n);
%广义速度微分方程,结果先赋给向量temp
temp=M^-1*( +H+G);
dx(n+1)=temp(1);
dx(n+2)=temp(2);
...
dx(2n)=temp(n);
第二步,建立主文件control.m
3.1 采用自编四阶龙哥库塔方法
clear all;
%步长为固定值如0.01s,可以更改
h=0.01;
%初始时刻为0
t(1)=0;
%设定仿真时间为0~T(s),此处T为常数,如T=10
%循环次数k
k=10/h;
%初始条件,前n项为广义坐标,后n项为广义速度
x(1,:)=[x1 x2 …x2n];
%采用for循环编写四阶龙哥库塔函数
for i=1:k
t(i+1)=t(i)+h;
k1=RK(t(i),x(i,:));
k2=RK(t(i)+h/2,x(i,:)+k1*h/2);
k3=RK(t(i)+h/2,x(i,:)+k2*h/2);
k4=RK(t(i+1),x(i,:)+k3*h);
x(i+1,:)=x(i,:)+h/6*(k1+2*k2+2*k3+k4);
end
四阶龙哥库塔方法选取的步长越小,数值计算精度越高,一般考虑计算机计算量,选择合适的步长即可。
3.2 采用ode45函数方法
%状态向量初值
x(1,:)=[x1 x2 …x2n];
%仿真时间0~10s
tspan=[0 10];
%相对误差精度为10-6
options=odeset('RelTol',1e-6);
%调用ode45()函数
[t,x]= ode45(@RK,tspan,x(1,:),options);
在调用ode45函数的语句中,t为时间变量,x为返回的与时间对应的状态值。与自编龙哥库塔方法不同,该算法无需对步长进行设定,系统将采用变步长。
4 仿真图形处理
4.1 图形输出方式
Matlab仿真的结果要以形象、直观的方式展示出来。机械臂轨迹及误差图形的常用输出方式主要有两种:二维曲线和三维曲线。
二维曲线的输出用plot()函数,三维曲线输出用plot3()函数。示例如下:
%输出广义坐标q1的变化曲线
plot(t,x(:,1));
%输出机械臂末端自然坐标(x0,y0)随时间的变化曲线
plot3(x0,y0,t);
若要求输出图形框体仅显示横纵坐标轴两条框线,则需在图形输出之前,加上一个语句:
hold on;
这样就可以隐藏上边框线和右边框线。
4.2 图形文字添加
一般,为了使图形的显示更明了,有必要添加文字说明。文字内容包括坐标名称、曲线名称、图形名称等,添加方式常用的有xlabel()、ylabel()、zlabel()、gtext()、legend()等。前三个是对坐标轴名称的添加,第四个可在图形任意位置添加说明文字,通过鼠标来指定位置,最后一个用于对多条曲线的说明,需要按曲线的输出次序进行相应的说明。示例如下: