zoukankan      html  css  js  c++  java
  • UR6机器人正运动学

    UR6机器人关节D-H矩阵:

    末端关节(未包含a6):

            /// <summary>
            /// 关节末端的空间姿态-位置向量[px,py,pz]
            /// </summary>        
            /// <param name="Ang">每个关节的角度值</param>
            /// <returns>[px,py,pz]</returns>
            public  float[] R6P(float[] Ang)
            {
                float C1 = (float)Math.Cos(Ang[0]);
                float S1 = (float)Math.Sin(Ang[0]);
                float S2 = (float)Math.Sin(Ang[1]);
                float C2 = (float)Math.Cos(Ang[1]);
                float S23 = (float)Math.Sin(Ang[1] + Ang[2]);
                float C23 = (float)Math.Cos(Ang[1] + Ang[2]);
                float S234 = (float)Math.Sin(Ang[1] + Ang[2] + Ang[3]);
                float C234 = (float)Math.Cos(Ang[1] + Ang[2] + Ang[3]);
                float C5 = (float)Math.Cos(Ang[4]);
                float S5 = (float)Math.Sin(Ang[4]);
    
                float px = (C1 * C234 * C5 - S1 * S5) * d6 + C1 * S234 * d5 - S1 * d4 + C1 * C23 * a3 + C1 * a2 * S2; ;
                float py = (S1 * C234 * C5 + C1 * S5) * d6 + S1 * S234 * d5 + C1 * d4 + S1 * C23 * a3 + S1 * a2 * S2; ;
                float pz = -S234 * C5 * d6 + C234 * d5 - a3 * S23 + a2 * C2 + d1; ;
                return new float[] { px, py, pz };
            }
            /// <summary>
            /// 关节末端的空间姿态-n向量[nx,ny,nz]
            /// </summary>
            /// <param name="Ang">每个关节的角度值</param>
            /// <returns>[nx,ny,nz]</returns>
            public float[] R6N(float[] Ang)
            {
                float C1 = (float)Math.Cos(Ang[0]);
                float S1 = (float)Math.Sin(Ang[0]);
                float S234 = (float)Math.Sin(Ang[1] + Ang[2] + Ang[3]);
                float C234 = (float)Math.Cos(Ang[1] + Ang[2] + Ang[3]);
                float C5 = (float)Math.Cos(Ang[4]);
                float S5 = (float)Math.Sin(Ang[4]);
                float C6 = (float)Math.Cos(Ang[5]);
                float S6 = (float)Math.Sin(Ang[5]);
                float nx = (C1 * C234 * S5 + S1 * C5) * S6 + C1 * S234 * C6; ;
                float ny = (S1 * C234 * S5 - C1 * C5) * S6 + S1 * S234 * C6; ;
                float nz = (-S234) * S5 * S6 + C234 * C6; ;
               return new float[] { nx, ny, nz };
            }
            /// <summary>
            /// 关节末端的空间姿态-o向量[ox,oy,oz]
            /// </summary>
            /// <param name="Ang">每个关节的角度值</param>
            /// <returns>[ox,oy,oz]</returns>
            public float[] R6O(float[] Ang)
            {
                float C1 = (float)Math.Cos(Ang[0]);
                float S1 = (float)Math.Sin(Ang[0]);
                float S234 = (float)Math.Sin(Ang[1] + Ang[2] + Ang[3]);
                float C234 = (float)Math.Cos(Ang[1] + Ang[2] + Ang[3]);
                float C5 = (float)Math.Cos(Ang[4]);
                float S5 = (float)Math.Sin(Ang[4]);
                float C6 = (float)Math.Cos(Ang[5]);
                float S6 = (float)Math.Sin(Ang[5]);
                float ox = (C1 * C234 * S5 + S1 * C5) * (-C6) + C1 * S234 * S6; ;
                float oy = (S1 * C234 * S5 - C1 * C5) * (-C6) + S1 * S234 * (S6); ;
                float oz = S234 * S5 * C6 + C234 * S6; ;
                return new float[] { ox, oy, oz };
            }
            /// <summary>
            /// 关节末端的空间姿态-a向量[ax,ay,az]
            /// </summary>
            /// <param name="Ang">每个关节的角度值</param>
            /// <returns>[ax,ay,az]</returns>
            public float[] R6A(float[] Ang)
            {
                float C1 = (float)Math.Cos(Ang[0]);
                float S1 = (float)Math.Sin(Ang[0]);
                float S234 = (float)Math.Sin(Ang[1] + Ang[2] + Ang[3]);
                float C234 = (float)Math.Cos(Ang[1] + Ang[2] + Ang[3]);
                float C5 = (float)Math.Cos(Ang[4]);
                float S5 = (float)Math.Sin(Ang[4]);
    
                float ax = C1 * C234 * C5 - S1 * S5; ;
                float ay = S1 * C234 * C5 + C1 * S5; ;
                float az = -S234 * C5; ;
                return new float[] { ax, ay, az };
            }



  • 相关阅读:
    PHP mysqli扩展库 预处理技术
    libevent入门(1)
    你的项目需要升级成64bit程序吗?
    [敏捷个人]个人知识管理
    [转]职业规划中的“我想要”和“我需要”
    《领导力》读书笔记
    http 传输原理及格式
    转载:Fiddler 教程
    Nginx 配置文件详解
    Wireshark
  • 原文地址:https://www.cnblogs.com/xrll/p/13070789.html
Copyright © 2011-2022 走看看