6-DOF Robot Kinematics Implementation

This document details the implementation of a 6-Degree-of-Freedom (6-DOF) robotic arm kinematics solver, including both forward kinematics (FK) and inverse kinematics (IK) calculations.

1. Core Mathematical Functions

Basic Trigonometry

inline float cosf(float x)
{
    return arm_cos_f32(x);
}
 
inline float sinf(float x)
{
    return arm_sin_f32(x);
}

These optimized trigonometric functions use ARM’s hardware acceleration for improved performance.

Matrix Operations

static void MatMultiply(const float* _matrix1, const float* _matrix2, float* _matrixOut,
                        const int _m, const int _l, const int _n)
{
    float tmp;
    int i, j, k;
    for (i = 0; i < _m; i++)
    {
        for (j = 0; j < _n; j++)
        {
            tmp = 0.0f;
            for (k = 0; k < _l; k++)
            {
                tmp += _matrix1[_l * i + k] * _matrix2[_n * k + j];
            }
            _matrixOut[_n * i + j] = tmp;
        }
    }
}

Implements matrix multiplication for:

  • Rotation matrix calculations
  • Position transformations
  • Kinematic chain computations

2. Rotation Conversions

Rotation Matrix to Euler Angles

static void RotMatToEulerAngle(const float* _rotationM, float* _eulerAngles)

Converts rotation matrices to Euler angles, handling:

  • Regular cases
  • Singularity cases (gimbal lock)
  • Special angle conditions

Euler Angles to Rotation Matrix

static void EulerAngleToRotMat(const float* _eulerAngles, float* _rotationM)

Converts Euler angles to rotation matrix using:

  • Trigonometric calculations
  • Sequential rotations
  • Standard rotation matrix composition

3. Robot Configuration

Initialization

DOF6Kinematic::DOF6Kinematic(float L_BS, float D_BS, float L_AM, float L_FA, float D_EW, float L_WT)

Configures the robot with:

  • Base height (L_BS)
  • Base offset (D_BS)
  • Arm length (L_AM)
  • Forearm length (L_FA)
  • Elbow-wrist offset (D_EW)
  • Wrist length (L_WT)

DH Parameters

float tmp_DH_matrix[6][4] = {
    {0.0f,            armConfig.L_BASE,    armConfig.D_BASE, -(float) M_PI_2},
    {-(float) M_PI_2, 0.0f,                armConfig.L_ARM,  0.0f},
    // ...
};

Defines Denavit-Hartenberg parameters for:

  • Joint offsets
  • Link lengths
  • Twist angles
  • Joint angles

4. Forward Kinematics (FK)

bool DOF6Kinematic::SolveFK(const DOF6Kinematic::Joint6D_t &_inputJoint6D, 
                           DOF6Kinematic::Pose6D_t &_outputPose6D)

The FK solver:

  1. Takes joint angles as input
  2. Computes transformation matrices
  3. Calculates end-effector position and orientation
  4. Returns results in Cartesian coordinates Process:
  5. Joint angle preprocessing
  6. Rotation matrix calculation
  7. Position vector computation
  8. Final pose composition

5. Inverse Kinematics (IK)

bool DOF6Kinematic::SolveIK(const DOF6Kinematic::Pose6D_t &_inputPose6D,
                           const Joint6D_t &_lastJoint6D,
                           DOF6Kinematic::IKSolves_t &_outputSolves)

The IK solver handles:

  1. Multiple solution cases
  2. Singularity conditions
  3. Joint limit constraints
  4. Solution validation

Solution Strategy

  1. Wrist position calculation
  2. Shoulder angle computation
  3. Elbow angle computation
  4. Wrist angle determination

Special Cases

if (sqrt(P0_w[0] * P0_w[0] + P0_w[1] * P0_w[1]) <= 0.000001)
{
    // Handle singularity case
}

Handles:

  • Singularities
  • Unreachable positions
  • Multiple solutions
  • Joint limits

6. Utility Functions

Joint Difference Calculation

DOF6Kinematic::Joint6D_t operator-(const DOF6Kinematic::Joint6D_t &_joints1,
                                  const DOF6Kinematic::Joint6D_t &_joints2)

Enables:

  • Joint space calculations
  • Path planning
  • Movement optimization

Key Features

  1. Performance Optimization

    • Hardware-accelerated trigonometry
    • Efficient matrix operations
    • Minimal memory allocation
  2. Robustness

    • Singularity handling
    • Multiple solution management
    • Numerical stability
  3. Accuracy

    • Precise angle calculations
    • Proper handling of angle wrapping
    • Consideration of joint limits
  4. Flexibility

    • Configurable robot dimensions
    • Support for different joint configurations
    • Adaptable to various robot geometries

Mathematical Foundation

  1. Forward Kinematics

    • DH parameter transformation
    • Sequential joint transformations
    • End-effector pose calculation
  2. Inverse Kinematics

    • Geometric approach
    • Analytical solution
    • Multiple solution handling
  3. Rotation Representations

    • Euler angles
    • Rotation matrices
    • Angle conversions