Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Date

Now online

Attendees (not all attendees listed as online)

Discussion items

ItemNotes
Multisphere

E-mail from Frank:

Martijn and I have been looking at the rigid body rotations in MercuryDPM and especially the difference between how it is done for multispheres and other objects (including superquadratics).

This is my current understanding: inertia_ is the initial moment of inertia matrix, rotation of a particle are encoded using a quaternion. For multispheres there is a master-slave relation between particles. The center-of-mass motion and rotation of a multisphere are stored at the master particle.

 

For multispheres the angularAccelerateMaster method is used, while for other particles angularAccelerate is used. Both function should do the same, but for different types of particles.

angularAccelerateMaster seems fine to me (in principle), while angularAccelerate solves

 as 

Here I have used the subscript ‘lab’ to denote the laboratory frame of reference. It is related to the quantities in the frame of the ‘principal axis’ by a rotation, e.g. , where  is the moment of inertial matrix actually used in the code.

I think here a term is missing in the update performed by angularAccelerate! The (correct) equation of motion is

 

This is actually done in angularAccelerateMaster, but in the frame of the ‘principal axes’

 

I have a few remarks:

  1. The update of the angular velocity by angularAccelerate seems to be missing a term. I am not sure how important the missing term is in practice.
  2. angularAccelerateMaster uses principal directions. This seems to contain exactly the same information as the quaternion. I have the impression this is superfluous.
  3. I think, when using a fixed reference frame for the moment of inertia matrix, it is best to actually choose the coordinate system formed by the principal axis of the moment of inertia. In that reference frame the moment of inertia is diagonal: .
  4. My proposal for a streamlined unified implementation would be to use  and a quaternion,  (with ) for the rotation of the principle axes (initially directed in x, y and z directions) to the current orientation. The dynamics now becomes



Here  is in the principal axes frame of reference. For the quaternion we have, applying the quaternion algebra,   and  where vectors are treated as quaternions with zero scalar part. Note that the angular velocity in the principal axes frame of reference was used. Therefore the multiplication with the angular momentum vector is on the right ().

  1. In the implementation I do not get the invInertia2_ variable. Is this really needed?

With kind regards,

Frank

TriangleWalls

How to have only one contact with connected triangles.

Thomas looking at it.

Coupling Branch

Three build systems. How to merge together.