CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

LieGroups/SO3/Mrp/log_map.mo

Download original .moGitHub source

Documentation: LieGroups.SO3.Mrp.log_map

within LieGroups.SO3.Mrp;
function log_map "Logarithmic map: MRP -> so(3) rotation vector"
  input Real r[3] "MRP parameters";
  output Real v[3] "Rotation vector";
protected
  Real n_sq, n;
  Real A "4*atan(||r||) / ||r||";
  constant Real eps = 1e-10;
algorithm
  n_sq := r[1]^2 + r[2]^2 + r[3]^2;

  if n_sq < eps then
    // Taylor: 4*atan(n)/n ~ 4 - 4*n^2/3
    A := 4.0 - 4.0*n_sq/3.0;
  else
    n := sqrt(n_sq);
    A := 4.0 * atan(n) / n;
  end if;

  v := A * r;
end log_map;