CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

function

LieGroups.SE23.Quat.product_left_factor_jacobian

Right-trivialized derivative of product with respect to its left factor

Rule for product, left slot, in the right trivialization on both sides:

log_map(product(X1,X2)^-1 * product(X1*exp_map(dX), X2)) = Ad(X2^-1) dX

The identity is exact rather than first order: the perturbation is conjugated by X2 and nothing else happens to it. This is the rule that gives adjoint its operational meaning, and the reason a right-invariant error transported across a group product costs one adjoint and no series.

Public declarations

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

RoleNameTypeDimensions / attributes / defaultDescription
inputX1Real[10]Left element {p1, v1, q1}
inputX2Real[10]Right element {p2, v2, q2}
outputJReal[9, 9]d/d(dX) of log_map(product(X1,X2)^-1 * product(X1*exp_map(dX), X2))

Modelica declarations and implementation

Show parameters, interfaces and source

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

function product_left_factor_jacobian
  "Right-trivialized derivative of product with respect to its left factor"
  input Real X1[10] "Left element {p1, v1, q1}";
  input Real X2[10] "Right element {p2, v2, q2}";
  output Real J[9, 9]
    "d/d(dX) of log_map(product(X1,X2)^-1 * product(X1*exp_map(dX), X2))";
algorithm
  J := LieGroups.SE23.Quat.adjoint(LieGroups.SE23.Quat.inverse(X2));
  annotation(Documentation(info="<html>
    <p>Rule for <code>product</code>, left slot, in the right trivialization on
    both sides:</p>
    <pre>log_map(product(X1,X2)^-1 * product(X1*exp_map(dX), X2)) = Ad(X2^-1) dX</pre>
    <p>The identity is exact rather than first order: the perturbation is
    conjugated by X2 and nothing else happens to it. This is the rule that gives
    <code>adjoint</code> its operational meaning, and the reason a right-invariant
    error transported across a group product costs one adjoint and no series.</p>
  </html>"));
end product_left_factor_jacobian;