• 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 };
            }



  • 相关阅读:
    黄聪:WordPress wp_head()优化:去除不必要的元素标签(转)
    黄聪:IE6下用控制图片最大显示尺寸
    黄聪:wordpress wp_head()函数 浏览器顶部 空白28px 解决办法(转)
    黄聪:在Photoshop中创建多种样式的网格背景图案(转)
    黄聪:如何WP中获取文章分类名称、分类ID、归档分类链接
    黄聪:Wordpress如何不显示(只显示)置顶文章
    黄聪:淘宝用户在宝贝详情页想看到什么
    黄聪:Windows7立体声混音设置方法(stereo mix)(转)
    黄聪:wordpress博客用Slimbox2实现lightbox效果(免插件)(转)
    黄聪:tor 解决 连接中继目录failed 没有可用的链路
  • 原文地址:https://www.cnblogs.com/xrll/p/13070789.html
Copyright © 2020-2023  润新知