基于机器人工具箱机械臀路径规划.zip

  • w3_101752
    了解作者
  • matlab
    开发工具
  • 2.1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-02-23 11:20
    上传日期
使用matlab,配置好机器人工具箱Robotics Toolbox后,调用相关库函数实现路径规划,可以自己指定路径,但要注意D-H参数的约束,注意机械臂的机械限位(与你的D-H参数有关)
Example.zip
  • Text3.m
    5.5KB
内容介绍
clear; clc; %三级项目程序 %内容:使机械臂按照人为期望的轨迹进行运动 %建立机器人模型,赋予相关的参数 %注释为自己理解写的,不一定对啊 %SerialLink表示串行连杆机械臂,使用标准D-H参数法建模,连杆相关参数来源东北大学的课件 %注意:连杆参数和轨迹范围有着紧密的联系,可能会出现机械臂到达不了相关的轨迹的范围,可能 %是因为机械限位的问题,导致相关机械结构无法到达预设轨迹点,因此要么根据机械臂的参数来更正 %实际的轨迹范围,要么根据预定的轨迹范围选择合适的D-H参数, L1(1)=Link([0,0,0,pi/2]); L1(2)=Link([0,0,0.4318,0]); L1(3)=Link([0, 0.15005,0.0203,-pi/2]); L1(4)=Link([0,0.4318,0,pi/2]); L1(5)=Link([0,0,0,-pi/2]); L1(6)=Link([0,0,0,0]); robot=SerialLink(L1,'name','Ysu_Robot');%创建一个六自由度机械臂,创建一个SerialLink类的实例对象 %画直线和圆弧 %画直线需要确定相关的三维坐标点 %连续轨迹画图 T1=transl(0.2,0.5,-0.5);%点1 T2=transl(0.2,0,-0.5);%点2 T3=transl(0.2,-0.5,-0.5);%点3 T4=transl(0.2,-0.5,0.5);%点4 T5=transl(0.2,0.5,0.5);%点5 T6=transl(0.2,0.5,-0.5); T7=transl(0.5,0.5,-0.5); T8=transl(0.5,0.5,0.5); T9=transl(0.5,-0.5,0.5); T10=transl(0.5,-0.5,-0.5); T11=transl(0.2,-0.5,-0.5); T12=transl(0,-0.5,-0.5);%新增的轨迹,机械臂走到圆的位置开始画圆 T13=transl(-0.2,-0.5,-0.5);%以下轨迹是画个矩形轨迹与右面呈对称状态 T14=transl(-0.2,0.5,-0.5); T15=transl(-0.2,0.5,0.5); T16=transl(-0.2,-0.5,0.5); T17=transl(-0.2,-0.5,-0.5); T18=transl(-0.5,-0.5,-0.5); T19=transl(-0.5,-0.5,0.5); T20=transl(-0.5,0.5,0.5); T21=transl(-0.5,0.5,-0.5); T22=transl(-0.2,0.5,-0.5);%回到对称点 t=[0:0.4:8]';%矩阵A的转置表示成 A',这给的是步长,按步长来 %以下是根据初末状态得到相应的位姿 Ts1=ctraj(T1,T2,length(t)); Ts2=ctraj(T2,T3,length(t)); Ts3=ctraj(T3,T4,length(t)); Ts4=ctraj(T4,T5,length(t)); Ts5=ctraj(T5,T6,length(t)); Ts6=ctraj(T6,T7,length(t)); Ts7=ctraj(T7,T8,length(t)); Ts8=ctraj(T8,T9,length(t)); Ts9=ctraj(T9,T10,length(t)); Ts10=ctraj(T10,T11,length(t)); Ts11=ctraj(T11,T12,length(t)); Ts12=ctraj(T12,T13,length(t)); Ts13=ctraj(T13,T14,length(t)); Ts14=ctraj(T14,T15,length(t)); Ts15=ctraj(T15,T16,length(t)); Ts16=ctraj(T16,T17,length(t)); Ts17=ctraj(T17,T18,length(t)); Ts18=ctraj(T18,T19,length(t)); Ts19=ctraj(T19,T20,length(t)); Ts20=ctraj(T20,T21,length(t)); Ts21=ctraj(T21,T22,length(t)); %在图上画圆心坐标为(0,-0.5,-0.3)半径为0.2的圆 n = 50; h=zeros(4,4,n); for i = 1:n h(1,1,i)=1; h(2,2,i)=1; h(3,3,i)=1; alpht =-pi/2+2*pi*(i-1)/(n-1);%这意思就是让角度正好累加一圈,-pi/2 %意味着从最底部开始画圆 h(1,4,i)=0+0.2*cos(alpht);%0.5为X轴 h(2,4,i)=-0.5;%为Y轴 h(3,4,i)=-0.3+0.2*sin(alpht);%为Z轴 end %以下进行逆运动学分析得到随时间变化的对应旋转角度 q_c=robot.ikine6s(h); q_s1=robot.ikine6s(Ts1); q_s2=robot.ikine6s(Ts2); q_s3=robot.ikine6s(Ts3); q_s4=robot.ikine6s(Ts4); q_s5=robot.ikine6s(Ts5); q_s6=robot.ikine6s(Ts6); q_s7=robot.ikine6s(Ts7); q_s8=robot.ikine6s(Ts8); q_s9=robot.ikine6s(Ts9); q_s10=robot.ikine6s(Ts10); q_s11=robot.ikine6s(Ts11); %新加的转换后的代码 q_s12=robot.ikine6s(Ts12); q_s13=robot.ikine6s(Ts13); q_s14=robot.ikine6s(Ts14); q_s15=robot.ikine6s(Ts15); q_s16=robot.ikine6s(Ts16); q_s17=robot.ikine6s(Ts17); q_s18=robot.ikine6s(Ts18); q_s19=robot.ikine6s(Ts19); q_s20=robot.ikine6s(Ts20); q_s21=robot.ikine6s(Ts21); %将x,y,z对应的时间向量提取出来 x=squeeze(Ts1(1,4,:)); y=squeeze(Ts1(2,4,:)); z=squeeze(Ts1(3,4,:)); x1=squeeze(Ts2(1,4,:)); y1=squeeze(Ts2(2,4,:)); z1=squeeze(Ts2(3,4,:)); x2=squeeze(Ts3(1,4,:)); y2=squeeze(Ts3(2,4,:)); z2=squeeze(Ts3(3,4,:)); x3=squeeze(Ts4(1,4,:)); y3=squeeze(Ts4(2,4,:)); z3=squeeze(Ts4(3,4,:)); x4=squeeze(Ts5(1,4,:)); y4=squeeze(Ts5(2,4,:)); z4=squeeze(Ts5(3,4,:)); x5=squeeze(Ts6(1,4,:)); y5=squeeze(Ts6(2,4,:)); z5=squeeze(Ts6(3,4,:)); x6=squeeze(Ts7(1,4,:)); y6=squeeze(Ts7(2,4,:)); z6=squeeze(Ts7(3,4,:)); x7=squeeze(Ts8(1,4,:)); y7=squeeze(Ts8(2,4,:)); z7=squeeze(Ts8(3,4,:)); x8=squeeze(Ts9(1,4,:)); y8=squeeze(Ts9(2,4,:)); z8=squeeze(Ts9(3,4,:)); x9=squeeze(Ts10(1,4,:)); y9=squeeze(Ts10(2,4,:)); z9=squeeze(Ts10(3,4,:)); x10=squeeze(Ts11(1,4,:)); y10=squeeze(Ts11(2,4,:)); z10=squeeze(Ts11(3,4,:)); x11=squeeze(h(1,4,:)); y11=squeeze(h(2,4,:)); z11=squeeze(h(3,4,:)); %代码新加的 x12=squeeze(Ts12(1,4,:)); y12=squeeze(Ts12(2,4,:)); z12=squeeze(Ts12(3,4,:)); x13=squeeze(Ts13(1,4,:)); y13=squeeze(Ts13(2,4,:)); z13=squeeze(Ts13(3,4,:)); x14=squeeze(Ts14(1,4,:)); y14=squeeze(Ts14(2,4,:)); z14=squeeze(Ts14(3,4,:)); x15=squeeze(Ts15(1,4,:)); y15=squeeze(Ts15(2,4,:)); z15=squeeze(Ts15(3,4,:)); x16=squeeze(Ts16(1,4,:)); y16=squeeze(Ts16(2,4,:)); z16=squeeze(Ts16(3,4,:)); x17=squeeze(Ts17(1,4,:)); y17=squeeze(Ts17(2,4,:)); z17=squeeze(Ts17(3,4,:)); x18=squeeze(Ts18(1,4,:)); y18=squeeze(Ts18(2,4,:)); z18=squeeze(Ts18(3,4,:)); x19=squeeze(Ts19(1,4,:)); y19=squeeze(Ts19(2,4,:)); z19=squeeze(Ts19(3,4,:)); x20=squeeze(Ts20(1,4,:)); y20=squeeze(Ts20(2,4,:)); z20=squeeze(Ts20(3,4,:)); x21=squeeze(Ts21(1,4,:)); y21=squeeze(Ts21(2,4,:)); z21=squeeze(Ts21(3,4,:)); %X1=[x;x1;y2;x3;x4;x5;x6;x7;x8;x9];Y1=[y;y1;y2;y3;y4;y5;y6;y7;y8;y9];Z1=[z;z1;z2;z3;z4;z5;z6;z7;z8;z9]; X2=[x;x1;x2;x3;x4;x5;x6;x7;x8;x9;x10;x11;x12;x13;x14;x15;x16;x17;x18;x19;x20;x21]; Y2=[y;y1;y2;y3;y4;y5;y6;y7;y8;y9;y10;y11;y12;y13;y14;y15;y16;y17;y18;y19;y20;y21]; Z2=[z;z1;z2;z3;z4;z5;z6;z7;z8;z9;z10;z11;z12;z13;z14;z15;z16;z17;z18;z19;z20;z21]; figure('Name','Ysu_Robot机器人末端轨迹图'); plot3(X2,Y2,Z2);%绘制期望轨迹对应的曲线 q =[q_s1;q_s2;q_s3;q_s4;q_s5;q_s6;q_s7;q_s8;q_s9;q_s10;q_s11;q_c;q_s12;q_s13;q_s14... ;q_s15;q_s16;q_s17;q_s18;q_s19;q_s20;q_s21]; robot.plot(q);%画机械臂的动态轨迹图
评论
    相关推荐
    • matlab 课件
      matlab 功能很强大,本课件详细的介绍了matlab在科学计算中的应用。
    • Matlab教程
      MatlaB经典ppt,主要讲解了MatlaB的入门知识,图形编程以及仿真。
    • matlab入门
      matlab的入门教程,很值得仔细看看,对提高matlab能力有帮助
    • matlab编译器
      matlab编译为exe文件所需要的文件; 使用时解压,将解压后文件拖入至matlab命令行即可
    • matlab
      matlab的基础知识进行介绍
    • MatLab
      “#MatLab
    • MATLAB编译器
      基于MATLAB 2018b版本介绍MATLAB编译器。介绍如何利用编译器将MATLAB代码编译为独立应用程序或组件,并在没有安装MATLAB的计算机上进行部署。
    • MATLAB 论文
      基于MATLAB的论文撰写!可以为你指明一条写作MATLAB论文的道路!
    • matlab
      matlab经典课堂讲义
    • matlab
      matlab