Rigid body with mass and inertia tensor.
All parameter vectors have to be resolved in frame_a.
The inertia tensor has to be defined with respect to a
coordinate system that is parallel to frame_a with the
origin at the center of mass of the body.
By default, this component is visualized by a cylinder located
between frame_a and the center of mass and by a sphere that has
its center at the center of mass. If the cylinder length is smaller as
the radius of the sphere, e.g., since frame_a is located at the
center of mass, the cylinder is not displayed. Note, that
the animation may be switched off via parameter animation = false.
States of Body Components
Every body has potential states. If possible a tool will select
the states of joints and not the states of bodies because this is
usually the most efficient choice. In this case the position, orientation,
velocity and angular velocity of frame_a of the body will be computed
by the component that is connected to frame_a. However, if a body is moving
freely in space, variables of the body have to be used as states. The potential
states of the body are:
- The position vector frame_a.r_0 from the origin of the
world frame to the origin of frame_a of the body, resolved in
the world frame and the absolute velocity v_0 of the origin of
frame_a, resolved in the world frame (= der(frame_a.r_0)).
- If parameter useQuaternions in the "Advanced" menu
is true (this is the default), then 4 quaternions
are potential states. Additionally, the coordinates of the
absolute angular velocity vector of the
body are 3 potential states.
If useQuaternions in the "Advanced" menu
is false, then 3 angles and the derivatives of
these angles are potential states. The orientation of frame_a
is computed by rotating the world frame along the axes defined
in parameter vector "sequence_angleStates" (default = {1,2,3}, i.e.,
the Cardan angle sequence) around the angles used as potential states.
For example, the default is to rotate the x-axis of the world frame
around angles[1], the new y-axis around angles[2] and the new z-axis
around angles[3], arriving at frame_a.
The quaternions have the slight disadvantage that there is a
non-linear constraint equation between the 4 quaternions.
Therefore, at least one non-linear equation has to be solved
during simulation. A tool might, however, analytically solve this
simple constraint equation. Using the 3 angles as states has the
disadvantage that there is a singular configuration in which a
division by zero will occur. If it is possible to determine in advance
for an application class that this singular configuration is outside
of the operating region, the 3 angles might be used as potential
states by setting useQuaternions = false.
In text books about 3-dimensional mechanics often 3 angles and the
angular velocity are used as states. This is not the case here, since
3 angles and their derivatives are used as potential states
(if useQuaternions = false). The reason
is that for real-time simulation the discretization formula of the
integrator might be "inlined" and solved together with the body equations.
By appropriate symbolic transformation the performance is
drastically increased if angles and their
derivatives are used as states, instead of angles and the angular
velocity.
Whether or not variables of the body are used as states is usually
automatically selected by the Modelica translator. If parameter
enforceStates is set to true in the "Advanced" menu,
then body variables are forced to be used as states according
to the setting of parameters "useQuaternions" and
"sequence_angleStates".