Twist is the derivative of the displacement. The other two are not derivatives or either displacement or a rotation(quaternion). In the naming convention I am used to, a wrench in 3D is a generalized force consisting of a 3D force and a 3D torque.
I don't know if you're familiar with the Kinematics and Dynamics Library, a.k.a. KDL [1], that implements many of these concepts, and as its name implies, many kinematics/dynamics algorithms that you might find useful. KDL is used by quite a few groups in the robotics community, and is to my knowledge the most mature open source alternative out there (in its domain). Not so long ago its internals were migrated from boost::numeric::ublas to Eigen, which should make all of us happy ;). One observation is that in KDL, Eigen data structures are not exposed in the public API as much as the above proposal suggests, but then again it's OK to have a pretty much Eigen-agnostic interface, the main thing being able to properly expose data structures/concepts (not in the C++0x sense) and algorithms rather than internal design choices.
If you are indeed familiar with KDL, and you found out that it does not adapt well to your needs, I'd be very interested in knowing what shortcomings you found for your application domain, and how would you address them otherwise.
Finally, I apologize if the topic of this thread drifted a bit from an Eigen-specific subject. Anyway, it's been an interesting thread :D.
Cheers,
Adolfo
[1]
http://orocos.org/kdl/
Ok,
up to the identification force == acceleration. Not saying that they
shouldn't exist as separate classes, just trying to understand. I
can't decide for you whether to have them as separate classes. About
what you write above:
> NB: This class is optional, and is only needed for strong typing.
here I would say: if it's only needed for strong typing, then refrain
from introducing such a class. We rejected a Point class (same as
Vector, just for strong typing) for that exact reason. However in your
case there may be stronger reasons to introduce these classes:
- they represent physical quantities of distinct dimensions/units
- you might have distinct code in each of them, i didn't check.
Cheers,
Benoit
>> I was confused that you called these functions log() and exp()
>
> yes, it's a little bit tricky because there's two different exponential
> function, and both have a mathematical definition.
>
> 1/ the exponential of quaternion generalize the exponential of complex
> number to quaternion. This exponential is actually useless for rigid body
> motion.
>
> 2/ the exponential of an element of the Lie algebra so(3) (Angular Velocity)
> return an element of the Lie group SO(3) which are in fact the rotation
> matrices.
> This exponential function is defined by the sum of 1/k! A^k with k in [0;
> infinity[ where A is in SO(3). This exponential links a rotation and the
> angular velocity.
>
> The main problem is that we choose to represent a rotation with a
> quaternion. It's very usefull, but have some drawbacks. For example, adding
> two quaternions have no meanings when these quaternion represents rotation.
> That's why I introduce a Rotation3D to reflects this distinction.
> I don't know if it's better to have a class Quaternion to represents the
> classical quaternion and another class to represents 3D rotation with a link
> (inheritance, ownership) to this Quaternion class.
>
> --
> Mathieu
>
>
>