本实施例中导出,并通过使用MATLAB®和符号数学工具箱™适用逆运动学到一个双连杆机器人臂。<克ydF4y2Ba/p>
的例子定义的关节参数和端部执行器的位置象征性地,计算和可视化的正向和反向运动解决方案,并发现该系统的雅可比行列式,这是用于模拟机器人臂的运动是有用的。万博 尤文图斯<克ydF4y2Ba/p>
定义的链路长度,关节角度和机器人作为符号变量的端部执行器的位置。<克ydF4y2Ba/p>
符号<克ydF4y2Baspan style="color:#A020F0">吕1<克ydF4y2Ba/span>吕2<克ydF4y2Ba/span>theta_1<克ydF4y2Ba/span>theta_2<克ydF4y2Ba/span>XE公司<克ydF4y2Ba/span>耶<克ydF4y2Ba/span>
用于机器人的链路长度指定值。<克ydF4y2Ba/p>
L1 = 1;L2 = 0.5;<克ydF4y2Ba/pre>
限定端部执行器的X和Y坐标作为关节角度的函数<克ydF4y2Baspan class="inlineequation"> .<克ydF4y2Ba/p>
XE_RHS = L_1 * COS(theta_1)+ L_2 * COS(+ theta_1 theta_2)<克ydF4y2Ba/pre>
XE_RHS =<克ydF4y2Baspan class="inlineequation">
YE_RHS=L_1*sin(θ1)+L_2*sin(θ1+θ2)<克ydF4y2Ba/pre>
叶斯=<克ydF4y2Baspan class="inlineequation">
将符号表达式转换为MATLAB函数。<克ydF4y2Ba/p>
XE_MLF=matlabFunction(XE_RHS,<克ydF4y2Baspan style="color:#A020F0">“变量”<克ydF4y2Ba/span>,[L_1 L_2θu 1θu 2];YE_MLF=matlabFunction(YE_RHS,<克ydF4y2Baspan style="color:#A020F0">“变量”<克ydF4y2Ba/span>,[升1升2θ1θ2];<克ydF4y2Ba/pre>
正向运动学变换的关节角度成端部执行器的位置:<克ydF4y2Baspan class="inlineequation"> . 给定特定关节角度值,使用正向运动学计算末端效应器位置。<克ydF4y2Ba/p>
指定的关节角度作为输入值<克ydF4y2Baspan class="inlineequation"> 和<克ydF4y2Baspan class="inlineequation"> .<克ydF4y2Ba/p>
t1_degs_row = linspace(0,90,100);t2_degs_row = linspace(-180,180,100);[tt1_degs,tt2_degs] = meshgrid(t1_degs_row,t2_degs_row);<克ydF4y2Ba/pre>
将角度单位从度转换为弧度。<克ydF4y2Ba/p>
tt1_rads=deg2rad(tt1_degs);tt2_rads=deg2rad(tt2_degs);<克ydF4y2Ba/pre>
使用MATLAB函数计算X和Y坐标<克ydF4y2Bacode class="literal">西姆尔夫<克ydF4y2Ba/code>和<克ydF4y2Bacode class="literal">叶尔夫<克ydF4y2Ba/code>,分别是。<克ydF4y2Ba/p>
X_-mat=XE_-MLF(L1,L2,tt1_-rads,tt2_-rads);Y_-mat=YE_-MLF(L1,L2,tt1_-rads,tt2_-rads);<克ydF4y2Ba/pre>
使用可视化辅助功能的X和Y坐标<克ydF4y2Bacode class="literal">plot_XY_given_theta_2dof<克ydF4y2Ba/code>.<克ydF4y2Ba/p>
plot_XY_given_theta_2dof(tt1_degs,tt2_degs,X_mat,Y_mat,(L1 + L2))<克ydF4y2Ba/pre>
反向运动学将末端效应器位置转换为关节角度:<克ydF4y2Baspan class="inlineequation"> .查找正向运动学方程的反向运动。<克ydF4y2Ba/p>
定义正向运动学方程。<克ydF4y2Ba/p>
XE_EQ=XE==XE_RHS;YE_EQ=YE==YE_RHS;<克ydF4y2Ba/pre>
求解<克ydF4y2Baspan class="inlineequation"> 和<克ydF4y2Baspan class="inlineequation"> .<克ydF4y2Ba/p>
S=求解([XE_EQ YE_EQ],[theta_1 theta_2])<克ydF4y2Ba/pre>
S =<克ydF4y2Baspan class="emphasis">同场的结构:<克ydF4y2Ba/em>θ1:[2x1 sym]θ2:[2x1 sym]<克ydF4y2Ba/pre>
结构<克ydF4y2Bacode class="literal">S公司<克ydF4y2Ba/code>表示的多个解决方案万博 尤文图斯<克ydF4y2Baspan class="inlineequation"> 和<克ydF4y2Baspan class="inlineequation"> . 显示的两个解决方案万博 尤文图斯<克ydF4y2Baspan class="inlineequation"> .<克ydF4y2Ba/p>
简化(S.theta_1)<克ydF4y2Ba/pre>
答复=<丁iv class="code_responsive">
显示的两个解决方案万博 尤文图斯<克ydF4y2Baspan class="inlineequation"> .<克ydF4y2Ba/p>
简化(S.theta_2)<克ydF4y2Ba/pre>
答复=<丁iv class="code_responsive">
将解决方案转换为以后可以万博 尤文图斯使用的MATLAB函数。功能<克ydF4y2Bacode class="literal">泰铢<克ydF4y2Ba/code>和<克ydF4y2Bacode class="literal">泰铢<克ydF4y2Ba/code>表示逆运动学。<克ydF4y2Ba/p>
TH1_MLF{1}=矩阵函数(S.theta_1(1),<克ydF4y2Baspan style="color:#A020F0">“变量”<克ydF4y2Ba/span>,[L_1 L_2 XE YE]);TH1_MLF {2} = matlabFunction(S.theta_1(2),<克ydF4y2Baspan style="color:#A020F0">“变量”<克ydF4y2Ba/span>,[L_1 L_2 XE YE]);TH2_MLF {1} = matlabFunction(S.theta_2(1),<克ydF4y2Baspan style="color:#A020F0">“变量”<克ydF4y2Ba/span>,[L_1 L_2 XE YE]);TH2_MLF {2} = matlabFunction(S.theta_2(2),<克ydF4y2Baspan style="color:#A020F0">“变量”<克ydF4y2Ba/span>,[L_1 L_2 XE YE]);<克ydF4y2Ba/pre>
使用反向运动学计算<克ydF4y2Baspan class="inlineequation"> 和<克ydF4y2Baspan class="inlineequation"> 从X和Y坐标。<克ydF4y2Ba/p>
定义X和Y坐标的网格点。<克ydF4y2Ba/p>
[xmat,ymat]=网格(0:0.01:1.5,0:0.01:1.5);<克ydF4y2Ba/pre>
计算角度<克ydF4y2Baspan class="inlineequation"> 和<克ydF4y2Baspan class="inlineequation"> 使用MATLAB函数<克ydF4y2Bacode class="literal">总热值{1}<克ydF4y2Ba/code>和<克ydF4y2Bacode class="literal">TH2_MLF{1}<克ydF4y2Ba/code>,分别是。<克ydF4y2Ba/p>
tmp_th1_mat=th1_MLF{1}(L1,L2,xmat,ymat);tmp_th2_mat=th2_MLF{1}(L1,L2,xmat,ymat);<克ydF4y2Ba/pre>
将角度单位从弧度转换为度。<克ydF4y2Ba/p>
tmp_th1_mat=rad2deg(tmp_th1_mat);tmp_th2_mat=rad2deg(tmp_th2_mat);<克ydF4y2Ba/pre>
一些输入坐标,例如(X,Y)=(1.5,1.5),超出末端效应器的可到达工作空间。逆运动学解可以产生一些需要校正的虚θ值。修正虚θ值。万博 尤文图斯<克ydF4y2Ba/p>
th1_mat=NaN(尺寸(tmp_th1_mat));th2_mat=NaN(尺寸(tmp_th2_mat));tf_mat=imag(tmp_th1_mat)==0;th1_mat(tf_mat)=real(tmp_th1_mat(tf_mat));tf_mat=imag(tmp_th2_mat)==0;th2_mat(tf_mat)=real(tmp_th2_mat(tf);<克ydF4y2Ba/pre>
将角度可视化<克ydF4y2Baspan class="inlineequation"> 和<克ydF4y2Baspan class="inlineequation"> 使用helper函数<克ydF4y2Bacode class="literal">绘制给定的<克ydF4y2Ba/code>.<克ydF4y2Ba/p>
绘制给定的XY 2dof(xmat,ymat,th1,th2)<克ydF4y2Ba/pre>
该系统的雅可比是这样定义的:<克ydF4y2Ba/p>
the_J =雅可比([XE_RHS YE_RHS],[theta_1 theta_2])<克ydF4y2Ba/pre>
úJ=<丁iv class="code_responsive">
您可以围绕涉及关节速度与末端执行器的速度,以及其他方式,通过使用该系统的雅可比:<克ydF4y2Ba/p>
也可以将雅可比的符号表达式转换为MATLAB函数块。通过将多个航路点定义为Simulink模型的输入,模拟机器人在轨迹上的末端执行器位置。Simulink模型可以根据关节角度值计算到达轨迹中每个航路点的运动剖面。有关详细信息,请参见万博1manbetx<克ydF4y2Baa href="//www.tianjin-qmedu.com/matlabcentral/fileexchange/69892-inverse-kinematics-of-a-2-link-robot-arm" target="_blank">2连杆机械臂的逆运动学<克ydF4y2Ba/a>和<克ydF4y2Baa href="//www.tianjin-qmedu.com/videos/teaching-rigid-body-dynamics-a-combination-of-symbolic-and-numeric-computing-1506004876316.html" target="_blank">教学刚体动力学<克ydF4y2Ba/a>.<克ydF4y2Ba/p>
功能<克ydF4y2Ba/span>绘制给定的θX,Y,θ1,<克ydF4y2Baspan style="color:#0000FF">...<克ydF4y2Ba/span>theta_2_mat_degs)xlab_str =<克ydF4y2Baspan style="color:#A020F0">'X(米)'<克ydF4y2Ba/span>;伊拉布街=<克ydF4y2Baspan style="color:#A020F0">'Y(M)'<克ydF4y2Ba/span>;图;hax(1)=子块(1,2,1);轮廓线(X_mat,Y_mat,theta_1_mat_degs);caxis(hax(1),[-180 180]);颜色图(gca,<克ydF4y2Baspan style="color:#A020F0">“喷气式飞机”<克ydF4y2Ba/span>);颜色条xlabel(xlab_str,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);伊拉贝尔(伊拉布街,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);标题(hax(1),<克ydF4y2Baspan style="color:#A020F0">'\ theta_1'<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>)轴线(<克ydF4y2Baspan style="color:#A020F0">'等于'<克ydF4y2Ba/span>)hax(2)=子块(1,2,2);轮廓线(X_mat,Y_mat,theta_2_mat_degs);caxis(hax(2),[-180 180]);颜色图(gca,<克ydF4y2Baspan style="color:#A020F0">“喷气式飞机”<克ydF4y2Ba/span>);颜色条xlabel(xlab_str,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);伊拉贝尔(伊拉布街,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);标题(hax(2),<克ydF4y2Baspan style="color:#A020F0">'\ theta_2'<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>)轴线(<克ydF4y2Baspan style="color:#A020F0">'等于'<克ydF4y2Ba/span>)<克ydF4y2Baspan style="color:#0000FF">结束<克ydF4y2Ba/span>功能<克ydF4y2Ba/span>给定θ2dof(θ1,θ2,<克ydF4y2Baspan style="color:#0000FF">...<克ydF4y2Ba/span>X_mat,Y_mat,a_cmax)xlab_str =<克ydF4y2Baspan style="color:#A020F0">'\ theta_1(度的视角)'<克ydF4y2Ba/span>;伊拉布街=<克ydF4y2Baspan style="color:#A020F0">'\theta_2(德格)'<克ydF4y2Ba/span>;数字;HAX(1)=副区(1,2,1);contourf(theta_1_mat_degs,theta_2_mat_degs,X_mat);CAXIS(HAX(1),[0 a_cmax]);颜色表(GCA,<克ydF4y2Baspan style="color:#A020F0">“喷气式飞机”<克ydF4y2Ba/span>);颜色条xlabel(xlab_str,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);伊拉贝尔(伊拉布街,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);标题(hax(1),<克ydF4y2Baspan style="color:#A020F0">'X嫒E'<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>)hax(2)=子块(1,2,2);轮廓线(theta_1_mat_degs,theta_2_mat_degs,Y_mat);caxis(hax(1),[0 a_cmax]);颜色图(gca,<克ydF4y2Baspan style="color:#A020F0">“喷气式飞机”<克ydF4y2Ba/span>);颜色条xlabel(xlab_str,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);伊拉贝尔(伊拉布街,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>);标题(hax(2),<克ydF4y2Baspan style="color:#A020F0">“你”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">“解释”<克ydF4y2Ba/span>,<克ydF4y2Baspan style="color:#A020F0">'TEX'<克ydF4y2Ba/span>)<克ydF4y2Baspan style="color:#0000FF">结束<克ydF4y2Ba/span>