精华内容
下载资源
问答
  • 刚开始学工业机器人的时候,大家都先学到了其中的一些矩阵变换,但是计算过程还是不太熟悉,如果想要有较深的体验,可以从本文中获取一些经验,具体实例以我上一个博客中的两个三棱柱为主。 1.确定初始位姿 以我上一...

    如何用Matlab实现机器人的变换矩阵

    前言

    其中有些思路参考了这篇博客,有兴趣的同学可以看一下博客参考(关于位姿变换矩阵)
    刚开始学工业机器人的时候,大家都先学到了其中的一些矩阵变换,但是计算过程还是不太熟悉,如果想要有较深的体验,可以从本文中获取一些经验,具体实例以我上一个博客中的两个三棱柱为主。

    1.确定初始位姿

    以我上一篇博客为例,那么初始位姿已经确定了代码如下

    V1=[
        -1,0,2;
        -1,4,0;
        -1,0,0;
         1,0,2;
         1,4,0;
         1,0,0];
    

    这里每一行是每一个顶点的x,y,z坐标值

    2.矩阵方程

    那么如果我要对这样一个点集做转换,就需要位移变换矩阵以及角度变换矩阵,所以这里做两个function,具体代码如下

    function fx=Trans(a,b,c)
    fx=[1,0,0,a;
       0,1,0,b;
       0,0,1,c;
       0,0,0,1;];
    end
    
    function fx=Rot(a,b)
    switch a
        case 'X轴'
            fx=[1,0,0,0;
               0,cos(b),-sin(b),0;
               0,sin(b),cos(b),0;
               0,0,0,1];
        case 'Y轴'
            fx=[cos(b),0,sin(b),0;
               0,1,0,0;
               0,-sin(b),0,cos(b);
               0,0,0,1];
        case 'Z轴'
            fx=[cos(b),-sin(b),0,0;
               sin(b),cos(b),0,0;
               0,0,1,0;
               0,0,0,1];             %具体内容属于机器人学内容,这里不做赘述
    end
    

    于是后续可以直接调用该方程

    3.最终变换过程

    初始位姿如下图所示
    在这里插入图片描述
    而需求的最终的位姿如下图
    在这里插入图片描述
    所以具体实现代码如下

    clc
    clear
    syms pi;              %这里定义pi是为了使cos(pi)=0
    
    
    V1=[-1,-1,-1,1,1,1;
        0,0,4,4,0,0;
        2,0,0,0,0,2;
        1,1,1,1,1,1;];
                          %这里是设置了各个顶点的坐标,这里是每一个列值都是一个点的x,y,z坐标,而1是齐次坐标,这里不做赘述。
    
    V2=Rot('Z轴',pi/2)*Rot('X轴',pi/2)*V1;
                          %这里是将初始矩阵,绕x轴逆时针旋转90°,再绕z轴逆时针旋转90°的操作
    V3=V2([1 2 3 ],[1 2 3 4 5 6]);
                          %因为后续要进行画图操作,所以将齐次坐标去除了
    V4=double(V2);        %这里是为了将具体内容显示在工作区中
    V5=double(V3);
    V6=V5.';              %这里是将变换后的矩阵进行转置操作
    F1=[
         1,2,3,1;
         1,2,5,6;
         1,3,4,6;
         3,2,5,4;
         4,6,5,4];
      patch('Faces',F1,'Vertices',V6,'FaceColor','none',...
          'LineWidth',1,'EdgeColor','red');
      grid minor;
      axis([-2 2 -3 3 0 5]);
      xlabel('x轴'); ylabel('y轴');zlabel('z轴');
    set(gca,'XDir','reverse')
    set(gca,'YDir','reverse')
    

    4.附录

    上接上一个博客的内容,设计了两个直三棱柱,并将这两个直三棱柱转换为一个立方体的过程。
    最终参考代码如下:

    clc
    clear
    syms pi;
    
    
    V1=[-1,-1,-1,1,1,1;
        0,0,4,4,0,0;
        2,0,0,0,0,2;
        1,1,1,1,1,1;];
    
    V2=Rot('Z轴',pi/2)*Rot('X轴',pi/2)*V1;
    V3=V2([1 2 3 ],[1 2 3 4 5 6]);
    V4=double(V2);
    V5=double(V3);
    V6=V5.';
    F1=[
         1,2,3,1;
         1,2,5,6;
         1,3,4,6;
         3,2,5,4;
         4,6,5,4];
      patch('Faces',F1,'Vertices',V6,'FaceColor','none',...
          'LineWidth',1,'EdgeColor','red');
      grid minor;
      axis([-2 2 -3 3 0 5]);
      xlabel('x轴'); ylabel('y轴');zlabel('z轴');
    set(gca,'XDir','reverse')
    set(gca,'YDir','reverse')
    
    clc
    clear
    syms pi;
    
    
    V1=[-1,-1,-1,1,1,1;
        0,0,4,4,0,0;
        2,0,0,0,0,2;
        1,1,1,1,1,1;];
    
    V2=Rot('Z轴',pi/2)*Rot('X轴',pi/2)*V1;
    V3=V2([1 2 3 ],[1 2 3 4 5 6]);
    V4=double(V2);
    V5=double(V3);
    V6=V5.';
    V7=[-1,-1,-1,1,1,1;
        5,5,9,9,5,5;
        2,0,0,0,0,2;
        1,1,1,1,1,1;];
    V8=Trans(0,0,4)*Trans(2,0,0)*Rot('Z轴',pi/2)*Rot('X轴',-pi/2)*Trans(0,-5,0)*V7;
    V9=V8([1 2 3],[1,2,3,4,5,6]);
    V10=double(V8);
    V11=double(V9);
    V12=V11.';
     F1=[
         1,2,3,1;
         1,2,5,6;
         1,3,4,6;
         3,2,5,4;
         4,6,5,4];
     F2=[
         1,2,3,1;
         1,2,5,6;
         1,3,4,6;
         3,2,5,4;
         4,6,5,4];
     patch('Faces',F1,'Vertices',V6,'FaceColor','none',...
          'LineWidth',1,'EdgeColor','red');
     patch('Faces',F2,'Vertices',V12,'FaceColor','none',...
          'LineWidth',1,'EdgeColor','red');
      grid minor;
      axis([-2 2 -3 3 0 5]);
      xlabel('x轴'); ylabel('y轴');zlabel('z轴');
    set(gca,'XDir','reverse')
    set(gca,'YDir','reverse')
    

    初始位姿如图
    在这里插入图片描述
    最终位姿如图
    在这里插入图片描述
    我的上一个博客参考

    展开全文
  • 搞了一段时间了,对变换矩阵还是有点晕乎乎的,今天理解了一下变换矩阵,写篇博客记录一下。 1.相对性 表示将2坐标系中的坐标位置转换到1坐标系中,而该矩阵的参数使用的是从1中观察到的2相对与1的变换。如在2坐标...

    搞了一段时间了,对变换矩阵还是有点晕乎乎的,今天理解了一下变换矩阵,写篇博客记录一下。

    1.相对性

    ^1A_2表示将2坐标系中的坐标位置转换到1坐标系中,而该矩阵的参数使用的是从1中观察到的2相对与1的变换。如在2坐标系中有个点R(1, 1, 1),2坐标系为1坐标系绕X轴正方向旋转90°得到,则将1中的坐标转换到2中的变换矩阵为

    ^1A_2=\begin{bmatrix} 1 &0 &0 \\ 0& 0 & -1\\ 0& 1 &0 \end{bmatrix}

    该点在1中的坐标则为

    ^1R=^1A_2*^2R

    若要倒推回去,则乘上变换矩阵的逆即可。

    2.顺序

    变换矩阵不能交换顺序。

    如2坐标系为1坐标系先沿着X轴正方向平移1,再绕Z轴正方向旋转90°,则变换矩阵为

    ^1A_2=^1T_2*^1R_2=\begin{bmatrix} 1 & 0& 0 &1 \\ 0& 1& 0& 0\\ 0& 0& 1& 0\\ 0& 0 & 0& 0 \end{bmatrix}\cdot\begin{bmatrix} 0& -1& 0 & 0\\ 1& 0& 0& 0\\ 0& 0& 1& 0\\ 0& 0 & 0& 1 \end{bmatrix}=\begin{bmatrix} 0& -1& 0 & 1\\ 1& 0& 0&0 \\ 0& 0& 1&0 \\ 0& 0 & 0&1 \end{bmatrix}

    而如果交换了变换顺序,则为先旋转再平移,变换矩阵也发生了变化,不等效。

    展开全文
  • [img=https://img-bbs.csdn.net/upload/201810/10/1539162605_21610.png][/img] [img=... 虽然我的参数和例子的不一样,但是 ...第2个矩阵和第3个矩阵怎么看啊,怎么理解的啊,师傅们?
  • 在工业机器人坐标变换中,旋转矩阵与欧拉角有几个概念比较容易混淆,根据自己的理解整理如下,如有问题,欢迎指正 因为欧拉角相对旋转矩阵更为直观,直接用绕坐标轴的旋转可以得到,因此将旋转矩阵转换为欧拉角会...

    在工业机器人坐标变换中,旋转矩阵与欧拉角有几个概念比较容易混淆,根据自己的理解整理如下,如有问题,欢迎指正

    因为欧拉角相对旋转矩阵更为直观,直接用绕坐标轴的旋转可以得到,因此将旋转矩阵转换为欧拉角会方便分析

    在位姿变换相关资料中(可参照 J. J. Craig 《Introduction to Robotics》),位姿矩阵的描述如下

    上面这样的位姿描述,指的是主动旋转矩阵,即向量或子坐标系绕坐标轴主动旋转的旋转矩阵,也是机器人坐标变换通常会采取的旋转方式,写成 matlab 函数如下(a输入‘X’,'Y','Z',B输入旋转角度)

    function y = Rot3( a ,B )
    b = deg2rad(B);
    switch a
        case 'X'
            y=[1,0,0;0,cos(b),-sin(b);0,sin(b),cos(b)];
        case 'Y'
            y=[cos(b),0,sin(b);0,1,0;-sin(b),0,cos(b)];
        case 'Z'
            y=[cos(b),-sin(b),0;sin(b),cos(b),0;0,0,1];
    end

    与此区分的是被动旋转矩阵,向量或子坐标系不变,基坐标系旋转的旋转矩阵,这类被动旋转矩阵与上面的三个矩阵互为转置(互为逆矩阵,对于旋转矩阵是等价的),也可以理解为被动旋转矩阵让向量或子坐标系旋转到基坐标系位置,而 matlab 中的 dcm2angle,angle2dcm 均对应的是被动旋转:

    Mat_t = [cos(pi/3),-sin(pi/3),0;sin(pi/3),cos(pi/3),0;0,0,1];
    [ra,rb,rc]=dcm2angle(Mat_t,'ZYX'); 
    %此处 ra 为 -60 度,可见 Matlab 中采用的是被动旋转,sin的符号和主动旋转矩阵相反

    因此,在采用matlab 中 dcm2angle 计算欧拉角时,需要注意对旋转矩阵进行转置(R3'),以‘ZYX’欧拉角为例:

    R3 = Rot3('Z',20)*Rot3('Y',60)*Rot3('X',40)
    [ra,rb,rc]=dcm2angle(R3','ZYX'); 
    M3 = Rot3r('Z',ra)*Rot3r('Y',rb)*Rot3r('X',rc)
    d=[ra,rb,rc]./pi.*180

    这样,计算结果  d = 20.0000   60.0000   40.0000  ,与常用主动旋转矩阵一致,R3与M3也一致,如果R3‘转置去掉,改为

    [ra,rb,rc]=dcm2angle(R3,'ZYX'); 

    则结果为从R3转换到基坐标的欧拉角,对应M3为R3的逆矩阵

    需要注意的是,主动/被动旋转不等同于基坐标系、连体坐标系的变换,在主动旋转矩阵下,仍然要区分按照固定基坐标系坐标轴,还是按照旋转后的连体坐标新坐标轴旋转,按照右乘连体左乘基的方式进行计算

     

    展开全文
  • 对于齐次位姿变换(RT矩阵),有的时候手动计算公式参数太多比较麻烦,因此利用matlab参量syms,可以方便一些,可以用于计算机器人正运动学位姿矩阵的参数表示,简单的小程序,写机器人学作业的时候可能有点儿用,...

    对于齐次位姿变换(RT矩阵),有的时候手动计算公式参数太多比较麻烦,因此利用matlab参量syms,可以方便一些,可以用于计算机器人正运动学位姿矩阵的参数表示,简单的小程序,写机器人学作业的时候可能有点儿用,Matlab代码整理如下

    clear
    syms theta1 ; syms d1; syms a1 ;
    syms pi;
    
    RTMatrix=Rotr('Z',-pi/2)*Rotr('Z',theta1)*Trans(0,d1,0)*Trans(0,0,0)*Rotr('X',-pi/2)

    用到的旋转函数Rotr,输入旋转轴和角度(弧度)

    function y = Rotr( a ,b )
    
    
    switch a
        case 'X'
            y=[1,0,0,0;0,cos(b),-sin(b),0;0,sin(b),cos(b),0;0,0,0,1];
        case 'Y'
            y=[cos(b),0,sin(b),0;0,1,0,0;-sin(b),0,cos(b),0;0,0,0,1];
        case 'Z'
            y=[cos(b),-sin(b),0,0;sin(b),cos(b),0,0;0,0,1,0;0,0,0,1];
    end

    平移函数Trans,输入xyz方向的平移量

    function y = Trans( a,b,c )
    
    y=[1,0,0,a;0,1,0,b;0,0,1,c;0,0,0,1];
    end

     

    展开全文
  • 机器人坐标变换

    2020-03-24 16:09:12
    机器人坐标系 (B)\mathrm{(B)}(B) 中其坐标为 PB\mathrm{P^B}PB,在世界坐标系 (A)\mathrm{(A)}(A) 中其坐标为 PA\mathrm{P^A}PA,PA\mathrm{P^A}PA 和 PB\mathrm{P^B}PB 之间可以通过变换矩阵 TBA\mathrm{T^A_B}...
  • 本来以为这次重新看了矩阵变换,对矩阵变换已经有了比较深刻的认识,直到合上书,在没有参考书上代码的情况下, 尝试自己实现这个简单的机器人手臂的变换,才知道还是有许多不足. 总结几个在理解model矩阵变化时, 需要...
  • matlab 机器人工具箱9.10 学习笔记 包括矩阵变换和运动学的部分函数使用方法
  • 旋转矩阵:(1)基本R = rotx(pi/2)R = roty(pi/2)R = rotz(pi/2)分别对X Y Z轴生成3*3的旋转矩阵R = rotx(30, 'deg')R = roty(30, 'deg')R = rotz(30, 'deg')可以改变输入的方式 (2)姿态的叙述...
  • 旋转矩阵乘积顺序 问题 旋转矩阵的乘积顺序分两种情况 固定坐标系例子 非固定坐标系例子 问题 给定一个初始旋转矩阵 R1R_{1}R1​,绕向量 r 旋转 θ\thetaθ度,即旋转矩阵 R2R_{2}R2​,最终得到旋转矩阵 R3R_{3}R3...
  • 工业机器人的运动模型建立,关于坐标变换系的关系以及变换矩阵的推导。
  • 2.利用变换矩阵T求法 04T = [ 04R 04P;0 0 0 1] 04v = 04P’ 注意这里P对角度求导,结果要带上Θ 44v = 40R*04v 根据 44v 求解 4J 例子 连杆传递的求法: 变换矩阵的求法 其中tt1代表Θ1 结果相符 附代码 syms ...
  • 机器人学:齐次变换矩阵

    千次阅读 2020-04-11 16:08:28
    齐次变换矩阵 坐标系{B}原点相对于坐标系{A}原点的偏移可以用矢量APBORG表示,同时{B}相对于{A}的旋转可以用ABR描述。已知BP,可得到: 由上式变换可得: 因此由BP到AP的变换可描述为: ABT就被称为齐次变化矩阵...
  • 一 齐次变换矩阵及其运算 由于各种原因,变换矩阵应该写成方型形式,33或者44即可。 为保证所表示的矩阵为方阵,如果在同一矩阵中既表示姿态又表示位置,那么在矩阵中加入比例因子使之成为4*4的矩阵即可。 变换可以...
  • 机器人的数学基础齐次变换矩阵及其运算 机器人的数学基础齐次变换矩阵及其运算
  • 1) 在矩阵运算的时候如何把向量移动和旋转矩阵的运算整合到一个式子里面去? 我们建立一个齐次矩阵包含移动与转动, 我们来验证一下齐次矩阵的正确性 2)我们对向量和矩阵的操作进行探究 总结 ...
  • 明天就要考机器人学了,复习了一段时间也很无聊,便想不同为何转换矩阵中固定角与欧拉角的左乘右乘之原因(只怪听课不认真,多有忝列),果然用自己一套笨拙又通俗易懂的说辞说服了自己。这里分享出来,看看就好。 ...
  • 这年复习考研,对矩阵有了更深入的理解,但对线性变换与基变换是有点混淆,偶然看了去年写的关于机器人运动学的文章,豁然开朗,遂写这篇文章分享一下所得,也是对上一片文章的拓展,所以读这篇文章前建议先看看前...
  • 对于矩阵右乘,是基于旋转坐标系进行的变换,以某一点为中心进行的变换都是右乘矩阵,这是因为其实这个过程中,矢量没有变,发生改变的是坐标。 那么改变矢量与坐标又有什么区别呢? 改变矢量进行的是行变换;改变...
  • 在Jungle的上一篇博客里简单介绍了机器人位姿描述与坐标变换的基本知识(矩阵)其中关键点之一是变换算子的左乘和右乘: 变换算子左乘:表示该变换是相对固定坐标系变换 变换算子右乘:表示该变换是相对动的坐标系...
  • sympy 符号计算库在机器人旋转矩阵方面的应用(代码) 机器人旋转变换 一、变换矩阵 若计算变换矩阵是基于旋转坐标系(上一个坐标系)来计算的,则计算过程用右乘;若计算变换矩阵是基于固定坐标系(初始坐标系)来...
  • 机器人学之运动学笔记【2】—— 变换矩阵1.Transformation Matrix 的解释2.Transformation Matrix 的运算2.1 连续运算2.2 反矩阵 1.Transformation Matrix 的解释 前面已经学习描述一个刚体的位姿,在刚体的质心上...
  • 4. 机器人正运动学---理解变换矩阵

    千次阅读 多人点赞 2019-11-24 15:03:44
    这篇文章主要介绍了旋转矩阵的三个性质以及我们应该如何理解它。运用旋转矩阵的性质可以帮助我们理解一些姿态变换的算法。

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 345
精华内容 138
关键字:

机器人矩阵变换