当前位置:   article > 正文

机器人工具箱基本使用(三)_matlab robotics tools 查看各个关节坐标

matlab robotics tools 查看各个关节坐标

机器人轨迹规划

  • 关节空间轨迹

[q,qd,qdd] = jtraij(q0,qf,m)

该函数表示关节坐标从初始关节角度q0(1xN)到终止关节角度qf(1xN)变化。默认利用五次多项式与默认零边界条件计算轨迹。假定时间以M步从0到1变化。关节速度和加速度可以分别以qd(MxN)qdd(MxN)返回。轨迹q,qd和qdd是MxN矩阵,每个时间步长一行,每个关节一列。

  • 笛卡尔空间轨迹

Tc=ctraj(T0,T1,n)

该函数表示从姿态T0到T1的笛卡尔轨迹(4x4xN),沿路径具有梯形速度分布的N个点。Tc是齐次变换序列,最后一个下标是点索引,即T(:,:,i)是第i个点路径。如果T0或T1为[],则视其为单位矩阵。

知道了上述轨迹规划函数之后,我们可以通过工具箱自带的PUMA560机器人模型进行试验。在matlab中输入 mdl_pima560 ,我们将获得机器人模型以及几个模型的初始状态参数。

mdl_puma560    %打开模型
qz             %零角度状态
qr             %就绪状态,机械臂伸直且垂直
qs             %伸展状态,机械臂伸直且水平
qn             %标准状态,机械臂灵巧工作状态
p560.plot(qn)  %画出标准状态的图形
  • 1
  • 2
  • 3
  • 4
  • 5

接下来我将利用上述机器人模型来进行轨迹运动规划的仿真。

mdl_puma560%调出puma560 
t=[0:0.05:2];    %两秒完成轨迹,步长0.05
%产生位姿矩阵法1:直接给出关节角度
T1 = p560.fkine([0 0 0 0 0 0]);%生成一个位姿
T2 = p560.fkine([pi/2 pi/3 pi/6 0 0 0]);%生成一个位姿
q=p560.jtraj(T1,T2,t);%输入SE3 or 4*4变换矩阵,生成轨迹
%生成模型运动轨迹图
filename = 'demo.gif';
for i = 1:length(t)
    pause(0.01)
    p560.plot(q(i,:));
    f = getframe(gcf);  
    imind = frame2im(f);
    [imind,cm] = rgb2ind(imind,256);
    if i == 1
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',0.1);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1);
    end
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 关节空间和笛卡尔空间的轨迹规划

关节空间规划是根据首位位姿,求出关节角度然后再进行规划,而笛卡尔空间规划是直接根据位姿进行规划。为了方便对比,接下来我将给出首位位姿矩阵,然后分别运用上述两种不同的方法进行规划,最后都转换为关节空间进行比较。

mdl_puma560%调出puma560 
t=[0:0.05:2];%两秒完成轨迹,步长0.05
  • 1
  • 2

T1 = [0 0 1 0.5963
0 1 0 -0.1501
-1 0 0 -0.01435
0 0 0 1 ];
T2 = [0 0 1 0.8636
0 1 0 -0.1501
-1 0 0 -0.0203
0 0 0 1];
%关节空间轨迹规划
q1 = p560.ikine6s(T1);%根据末端位姿,求各关节
q2 = p560.ikine6s(T2);
qq=jtraj(q1,q2,t);%根据各关节,生成轨迹
Tqq=p560.fkine(qq);

%笛卡尔运动
%笛卡尔空间中直线运动,生成从SE3空间两点间直线的一系列中间位置,结果表达为4*4齐次换矩阵
Ts=ctraj(T1,T2,length(t));
qs=p560.ikine6s(Ts);

figure(1)%绘制各关节角度
for i=1:6
subplot(2,3,i)
plot(t, qq(:,i))
hold on;
plot(t, qs(:,i))
legend(‘关节空间’,‘笛卡尔空间’)
hold off;
end

figure(2) %绘制空间运动轨
pq=transl(Tqq);%提取旋转矩阵中的位移部分
ps=transl(Ts);
%依次是 ‘关节空间’,‘笛卡尔空间’
subplot(2,1,1)
plot3(pq(:,1),pq(:,2),pq(:,3))
subplot(2,1,2)
plot3(ps(:,1),ps(:,2),ps(:,3))

各关节的运动规划图
两种方法的运动轨迹图

观察可得:尽管机器臂最后的始末位置相同,但是在不同的轨迹规划下,机器臂的关节运动和末端执行器的运动轨迹确相差甚远。不同的方法各有自己的优缺点,在实际运用中,我们应该根据自己的实际需求来选择。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/884758
推荐阅读
相关标签
  

闽ICP备14008679号