CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

LieGroups/SO3/Quat/left_jacobian_exact.mo

Download original .moGitHub source

Documentation: LieGroups.SO3.Quat.left_jacobian_exact

within LieGroups.SO3.Quat;
function left_jacobian_exact
  "Left Jacobian J_l(v) of SO(3), closed form down to the exp_map branch radius"
  input Real v[3] "Rotation vector";
  output Real J[3, 3] "I + ((1-cos t)/t^2)[v]x + ((t-sin t)/t^3)[v]x^2, t = |v|";
algorithm
  J := LieGroups.SO3.Quat.right_jacobian_exact(-v);
  annotation(Documentation(info="<html>
    <p>The same matrix as <code>left_jacobian</code>, evaluated with the branch
    radius and the coefficient forms of
    <code>right_jacobian_exact</code>. Both coefficients depend on the rotation
    vector only through t^2, so J_l(v) = J_r(-v) is exact rather than an
    approximation, and reflecting is the whole implementation.</p>
    <p>No rule returns a left-trivialized derivative, so no rule calls this
    today; <code>Tests.RuleChecks.so3JacobianFamilyResiduals</code> does, against
    the transpose of <code>right_jacobian_exact</code>. It exists because the
    reflection is the definition of the left Jacobian and a left-trivialized
    rule added later must not reach for <code>left_jacobian</code>, whose
    0.1 rad radius would put the same |v|^5/720 series truncation back into a
    derivative.</p>
  </html>"));
end left_jacobian_exact;