Example #1
0
    private Matrix <float> ForwardKin2(float[] q)
    {
        Matrix <float> T1 = MathOperations.CalcMatrixDH(q[0], 400, 25, Mathf.PI / 2);
        Matrix <float> T2 = MathOperations.CalcMatrixDH(q[1] + Mathf.PI / 2, 0, 560, 0);
        Matrix <float> T3 = MathOperations.CalcMatrixDH(q[2], 0, 35, Mathf.PI / 2);
        Matrix <float> T4 = MathOperations.CalcMatrixDH(q[3], 515, 0, -Mathf.PI / 2);
        Matrix <float> T5 = MathOperations.CalcMatrixDH(q[4], 0, 0, Mathf.PI / 2);
        Matrix <float> T6 = MathOperations.CalcMatrixDH(q[5], 80, 0, 0);

        Matrix <float> H = T1 * T2 * T3 * T4 * T5 * T6;

        return(H);
    }
Example #2
0
    private Matrix <float> AGILUSjacobian(float[] q)
    {
        Matrix <float> A1 = MathOperations.CalcMatrixDH(q[0], 400, 25, Mathf.PI / 2);
        Matrix <float> A2 = MathOperations.CalcMatrixDH(q[1] + Mathf.PI / 2, 0, 560, 0);
        Matrix <float> A3 = MathOperations.CalcMatrixDH(q[2], 0, 35, Mathf.PI / 2);
        Matrix <float> A4 = MathOperations.CalcMatrixDH(q[3], 515, 0, -Mathf.PI / 2);
        Matrix <float> A5 = MathOperations.CalcMatrixDH(q[4], 0, 0, Mathf.PI / 2);
        Matrix <float> A6 = MathOperations.CalcMatrixDH(q[5], 80, 0, 0);

        Matrix <float> T1 = A1;
        Matrix <float> T2 = A1.Multiply(A2);
        Matrix <float> T3 = A1.Multiply(A2.Multiply(A3));
        Matrix <float> T4 = A1.Multiply(A2.Multiply(A3.Multiply(A4)));
        Matrix <float> T5 = A1.Multiply(A2.Multiply(A3.Multiply(A4.Multiply(A5))));
        Matrix <float> T6 = A1.Multiply(A2.Multiply(A3.Multiply(A4.Multiply(A5.Multiply(A6)))));

        Vector3 z0 = new Vector3(0, 0, 1);
        Vector3 z1 = new Vector3(T1[0, 2], T1[1, 2], T1[2, 2]);
        Vector3 z2 = new Vector3(T2[0, 2], T2[1, 2], T2[2, 2]);
        Vector3 z3 = new Vector3(T3[0, 2], T3[1, 2], T3[2, 2]);
        Vector3 z4 = new Vector3(T4[0, 2], T4[1, 2], T4[2, 2]);
        Vector3 z5 = new Vector3(T5[0, 2], T5[1, 2], T5[2, 2]);
        Vector3 z6 = new Vector3(T6[0, 2], T6[1, 2], T6[2, 2]);

        Vector3 p0 = new Vector3(0, 0, 0);
        Vector3 p1 = new Vector3(T1[0, 3], T1[1, 3], T1[2, 3]);
        Vector3 p2 = new Vector3(T2[0, 3], T2[1, 3], T2[2, 3]);
        Vector3 p3 = new Vector3(T3[0, 3], T3[1, 3], T3[2, 3]);
        Vector3 p4 = new Vector3(T4[0, 3], T4[1, 3], T4[2, 3]);
        Vector3 p5 = new Vector3(T5[0, 3], T5[1, 3], T5[2, 3]);
        Vector3 p6 = new Vector3(T6[0, 3], T6[1, 3], T6[2, 3]);

        Matrix <float> J = Matrix <float> .Build.DenseOfArray(new float[, ] {
            { Vector3.Cross(z0, p6 - p0).x, Vector3.Cross(z1, p6 - p1).x, Vector3.Cross(z2, p6 - p2).x, Vector3.Cross(z3, p6 - p3).x, Vector3.Cross(z4, p6 - p4).x, Vector3.Cross(z5, p6 - p5).x },
            { Vector3.Cross(z0, p6 - p0).y, Vector3.Cross(z1, p6 - p1).y, Vector3.Cross(z2, p6 - p2).y, Vector3.Cross(z3, p6 - p3).y, Vector3.Cross(z4, p6 - p4).y, Vector3.Cross(z5, p6 - p5).y },
            { Vector3.Cross(z0, p6 - p0).z, Vector3.Cross(z1, p6 - p1).z, Vector3.Cross(z2, p6 - p2).z, Vector3.Cross(z3, p6 - p3).z, Vector3.Cross(z4, p6 - p4).z, Vector3.Cross(z5, p6 - p5).z },
            { z0.x, z1.x, z2.x, z3.x, z4.x, z5.x },
            { z0.y, z1.y, z2.y, z3.y, z4.y, z5.y },
            { z0.z, z1.z, z2.z, z3.z, z4.z, z5.z }
        });

        return(J);
    }