CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

function

LieGroups.SO3.Mrp.to_DCM

Convert MRP to rotation matrix

Public declarations

Explicit source declarations; dimensions, modifications and defaults are shown as written, without evaluation.

RoleNameTypeDimensions / attributes / defaultDescription
inputrReal[3]MRP parameters
outputRReal[3,3]Rotation matrix

Modelica declarations and implementation

Show parameters, interfaces and source

Parameters, inputs, outputs, defaults and equations from the source file.

function to_DCM "Convert MRP to rotation matrix"
  input Real r[3] "MRP parameters";
  output Real R[3,3] "Rotation matrix";
protected
  Real n_sq;
  Real den_sq;
  Real S[3,3] "Skew [r]x";
  Real S2[3,3] "[r]x^2";
algorithm
  n_sq := r[1]^2 + r[2]^2 + r[3]^2;
  den_sq := (1.0 + n_sq) * (1.0 + n_sq);

  S := {{0, -r[3], r[2]},
        {r[3], 0, -r[1]},
        {-r[2], r[1], 0}};

  S2 := {{-(r[2]^2 + r[3]^2), r[1]*r[2], r[1]*r[3]},
         {r[1]*r[2], -(r[1]^2 + r[3]^2), r[2]*r[3]},
         {r[1]*r[3], r[2]*r[3], -(r[1]^2 + r[2]^2)}};

  // Consistent with q = {(1-r^2)/(1+r^2), 2*r/(1+r^2)}.
  // R = I + (8*S^2 + 4*(1-n_sq)*S) / (1+n_sq)^2
  for i in 1:3 loop
    for j in 1:3 loop
      R[i,j] := (if i == j then 1.0 else 0.0)
                + (8.0*S2[i,j] + 4.0*(1.0 - n_sq)*S[i,j]) / den_sq;
    end for;
  end for;
end to_DCM;