视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
双连杆平面机械手跟踪Matlab程序详解
2025-09-29 16:34:49 责编:小OO
文档
//全局变量宏定义

g//大臂质量

g//小臂的质量

global L1  //大臂长度

global L2  //小臂长度

global Lc1 大臂质心到臂起点距离

global Lc2 小臂臂质心到臂起点距离

global I1  //大臂转动惯量

global I2  //小臂转动惯量

g重力加速度

global tau //转矩

m1=1;

m2=0.2;

L1=1;

L2=0.6;

Lc1=0.5;

Lc2=0.3;

I1=0.1;

I2=0.02;

g=9.8;

clear;

clc;

parameters;//参数传递

xx=[]; 关节角度和角速度存储矩阵

tt=[]; //时间点矩阵

th=[]; //存取关节角度矩阵

dth=[]; 存取关节角速度矩阵

r=[];  存取机械臂末端位置坐标矩阵

kp=100; //闭环系统的刚度

kd=14; 阻尼比

x=[-0.6857;2.6559;0;0];//关节角度和角速度初始值 

//计算期望关节角度和角速度

for t=0:0.01:10.0 //时间间隔0.01,取1000个时间片段

  //存储当前时间点

 当前时刻机械臂末端位置所对应的关节角度

 //存储这一时间点的关节角度

 根据雅克比矩阵和机械臂末端速度求解关节角速度,保存

 //存储这一时间点机械臂末端位置坐标

end

nt=length(tt);//nt所有的时间点—即1000

for k=1:nt

 根据闭环系统刚度和阻尼比计算伺服控制规律补偿转矩

 根据动力学方程是求解系统转矩

 求解区间

 //求解动力学方程式—得到 

 取求解区间中最后一个解

 //保存当前时刻点关节角度和角速度

end

hold on;

plot(L1*cos(xx(1,:))+L2*cos(xx(1,:)+xx(2,:)),L1*sin(xx(1,:))+L2*sin(xx(1,:)+xx(2,:)));

plot(r(1,:),r(2,:),'.-');

//动力学方程式

function [ v ] = d_f( t,x )

parameters;

th_1=x(1);//关节1角度

th_2=x(2);//关节2角度

thd_1=x(3);//关节1角速度

thd_2=x(4);//关节2角速度

M=[m1*Lc1^2+I1+I2+m2*(L1^2+Lc2^2+2*L1*Lc2*cos(th_2)) I2+m2*(Lc2^2+L1*Lc2*cos(th_2));I2+m2*(Lc2^2+L1*Lc2*cos(th_2)) m2*Lc2^2+I2];  

vec=[-m2*L1*Lc2*sin(th_2)*(thd_2^2+2*thd_1*thd_2);m2*L1*Lc2*sin(th_2)*thd_1^2];

grav=g*[m1*Lc1*cos(th_1)+m2*(L1*cos(th_1)+Lc2*cos(th_1+th_2));m2*Lc2*cos(th_1+th_2)];

result=M\\(-vec-grav+tau);

thdd_1=result(1);

thdd_2=result(2);

v=[thd_1;thd_2;thdd_1;thdd_2];// 

end

//根据控制要求计算机械臂末端位置坐标

function [ r ]= r_path( t ) 

parameters;

r=[0;0];  //机械臂末端位置坐标

r(1)=0.1*cos(0.2*pi*t)+0.5;//计算x轴坐标

r(2)=0.1*sin(0.2*pi*t);//计算y轴坐标

end

//根据控制要求计算机械臂末端速度

function [ dr ] = dr_path(t)  

parameters;

dr=[0;0];  //机械臂末端速度大小(x轴、y轴方向)

dr(1)=-0.1*0.2*pi*sin(0.2*pi*t);//计算x轴方向速度

dr(2)=0.1*0.2*pi*cos(0.2*pi*t);//计算y轴方向速度

end

//根据逆运动学公式----上面两个函数求的期望控制要求的机械臂末端位置计算关节控制角度。

function [ th ] = th_path( t ) 

parameters;

r0=r_path(t);//r0当前机械臂末端位置坐标

alpha=acos((L1^2+L2^2-r0(1)^2-r0(2)^2)/(2*L1*L2));

th_2=pi-alpha;

th_1=atan(r0(2)/r0(1))-atan(L2*sin(th_2)/(L1+L2*cos(th_2)));

th=[th_1;th_2];//th当前机械臂处于当前位置时的关节角度大小 

end

//雅可比矩阵

function [ J ] = Jaccbi(th,t)

parameters;

th_1=th(1);

th_2=th(2);

J=[-L1*sin(th_1)-L2*sin(th_1+th_2);L2*sin(th_1+th_2);L1*cos(th_1)+L2*cos(th_1+th_2) L2*cos(th_1+th_2)];

End

//重力矩阵、柯氏力和重力矩阵估计

function [M, H]=estimat_M_H(x)

parameters;

th_1=x(1);

th_2=x(2);

thd_1=x(3);

thd_2=x(4);

M=[m1*Lc1^2+I1+I2+m2*(L1^2+Lc2^2+2*L1*Lc2*cos(th_2)) I2+m2*(Lc2^2+L1*Lc2*cos(th_2));

  I2+m2*(Lc2^2+L1*Lc2*cos(th_2)) m2*Lc2^2+I2];

vec=[-m2*L1*Lc2*sin(th_2)*(thd_2^2+2*thd_1*thd_2);m2*L1*Lc2*sin(th_2)*thd_1^2];

grav=g*[m1*Lc1*cos(th_1)+m2*(L1*cos(th_1)+Lc2*cos(th_1+th_2));m2*Lc2*cos(th_1+th_2)];

H=vec+grav;

End下载本文

显示全文
专题