精华内容
下载资源
问答
  • 六自由度机械臂

    2015-03-28 16:02:34
    六自由度的机械臂,主要说的是六自由度机械臂的好处与应用的优势,在其他的可选择性
  • 六自由度机械臂阻抗控制方法研究,六自由度机械臂阻抗控制方法研究,六自由度机械臂阻抗控制方法研究,六自由度机械臂阻抗控制方法研究
  • 本文是针对MATLAB中的robot工具箱对四自由度机械臂和六自由度机械臂进行仿真,对这两个机械臂进行建模,D-H参数设置,进行了机械臂正逆运动学验证,最后给定空间中一点,将两机械臂进行轨迹规划,是其均运动到该点,...
  • 一种六自由度机械臂避障算法研究pdf,一种六自由度机械臂避障算法研究
  • 六自由度机械臂正解仿真程序,可进行参数修改,已在matlab中实现
  • 遨博六自由度机械臂的厂家配套用户使用手册,内含机械臂工作原理和示教器使用教程。
  • 六自由度机械臂运动路径设计的探讨pdf,对六自由度机械臂运动路径设计的探讨
  • _六自由度机械臂关节模块化技术研究 本文主要研究内容包括以下几个方面: 1 .模块化关节的动力系统设计选取,传动方案的选取; 2 .模块化关节电机、减速器及失电保护装置的选型; 3 .模块化关节机械结构设计及...
  • 为了研究六自由度液压机械臂在重载工况下连杆结构的微小弹性变形对末端位置精度的影响,利用ADAMS软件...根据分析结果得出了连杆结构的弹性变形对六自由度机械臂末端位置误差的影响程度,并对各连杆机械结构进行了优化。
  • 建立六自由度机械臂的关节坐标系,根据D-H参数法建立六自由度机械臂的运动学方程。正向运动学根据各关节的关节角度求取末端机构的位置和姿态;逆向运动学运用几何法来进行求解。根据逆解的选取原则从8组解中选取最优解...
  • 六自由度机械臂控制系统设计与运动学仿真
  • 六自由度机械臂分数阶自适应非奇异终端滑模控制器设计
  • 六自由度机械臂模块化关节控制技术_李威
  • 六自由度机械臂轨迹跟踪控制策略研究_鲁彩丽
  • 六自由度机械臂基于视觉反馈的运动规划仿真,谢昕,,基于视觉反馈的机器人运动规划,其目的就是使机器人在其自身的视觉系统的引导下,完成对预定目标的自主运动规划,而不需要人工的
  • 六自由度机械臂运动学分析及其轨迹规划

    万次阅读 多人点赞 2020-01-07 22:11:24
    六自由度机械臂轨迹规划 通过对比三次多项式插值法与五次多项式插值法的效果,选取后者对机械臂进行轨迹规划,将运动学解导入Matlab Robotics Toolbox仿真,得到各关节角度、速度和加速度与时间关系曲线。 三次...

    六自由度机械臂运动学分析

    本文以6R机械臂为研究对象,采用改进D-H 模型进行运动学分析、求解。

    1.1 机械臂结构参数

    该机械臂 6 个关节都是转动关节,前 3 个关节确定手腕参考点的位置,后 3个关节确定手腕的方位。和大多数工业机器人一样,后 3 个关节轴线交于一点。因此将该点作为手腕的参考点,也选作为连杆坐标系{4},{5}和{6}的原点。如下图示。
    图1

    对于机械臂, 通常将之看作“连杆结构” ,连杆是由关节组合而成。因此在分析机械臂的时候需要为机械手的每一连杆建立一个坐标系。在分析连杆坐标系时, 通常需要在每个连杆上定义一个固连的坐标系来表明每个连杆与相邻连杆之间的相对位置关系。基于此原则, 我们首先为各连杆和关节进行编号, 然后采用由下而上的顺序,基座为连杆 0,从基座起依次向上为连杆 1、连杆 2、 …, 关节i 连接连杆i-1和i 。 最终建立与连杆固连的坐标系OiXi Yi Zi ,如下所示:

    根据所设定的连杆坐标系, 相应的连杆参数可定义如下:
    (1) 绕 xi-1轴旋转αi-1角, 可使 zi-1轴与 zii轴同一平面;
    (2)沿 xii-1轴平移距离αi-1, 可使 zi-1轴与 zi 轴同一高度上;
    (3)绕 zi 轴旋转θi 角, 可使 xi-1轴与 xi 轴同一直线上;
    (4)沿 zi 轴平移距离 di, 可使连杆i -1的坐标系移动到其原点与连杆i 坐标系原点重合。

    可根据改进的 D-H 示法, 对机械臂建立坐标系。 在改进 D-H 坐标系中, 坐标系{0}和{1}一般重合, O1 为轴 1 和轴 2 公法线在轴 1 上的交点,此时关节 1 和关节 2 在 z 轴向上的偏置没有体现出来, 但对于整个机械臂各关节的相对运动来说并没有影响。 选取第一关节坐标系与基坐标系重合。根据机械臂的结构和连杆坐标系,可得出其连杆参数和关节变量,如下表示:

    在这里插入图片描述

    1.2 运动学正解

    由上述的相邻连杆的运动关系可知, 连杆i 在杆件坐标系i -1中的相对位姿可用 4 个齐次变换矩阵来描述, 如下矩阵表示为:

    因此,机械臂的末端执行器坐标系相对于基座标系的变换矩阵为:
    在这里插入图片描述
    从而在得知各关节角度的情况下,可求得机器人末端执行器的位姿。

    1.3 运动学逆解

    机械臂的逆运动学问题, 是指已知机械臂的末端位姿, 即已知齐次变换矩阵,求解各转动关节的角度。 因此机械臂的逆运动学问题, 可以理解为通过正运动学方程求解关节的 θ1 、θ2 、θ3 、θ4 、θ5 、θ6

    六自由度机械臂轨迹规划

    对串联机械臂而言,轨迹规划可以分为:关节空间轨迹规划和笛卡尔空间轨迹规划。关节空间轨迹规划是把机器人的关节变量变换成跟时间的函数,然后对角速度和角加速度进行约束。笛卡尔空间轨迹规划是把机器人末端在笛卡尔空间的位移、速度和加速度变换成跟时间的函数关系。

    由于在关节空间中进行轨迹规划是直接用运动时的受控变量规划轨迹,有着计算量小,容易实时控制,而且不会发生机构奇异性等优点,所以经常被采用。

    现以一维的轨迹为研究对象,利用三次多项式插值法和五次多项式插值法分别对其进行轨迹规划,通过对比两种插值法的效果,选取效果更优者对六自由度机械臂进行轨迹规划。

    序号 位置/m 速度/(m/s) 加速度(m/s2 时间/s
    1 0 0 0 0
    2 50 10 20 3
    3 150 20 30 6
    4 100 -15 -20 12
    5 0 0 0 14

    2.1 三次多项式插值法

    三次多项式有4个待定系数,可同时对起始点和目标点的角度和角速度给出约束条件。

    数学推导

    ——两条眉毛——两条眉毛

    MATLAB代码

    %三次多项式插值法
    clear;
    clc;
    q_array=[0,50,150,100,0];%指定起止位置
    t_array=[0,2,4,8,10];%指定起止时间
    v_array=[0,10,20,-15,0];%指定起止速度
    t=[t_array(1)];q=[q_array(1)];v=[v_array(1)];a=[0];%初始状态
    for i=1:1:length(q_array)-1%每一段规划的时间
         a0=q_array(i);
         a1=v_array(i);
         a2=(3/(t_array(i+1)-t_array(i))^2)*(q_array(i+1)-q_array(i))-(1/(t_array(i+1)-t_array(i)))*(2*v_array(i)+v_array(i+1));
         a3=(2/(t_array(i+1)-t_array(i))^3)*(q_array(i)-q_array(i+1))+(1/(t_array(i+1)-t_array(i))^2)*(v_array(i)+v_array(i+1));
         ti=t_array(i)+0.001:0.001:t_array(i+1);
         qi=a0+a1*(ti-t_array(i))+a2*(ti-t_array(i)).^2+a3*(ti-t_array(i)).^3;
         vi=a1+2*a2*(ti-t_array(i))+3*a3*(ti-t_array(i)).^2;
         ai=2*a2+6*a3*(ti-t_array(i));
         t=[t,ti];q=[q,qi];v=[v,vi];a=[a,ai];
    end
    subplot(3,1,1),plot(t,q,'r'),xlabel('t/s'),ylabel('p/m');hold on; plot(t_array,q_array,'o','color','r'),grid on;
    subplot(3,1,2),plot(t,v,'b'),xlabel('t/s'),ylabel('v/(m/s)');hold on;plot(t_array,v_array,'*','color','r'),grid on;
    subplot(3,1,3),plot(t,a,'g'),xlabel('t/s'),ylabel('a/(m/s^2)');hold on;
    % 指定文件夹保存图片
    filepath=pwd;           %保存当前工作目录
    cd('C:\Users\Administrator\Desktop\pic')                %把当前工作目录切换到图片存储文件夹
    print(gcf,'-djpeg','C:\Users\Administrator\Desktop\pic\san.jpeg'); %将图片保存为jpg格式,
    cd(filepath)            %切回原工作目录
    
    

    ——两条眉毛

    2.2 五次多项式插值法

    五次多项式有6个待定系数,可同时对起始点和目标点的角度、角速度和角加速度给出约束条件。

    数学推导

    ——两条眉毛
    ——两条眉毛

    MATLAB代码

    %五次多项式插值法
    clear;
    clc;
    q_array=[0,50,150,100,40];%指定起止位置
    t_array=[0,3,6,12,14];%指定起止时间
    v_array=[0,10,20,-15,0];%指定起止速度
    a_array=[0,20,30,-20,0];%指定起止加速度
    t=[t_array(1)];q=[q_array(1)];v=[v_array(1)];a=[a_array(1)];%初始状态
    for i=1:1:length(q_array)-1%每一段规划的时间
         T=t_array(i+1)-t_array(i);
         a0=q_array(i);
         a1=v_array(i);
         a2=a_array(i)/2;
         a3=(20*q_array(i+1)-20*q_array(i)-(8*v_array(i+1)+12*v_array(i))*T-(3*a_array(i)-a_array(i+1))*T^2)/(2*T^3);
         a4=(30*q_array(i)-30*q_array(i+1)+(14*v_array(i+1)+16*v_array(i))*T+(3*a_array(i)-2*a_array(i+1))*T^2)/(2*T^4);
         a5=(12*q_array(i+1)-12*q_array(i)-(6*v_array(i+1)+6*v_array(i))*T-(a_array(i)-a_array(i+1))*T^2)/(2*T^5);%计算五次多项式系数 
         ti=t_array(i):0.001:t_array(i+1);
         qi=a0+a1*(ti-t_array(i))+a2*(ti-t_array(i)).^2+a3*(ti-t_array(i)).^3+a4*(ti-t_array(i)).^4+a5*(ti-t_array(i)).^5;
         vi=a1+2*a2*(ti-t_array(i))+3*a3*(ti-t_array(i)).^2+4*a4*(ti-t_array(i)).^3+5*a5*(ti-t_array(i)).^4;
         ai=2*a2+6*a3*(ti-t_array(i))+12*a4*(ti-t_array(i)).^2+20*a5*(ti-t_array(i)).^3;
         t=[t,ti(2:end)];q=[q,qi(2:end)];v=[v,vi(2:end)];a=[a,ai(2:end)];
    end
    subplot(3,1,1),plot(t,q,'r'),xlabel('t/s'),ylabel('p/m');hold on; plot(t_array,q_array,'o','color','r'),grid on;
    subplot(3,1,2),plot(t,v,'b'),xlabel('t/s'),ylabel('v/(m/s)');hold on;plot(t_array,v_array,'*','color','r'),grid on;
    subplot(3,1,3),plot(t,a,'g'),xlabel('t/s'),ylabel('a/(m/s^2)');hold on;plot(t_array,a_array,'^','color','r'),grid on;
    % 指定文件夹保存图片
    filepath=pwd;           %保存当前工作目录
    cd('C:\Users\Administrator\Desktop\pic')                %把当前工作目录切换到图片存储文件夹
    print(gcf,'-djpeg','C:\Users\Administrator\Desktop\pic\wu.jpeg'); %将图片保存为jpg格式,
    cd(filepath)            %切回原工作目录
    

    ——两条眉毛

    2.3 两种插值法的效果对比

    相对于三次多项式插值, 五次多项式插值法所得到的轨迹加速度也是平滑的曲线,并没有出现跳变的情况。

    在机器人系统中,关节角加速度出现跳变现象意味着关节的电机会受到冲击, 因此为保证电机平稳运行,角加速度要求平滑连续。

    虽然三次多项式插值法的计算量和较之更小,但对于离线规划而言,该时间成本可以忽略,因此从规划的轨迹平稳度而言,五次多项式插值法更佳。

    六自由度机械臂轨迹规划仿真

    采用五次多项式插值法进行机械臂轨迹规划,基于Matlab Robotics Toolbox平台进行关节空间轨迹规划,得到各关节角度、速度和加速度与时间关系曲线。

    需要注意的是,利用Robotics Toolbox进行轨迹规划前,需要安装工具箱,可参考以下博客:
    matlab安装Robotics Toolbox 机器人工具箱

    此外,每次重新启动MATLAB时都需要重新输入“startup_rvc”回车来启动这个工具箱。

    本文所控对象为串联六R机械臂,其具体尺寸参数见于代码中的D-H表。

    MATLAB代码

    % Modified DH
    % ABB robot
    % lujingguihua
    clear;
    clc;
    % %机器人建模
    th(1) = 0; d(1) = 0; a(1) = 0; alp(1) = 0;
    th(2) = 0; d(2) = 0; a(2) = 3.20; alp(2) = pi/2;   
    th(3) = 0; d(3) = 0; a(3) = 9.75; alp(3) = 0;
    th(4) = 0; d(4) = 8.87; a(4) = 2; alp(4) = pi/2;
    th(5) = 0; d(5) = 0; a(5) = 0; alp(5) = -pi/2;
    th(6) = 0; d(6) = 0; a(6) = 0; alp(6) = pi/2;
    % DH parameters  th     d    a    alpha  sigma
    L1 = Link([th(1), d(1), a(1), alp(1), 0], 'modified');
    L2 = Link([th(2), d(2), a(2), alp(2), 0], 'modified');
    L3 = Link([th(3), d(3), a(3), alp(3), 0], 'modified');
    L4 = Link([th(4), d(4), a(4), alp(4), 0], 'modified');
    L5 = Link([th(5), d(5), a(5), alp(5), 0], 'modified');
    L6 = Link([th(6), d(6), a(6), alp(6), 0], 'modified');
    robot = SerialLink([L1, L2, L3, L4, L5, L6]); %SerialLink 类函数
    robot.name='Robot-6-dof';
    robot.display(); %显示D-H表
    
    %轨迹规划参数设置
    init_ang = [pi/6,0, 2*pi/3,pi/3, 0, 0];
    targ_ang = [pi/2,pi/6,0,0, -pi/2, pi/6];
    T =(0:0.1:5);
    %关节空间轨迹规划方法
    [q,qd,qdd] = jtraj(init_ang,targ_ang,T); %直接得到角度、角速度、角加速度的的序列
    
    %%显示
    figure(1);
    %动画显示
    subplot(1,2,1); 
    title('动画过程');
    robot.plot(q);
    % 轨迹显示
    t=robot.fkine(q);%运动学正解
    rpy=tr2rpy(t);  %t中提取位置(xyz)
    subplot(1,2,2);
    plot2(rpy);
    xlabel('X/mm'),ylabel('Y/mm'),zlabel('Z/mm');hold on
    title('空间轨迹');
    text(rpy(1,1),rpy(1,2),rpy(1,3),'A点');
    text(rpy(51,1),rpy(51,2),rpy(51,3),'B点');
    % 指定文件夹保存图片
    filepath=pwd;           %保存当前工作目录
    cd('C:\Users\Administrator\Desktop\pic')                %把当前工作目录切换到图片存储文件夹
    print(gcf,'-djpeg','C:\Users\Administrator\Desktop\pic\1.jpeg'); %将图片保存为jpg格式,
    cd(filepath)            %切回原工作目录
    
    %单个关节的位置title('关节1位置');
    figure(2);
    subplot(3,2,1);
    plot(T,q(:,1));
    xlabel('t/s'),ylabel('θ1/rad');hold on
    subplot(3,2,2);
    plot(T,q(:,2));
    xlabel('t/s'),ylabel('θ2/rad');hold on
    subplot(3,2,3);
    plot(T,q(:,3));
    xlabel('t/s'),ylabel('θ3/rad');hold on
    subplot(3,2,4);
    plot(T,q(:,4));
    xlabel('t/s'),ylabel('θ4/rad');hold on
    subplot(3,2,5);
    plot(T,q(:,5));
    xlabel('t/s'),ylabel('θ5/rad');hold on
    subplot(3,2,6);
    plot(T,q(:,6));
    xlabel('t/s'),ylabel('θ6/rad');hold on
    % 指定文件夹保存图片
    filepath=pwd;           %保存当前工作目录
    cd('C:\Users\Administrator\Desktop\pic')                %把当前工作目录切换到图片存储文件夹
    print(gcf,'-djpeg','C:\Users\Administrator\Desktop\pic\2.jpeg'); %将图片保存为jpg格式,
    cd(filepath)            %切回原工作目录
    
    %单个关节的速度
    figure(3);
    subplot(3,2,1);
    plot(T,qd(:,1));
    xlabel('t/s'),ylabel('Ω1/rad');hold on
    subplot(3,2,2);
    plot(T,qd(:,2));
    xlabel('t/s'),ylabel('Ω2/rad');hold on
    subplot(3,2,3);
    plot(T,qd(:,3));
    xlabel('t/s'),ylabel('Ω3/rad');hold on
    subplot(3,2,4);
    plot(T,qd(:,4));
    xlabel('t/s'),ylabel('Ω4/rad');hold on
    subplot(3,2,5);
    plot(T,qd(:,5));
    xlabel('t/s'),ylabel('Ω5/rad');hold on
    subplot(3,2,6);
    plot(T,qd(:,6));
    xlabel('t/s'),ylabel('Ω6/rad');hold on
    % 指定文件夹保存图片
    filepath=pwd;           %保存当前工作目录
    cd('C:\Users\Administrator\Desktop\pic')                
    %把当前工作目录切换到图片存储文件夹
    print(gcf,'-djpeg','C:\Users\Administrator\Desktop\pic\3.jpeg'); %将图片保存为jpg格式,
    cd(filepath)            %切回原工作目录
    
    %单个关节的加速度
    figure(4);
    subplot(3,2,1);
    plot(T,qdd(:,1));
    xlabel('t/s'),ylabel('α1/rad');hold on
    subplot(3,2,2);
    plot(T,qdd(:,2));
    xlabel('t/s'),ylabel('α2/rad');hold on
    subplot(3,2,3);
    plot(T,qdd(:,3));
    xlabel('t/s'),ylabel('α3/rad');hold on
    subplot(3,2,4);
    plot(T,qdd(:,4));
    xlabel('t/s'),ylabel('α4/rad');hold on;
    subplot(3,2,5);
    plot(T,qdd(:,5));
    xlabel('t/s'),ylabel('α5/rad');hold on
    subplot(3,2,6);
    plot(T,qdd(:,6));
    xlabel('t/s'),ylabel('α6/rad');hold on
    % 指定文件夹保存图片
    filepath=pwd;           %保存当前工作目录
    cd('C:\Users\Administrator\Desktop\pic')                %把当前工作目录切换到图片存储文件夹
    print(gcf,'-djpeg','C:\Users\Administrator\Desktop\pic\4.jpeg'); %将图片保存为jpg格式,
    cd(filepath)            %切回原工作目录
    

    ——两条眉毛
    ——两条眉毛

    结论

    通过轨迹规划,不仅得到了机械臂末端执行器的空间轨迹,还可以得到其关节的角位移、角速度和角加速度。从上图 可以看出机械臂到达预定的位置,证明了该机械臂设计的合理性。随着运动的进行, 各个关节的角度与时间关系的曲线, 可以看到其运动过程连续平滑。而且在图 中可以看出各关节的角速度和角加速度都是光滑变化的,没有出现跳变点。进一步地,在首末两点的速度以及加速度都可以有效地约束为零。 由此可知,机械臂在进行实际作业时,各关节、 运动部件可以平稳地运行。

    参考文献

    [1] John J. Craig. 机器人学导论[M] . 机械工业出版社, 2006.

    [2] 周霏,陈富林,沈金龙,杨杏.基于MATLAB的四自由度机械臂运动学仿真研 究[J].机械制造与自动化,2016,45(01):115-119.

    [3] Matlab 机器人工具箱 轨迹生成----jtraj ctraj

    展开全文
  • 六轴六自由度机械臂轨迹规划的matlab实现(基于速度雅各比矩阵方法)

    六轴六自由度机械臂轨迹跟踪的matlab实现(基于速度雅各比矩阵方法)

    对于六轴六自由度机械臂进行轨迹规划,并针对其设计滑模控制器,实现机械臂的末端轨迹跟踪。(完整代码链接见文章末尾)
    本文所用机械臂为innfos-Gluon-6L3,通过standard DH方法建模得到参数如下:
    在这里插入图片描述

    本文利用速度雅各比矩阵的方法来实现轨迹跟踪。这一方法的优点在于可以完全避免逆运动学求解,更加节省时间。

    1.轨迹跟踪的控制结构图设计

    在这里插入图片描述
    控制系统的输入,同样也是系统的期望输出,是机械臂的目标位姿xd=(x,y,z,α,β,γ)x_d=(x,y,z,\alpha,\beta,\gamma)。其刚好对应机械臂的六个自由度。前三者是机械臂末端坐标系相对于世界坐标系的位置,后三者是机械臂末端坐标系相对于世界坐标系的旋转角度。每一时刻的机械臂期望位姿都是已知的,它是通过轨迹规划得到的,这一点将在后文详细讲解。
    系统的控制器采用滑模控制器,其输入为位姿误差e=xdxe=x_d-x,输出为角度增量q˙\dot q
    系统的被控对象是利用速度雅各比矩阵来建模的,其关系为v=J(q)q˙v=J(q)\dot q。其中J(q)J(q)为速度雅各比矩阵。
    系统的输出为机械臂的实际末端位置x=vdtx=\int vdt

    2.系统的输入:轨迹规划

    为了使得机械臂的末端运动平滑,常对机械臂进行规划,对末端速度、加速度等进行一定约束。
    工业上常使用七段式S型曲线来进行轨迹规划,其示意图图如下:
    七段S型曲线
    其有七个等间距时间段,分别为加加速段、加速度恒定段、加减速段、匀速段、减减速段、加速度恒定段、减加速段。
    各段速度的计算表达式如下,其中JJ为加加速度。
    七段S型曲线速度表达式
    式中的vmaxv_{max}等参数的计算推导如下:
    T=ti+1ti=tft07L=4vmaxTv2=v1+amaxTamax=2v1Tvmax=v1+v2=2v1+amaxT=4v1L=16v1Tv1=L16T \bigtriangleup T=t_{i+1}-t_{i}=\frac{t_f-t_0}{7} \\ L=4v_{max} \bigtriangleup T \\ v_2=v_1+a_{max}\bigtriangleup T\\ a_{max}=\frac{2v_1}{\bigtriangleup T} \\ v_{max}=v_1+v_2=2v_1+a_{max}\bigtriangleup T=4v_1\\ L=16v_1 \bigtriangleup T \rightarrow v_1=\frac{L}{16\bigtriangleup T}
    所以最终只需知道末端位移LL和所需时间TT,即可计算得到整个轨迹规划曲线。其matlab代码实现如下。
    其中的x_sx\_sy_sy\_sz_sz\_s分别为每时的机械臂末端位置,即期望期望位姿x_dx\_d的前三行。x_dx\_d的后三行为末端位置的姿态信息,在本次仿真中我们默认机械臂的姿态始终为0,所以x_dx\_d的后三行总是为0。

    %% 0.设定初始参数
    % xyz_start=[0,-120.02,533.96];       %轨迹起点(关节角为0)的末端坐标,单位mm;
    xyz_start=[0,-120.02,533.96];
    xyz_end=[-30,-45,385];     %轨迹终点的末端坐标;
    T=10;       %完成轨迹规划的时间;
    
    %% 1.轨迹规划
    L=sqrt((xyz_end(1)-xyz_start(1))^2+(xyz_end(2)-xyz_start(2))^2+(xyz_end(3)-xyz_start(3))^2);
    dt=T/7;        %每段的时间长度
    v1=L/(16*dt);   %第一次加速度拐点
    J=2*v1/(dt*dt); %加加速度
    amax=dt*J;      %最大加速度
    v2=v1+dt*amax;  %第二次加速度拐点
    vmax=v2+v1;     %第三次速度拐点
    
    t1 = 1*dt;
    t2 = 2*dt;
    t3 = 3*dt;
    t4 = 4*dt;
    t5 = 5*dt;
    t6 = 6*dt;
    t7 = 7*dt;
    
    t=0:0.1:T;
    
    vt1=1/2*J*t.^2.*(t>=0 & t<t1);
    vt2=(v1+amax*(t-t1)).*(t>=t1 & t<t2);
    vt3=(vmax-1/2*J*(t3-t).^2).*(t>=t2 & t<t3);
    vt4=vmax.*(t>=t3 & t<t4);
    vt5=(vmax-1/2*J*(t-t4).^2).*(t>=t4 & t<t5);
    vt6=(v2-amax*(t-t5)).*(t>=t5 & t<t6);
    vt7=(1/2*J*(t7-t).^2).*(t>=t6 & t<t7);
    
    vt=vt1+vt2+vt3+vt4+vt5+vt6+vt7;     %各时刻速度
    
    S=zeros(1,length(t));       %各时刻位移
    for i=2:length(t)
        S(i)=trapz(t(1:i),vt(1:i));
    end 
    
    %各时刻xyz的位移
    x_s=xyz_start(1)+(xyz_end(1)-xyz_start(1))/L*S;     
    y_s=xyz_start(2)+(xyz_end(2)-xyz_start(2))/L*S;
    z_s=xyz_start(3)+(xyz_end(3)-xyz_start(3))/L*S;
    
    %各时刻xyz轴的速度分量
    v_x=(xyz_end(1)-xyz_start(1))/L*vt;
    v_y=(xyz_end(2)-xyz_start(2))/L*vt;
    v_z=(xyz_end(3)-xyz_start(3))/L*vt;
    

    3.被控对象:速度雅各比矩阵

    速度雅各比矩阵方法的关系表达式如下:
    v=J(q)q˙v=J(q)\dot q
    前者vv是末端执行器的速度,后者q˙\dot q是关节角速度。表达式的物理意义是:当关节角度发生一个微小的变化q\bigtriangleup q,末端执行器也会相应产生一个微小的位姿变化x\bigtriangleup x
    速度的雅各比矩阵的求解方法有多种,如1.向量积方法 2.微分法 等等…
    本文采用向量积的方法,求解方法如下。
    在这里插入图片描述

    J(q)=[JvJw]=[J1J2J3J4J5J6]Ji=[Zi1×ri1Zi1]=[Zi1×(PnPi1)Zi1] J(q)=\begin{bmatrix}J_v\\J_w\end{bmatrix}=\begin{bmatrix}J_1&J_2&J_3&J_4&J_5&J_6\end{bmatrix}\\ J_i=\begin{bmatrix}Z_{i-1} \times r_{i-1}\\Z_{i-1}\end{bmatrix}=\begin{bmatrix}Z_{i-1} \times (P_n-P_{i-1})\\Z_{i-1}\end{bmatrix}
    本文采用的机械臂有6个关节角,因此其速度雅各比矩阵有6列,分别为JiJ_i。本文的机械臂有6个自由度,因此对应的矩阵为6行。
    每个雅各比矩阵分量JiJ_i的后三行为{i1}\{i-1\}坐标系相对于世界坐标系的ZZ轴分量;分量JiJ_i的前三行为Zi1Z_{i-1}ri1r_{i-1}的差乘,ri1r_{i-1}是末端坐标系与{i1}\{i-1\}坐标系的相对位置在世界坐标系中的表示。
    这种方法求解只适用于standard DH方法建模的模型,若使用modify DH方法建模,则需对上式的下标做一定修改。
    此方法的matlab代码实现如下:

    function [ J ] = Jacob_cross_SDH( q )
    %JACOB_CROSS_SDH 函数摘要
    %   输入q0为逼近角,单位为弧度,矩阵大小1*6;
    %   输出J为速度雅各比矩阵,矩阵大小6*6%   说明:利用向量积的方法求解系统的雅各比矩阵,方法1和方法2任选一种
    %   说明:此求解方法基于SDH参数建模,若MDH方法建模,需进行一定的下标改动
    
    d=[105.03,0,0,75.66,80.09,44.36];
    a=[0,-174.42,-174.42,0,0,0];
    alp=[pi/2,0,0,pi/2,-pi/2,0];
    offset=[0,-pi/2,0,-pi/2,0,0];
    thd=q+offset;
    
    % 求各个关节间的变换矩阵
    T0=trotz(0)*transl(0,0,0)*trotx(0)*transl(0,0,0);
    T1=trotz(thd(1))*transl(0,0,d(1))*trotx(alp(1))*transl(a(1),0,0);
    T2=trotz(thd(2))*transl(0,0,d(2))*trotx(alp(2))*transl(a(2),0,0);
    T3=trotz(thd(3))*transl(0,0,d(3))*trotx(alp(3))*transl(a(3),0,0);
    T4=trotz(thd(4))*transl(0,0,d(4))*trotx(alp(4))*transl(a(4),0,0);
    T5=trotz(thd(5))*transl(0,0,d(5))*trotx(alp(5))*transl(a(5),0,0);
    T6=trotz(thd(6))*transl(0,0,d(6))*trotx(alp(6))*transl(a(6),0,0);
    
    % 求各个关节相对于惯性坐标系的变换矩阵
    T00 = T0;
    T01 = T1;
    T02 = T1*T2;
    T03 = T1*T2*T3;
    T04 = T1*T2*T3*T4;
    T05 = T1*T2*T3*T4*T5;
    T06 = T1*T2*T3*T4*T5*T6;
    
    % 求各个关节相对于末端坐标系的变换矩阵
    T06 = T1*T2*T3*T4*T5*T6;
    T16 = T2*T3*T4*T5*T6;
    T26 = T3*T4*T5*T6;
    T36 = T4*T5*T6;
    T46 = T5*T6;
    T56 = T6;
    
    % 提取各变换矩阵的旋转矩阵
    R00 = t2r(T00);
    R01 = t2r(T01);
    R02 = t2r(T02);
    R03 = t2r(T03);
    R04 = t2r(T04);
    R05 = t2r(T05);
    R06 = t2r(T06);
    
    % 取旋转矩阵第3列,即Z轴方向分量
    Z0 = R00(: , 3);
    Z1 = R01(: , 3);
    Z2 = R02(: , 3);
    Z3 = R03(: , 3);
    Z4 = R04(: , 3);
    Z5 = R05(: , 3);
    Z6 = R06(: , 3);
    
    %% Method.1
    % 求末端关节坐标系相对于前面各个坐标系的位置,即齐次变换矩阵的第四列
    % pi6为坐标系i和末端坐标系的相对位置在坐标系i下的表示
    P06 = T06(1:3, 4);
    P16 = T16(1:3, 4);
    P26 = T26(1:3, 4);
    P36 = T36(1:3, 4);
    P46 = T46(1:3, 4);
    P56 = T56(1:3, 4);
    P66 = [0; 0; 0];
    
    % 使用向量积求出雅可比矩阵
    % R0i为坐标系0到坐标系i的旋转矩阵
    % R0i*Pi6指坐标系i和末端坐标系的相对位置在0坐标系下的表示
    J1 = [cross(Z0, R00*P06); Z0];
    J2 = [cross(Z1, R01*P16); Z1];
    J3 = [cross(Z2, R02*P26); Z2];
    J4 = [cross(Z3, R03*P36); Z3];
    J5 = [cross(Z4, R04*P46); Z4];
    J6 = [cross(Z5, R05*P56); Z5];
    
    %% Method.2
    
    % % pi为坐标系i与世界坐标系0的相对位置
    % p0=transl(T00);
    % p1=transl(T01);
    % p2=transl(T02);
    % p3=transl(T03);
    % p4=transl(T04);
    % p5=transl(T05);
    % p6=transl(T06);
    % 
    % % p6-pi为i坐标系指向末端坐标系的向量
    % % p6-pi即为末端坐标系与i坐标系相对位置在世界坐标系中的表示
    % % Ji=[Jv;Jw]    对应六自由度的速度分量和旋转分量
    % J1 = [cross(Z0, p6-p0); Z0];
    % J2 = [cross(Z1, p6-p1); Z1];
    % J3 = [cross(Z2, p6-p2); Z2];
    % J4 = [cross(Z3, p6-p3); Z3];
    % J5 = [cross(Z4, p6-p4); Z4];
    % J6 = [cross(Z5, p6-p5); Z5];
    
    
    J = [J1, J2, J3, J4, J5, J6];
    
    end
    

    4.控制器:等速率趋近的滑模控制器

    控制器的输入为位姿误差e=xdxe=x_d-x,输出为关节角的增量q˙\dot q,因此控制器满足关系:
    u=q˙=f_SMC(e)u=\dot q=f\_SMC(e)
    为此需求设计滑模控制器f_SMCf\_SMC
    设计滑模面:
    s=cee=xdx s=ce\\ e=x_d-x
    设计趋近率为等速趋近率:
    s˙=ξsgns \dot s=-\xi sgns
    推导得到控制器输出uu
    s˙=ce˙=ξsgnse˙=x˙dx˙=1cξsgnsv=vd+1cξsgnsu=q˙=J1(q)v=J1(vd+1cξsgns) \dot s=c\dot e=-\xi sgns\\ \dot e=\dot x_d-\dot x=-\frac{1}{c}\xi sgns\\ v=v_d+\frac{1}{c}\xi sgns\\ u=\dot q=J^{-1}(q)v=J^{-1}(v_d+\frac{1}{c}\xi sgns)
    matlab代码实现如下:

    dth = [0; 0; 0; 0; 0; 0];
    th = [0; 0; 0; 0; 0; 0];
    
    x=[xyz_start';0;0;0];        %其实时刻的位姿
    
    lamda=1;		%阻尼矩阵的系数
    
    k = 0.1;
    ita = 0.0002;
    c = 5;
    
    e = [0; 0; 0; 0; 0; 0];
    de = [0; 0; 0; 0; 0; 0];
    for i = 1 : length(t)
        xd=[x_s(i);y_s(i);z_s(i);0;0;0];     %期望位姿
        dxd=[v_x(i);v_y(i);v_z(i);0;0;0];	%期望速度
    
        q=th(:, i);
    
        Jac = Jacob_cross_SDH(q');	%求解当前角度下的雅可比矩阵
    
        e(:, i) = xd - x(:,i);      %误差
        s = c*e(:, i);      %滑模面
        v=dxd + (1/c)*ita*sign(s);    %机械臂的末端实际速度
        
        de(:, i) = dxd - v;     %误差的微分
        dth(:, i) = inv(Jac+lamda.*diag(ones(1,6)))*v;      %关节角的增量
        th(:, i + 1) = th(:, i) + dth(:, i)*0.1;    %下一时刻的关节角度
        x(:, i+1) = x(:, i) + v*0.1;    %机械臂末端实际位姿
    end
    

    5.结果展示

    设定轨迹跟踪起始点和终点:
    [0120.02533.96][3045385] \begin{bmatrix}0\\-120.02\\533.96\end{bmatrix} \rightarrow \begin{bmatrix}-30\\-45\\385\end{bmatrix}
    10s10s内的末端轨迹位置在各坐标轴的映射:
    在这里插入图片描述
    10s10s内系统跟踪末端轨迹位置的误差:
    在这里插入图片描述
    10s10s内各个关节角的角度:
    在这里插入图片描述


    源代码下载链接:https://github.com/Fantasty9413/Trajectory-tracking-

    展开全文
  • 针对眼在手上的六自由度机械臂系统,提出一种基于图像的视觉伺服控制.通过图像矩和矢量积法,建立机器人正向、逆向运动学模型,引入雅可比矩阵解决机器人逆运动学解析问题.建立了图像矩特征变化量和笛卡尔空间的关节...
  • 为实现机械臂精确的轨迹规划与实时位置跟踪,针对GALIL DMC控制板卡,设计了工业机械臂实时位置跟踪控制系统和轨迹规划算法,使用REbot-V-6R六自由度机械臂完成了汉字轮廓绘制。首先,编程提取Windows自带的true ...
  • 六自由度机械臂研究(3)- 机械臂DH参数表建立 DH参数简介 DH参数全称是Denavit-Hartenberg参数, 目前是机器人领域广泛应用于机器人结构描述的方法。 我们可以用这些参数来来描述一个机器人机构, 并用这些参数来...

    六自由度机械臂研究(3)- 机械臂DH参数表的建立

    DH参数简介

    DH参数全称是Denavit-Hartenberg参数, 目前是机器人领域广泛应用于机器人结构描述的方法。 我们可以用这些参数来描述一个机器人机构, 并用这些参数来进行运动学算法的推导与解算。 例如,对于一个六关节机械臂, 仅仅需要18个参数就可以完全描述这些固定的运动学参数。

    因此, 机器人的每个连杆的可以用4个运动学参数来描述, 其中两个参数用于描述连杆本身, 另外两个参数用于描述连杆之间的连接关系。简单的说, 就是用这四个参数来描述两个相邻关节杆的相对位置关系。

    关于连杆连接的两种描述: 标准DH建模改进DH建模, 根据我们的建系方法, 我们需要用改进DH建模法来进行建模, 两种建模的区别网上有很多讲解, 博主在此不多做详解, 博主参考博客为标准DH建模与改进DH建模

    DH选的四个参数的物理意义

    DH选的四个参数都有非常明确的物理含义:
    link length (连杆长度):两个关节的轴(旋转关节的旋转轴,平移关节的平移轴)之间的公共法线长度。

    link twist (连杆扭转 ):一个关节的轴相对于另一个关节的轴绕它们的公共法线旋转的角度。

    link offset (连杆偏移):一个关节与下一个关节的公共法线和它与上一个关节的公共法线沿这个关节轴的距离。

    joint angle (关节转角):一个关节与下一个关节的公共法线和它与上一个关节的公共法线绕这个关节轴的转角。

    参数具体计算方法:

    连杆长度 ai-1 : 沿着Xi-1, 从Zi-1Zi的距离。(表示连杆i-1两端关节轴的公垂线长度)

    连杆扭转 αi-1 : 绕着Xi-1, 从Zi-1Zi的角度。

    连杆偏距 di : 沿Zi, 从 Xi-1Xi的距离。

    关节转角 θi: 绕Zi, 从Xi-1Xi的角度。

    根据已经建立好的六自由度机械臂的坐标系。 如下图所示:
    机械臂坐标系
    我们可以根据以上方法来分别求出从坐标系{ 0 } 到 坐标系{5} 的四个DH参数

    根据改装过的六自由度机械臂的坐标系, 并通过上述DH参数计算方法(以当前姿势作为初始状态), 可以得到DH参数表. 如下图所示:

    i ai-1 (cm) αi-1 di (cm) θi
    1 0.00 0 0 0
    2 1.25 pi/2 0 pi/2
    3 10.5 0 0 pi/2
    4 0.00 pi/2 13.0 -pi
    5 0.00 pi/2 0 pi
    6 0.00 pi/2 10.0 -pi

    检查确认无误后, 就可以以DH参数表为基础建立各个关节轴的位姿方位矩阵。 这些矩阵就是运动学算法基础元素。 下一节将会详细介绍。

    展开全文
  • 六自由度机械臂研究(2)- 机械臂坐标系建立, DH参数表建立 1. 机械臂坐标系建立 机械臂的坐标系建立是未来解析推导运动学算法的基础, 也是机械臂入学者的第一个坑。 坑的原因是网上资料无数, 但是几乎没有任何...

    六自由度机械臂研究(2)- 机械臂坐标系建立

    1. 机械臂坐标系建立

    机械臂的坐标系建立是未来解析推导运动学算法的基础, 也是机械臂入学者的第一个坑。 坑的原因是网上资料无数, 但是几乎没有任何一个建系教程是完全一样的。 更有甚者, 有好多博客还是有或多或少的错误,把原理与参数定义搞错者也是大有人在。 博主排坑无数后总结了亲测可行的建系方法, 有兴趣或者有需求的同学可以跟着博主一步一步为自己的机械臂进行的建系与推导。

    下面博主开始为自己的六自由度机械臂建立坐标系, 楼主的机械臂如下图所示:
    改装后的六自由度机械臂

    首先, 博主建议先根据自己的机械臂在演草纸上画一个大概的草图, 这样方便建系以及检查。 下面是博主的草稿, 方便修改检查, 等机械臂坐标系确认无误后再画成果图。 博主草稿如下图所示:
    草稿图
    下面重点来了:

    建立连杆坐标系的步骤

    对于一个新机构, 按以下步骤对于每个轴建立坐标系:

    1. 找出关节轴(就是关节旋转的轴心), 标出轴线的延长线, 仅仅考虑两个相邻的轴线 (i ~ i+1) (i = 0, 1, 2, 3, 4, 5)

    2. 找出关节轴i关节轴i+1之间的公垂线(关节轴空间平行时) 或者关节轴i关节轴i+1之间空间相交点(关节轴空间不平行时)。 以关节轴i关节轴i+1交点或者公垂线与关节轴交点作为连杆坐标系 { i } 的原点。

    3. 规定Zi沿关节轴i的指向(正负方向可自己定义, 推荐指向纸面方向为正方向, 比较清晰明了)

    4. 规定Xi沿公垂线的指向, 如果关节轴i关节轴i + 1相交, 则规定**Xi**轴垂直于关节轴i 和 关节轴i + 1所在的平面。

    5. 按右手定则确定Yi

    6. 当第一个关节变量为0时, 则规定坐标系 {0}, {1}重合。 对于坐标系{ N },其原点Xn的方向可以任意选取。 但是在选取时, 通常尽量使连杆参数0

    博主用上述建系方法为自己改装过的六自由度机械臂建系。 如下图所示:
    六自由度机械臂坐标系
    检查无误后, 就可以开始测量建DH参数表。 注意一定要反复检查坐标系确认无误!!! 一步错步步错, 出错的话以后的工作就没有任何意义了。

    展开全文
  • 六自由度机械臂研究(1)——简介, 自由度与改装 博主曾经以五自由度机械臂为基础做过本科的毕业设计,毕设的大部分精力是视觉操控部分 但是限于时间短, 任务重。 最后仅仅实现了简单的操控, 并没有涉及到精确地...
  • 此程序以亮字为例子,计算了每个笔画起始中间终止点的位置,及六自由度机械臂末端执行器的位姿,基础坐标系x指向正前方,y指向面对x正方向的左侧,末端执行器位姿表示选择欧拉角rxryrz
  • 本人亲自编写六自由度机械臂三维仿真程序,调试通过。用户可以通过更改参数,可控制机械臂在空间中的位置,以及获得机械臂三维空间基本运动的实现。里面有详细的程序注释。
  • 六自由度机械臂的驱动

    千次阅读 2017-03-13 16:56:36
    先做静态控制,所以小车底盘啊,轮子啥的先不要。1 BOM清单1.友善之臂 Nanopi2作为上位机,安装ROS机器人操作系统2.msp430作为下位机,实现对舵机等硬件设备...机械臂六自由度机械臂2 软件平台msp430 LaunchPad 的Ardu
  • 最后,根据六自由度机械臂的构型,基于 MFC 框架类和 Open GL 图形库, 在 VC++6.0 开发平台上专门开发了一套适用于这种构型的三维仿真工具。仿真 工具把运动学和轨迹规划算法融入了其中,有效地验证了机械臂...
  • 华数603桌面级六自由度机械臂。 于是便想使用该款机械臂来学习ros。 于是我便使用了solidworks将这款机械臂按照一比一的比例画了出来,但是长度的数据是完全一致的,便于在gazebo仿真。 下面将图贴上,需要该款资源...
  • 由于课程要做一个控制六自由度机械臂的项目,主要是学习舵机和舵机控制的知识,在这里做一下学习笔记。 使用的舵机为2个DS3115MG数字舵机+4个MG996R模拟舵机。 1.舵机基本构造 2.舵机控制原理  控制...
  • 对提供的机械臂参数建立数学模型,利用OpenGL图形库构造机械臂三维模型;针对构建的机械臂模型进行正逆运动学方程求解,为轨迹规划提供基础。
  • 六自由度机械臂介绍(Xu, Chen et al. 2016)  在机器人上加装机械臂,进行抓取和其他作业目前应用广泛。因此,本系统提供了一套六自由度机械臂,并专门为其配置了一个遥控手柄,利用这个手柄可以单独控制机械臂...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

六自由度机械臂