The current implementation of aligator::dynamics::LinearODETpl strictly requires that the number of columns of matrix A matches the manifold tangent dimension space->ndx(), as enforced in the constructor:
if (A.cols() != space->ndx()) {
ALIGATOR_DOMAIN_ERROR(
"A.cols() should be equal to space.ndx()! (got {:d} and {:d})",
A.cols(), space->ndx());
}
However, this becomes problematic during execution because the forward() method performs:
data.xdot_ = A_ * x + B_ * u + c_;
Here, x is passed directly as a state vector, and its dimension is typically nx, which may differ from space->ndx() especially when the state lives on a manifold (e.g., quaternions or SE(3)).
This mismatch between the expected input dimension of A_ and the actual size of x leads to dimension errors and makes LinearODETpl incompatible with many practical robotic systems.
The current implementation of
aligator::dynamics::LinearODETplstrictly requires that the number of columns of matrixAmatches the manifold tangent dimensionspace->ndx(), as enforced in the constructor:However, this becomes problematic during execution because the
forward()method performs:Here,
xis passed directly as a state vector, and its dimension is typicallynx, which may differ fromspace->ndx()especially when the state lives on a manifold (e.g., quaternions or SE(3)).This mismatch between the expected input dimension of
A_and the actual size ofxleads to dimension errors and makesLinearODETplincompatible with many practical robotic systems.