WOLFRAM SYSTEMMODELER
FreeMotionFree motion joint (6 degreesoffreedom, 12 potential states) 
SystemModel["Modelica.Mechanics.MultiBody.Joints.FreeMotion"]
This information is part of the Modelica Standard Library maintained by the Modelica Association.
Joint which does not constrain the motion between frame_a and frame_b. Such a joint is only meaningful if the relative distance and orientation between frame_a and frame_b, and their derivatives, shall be used as states.
Note, that bodies such as Parts.Body, Parts.BodyShape, have potential states describing the distance and orientation, and their derivatives, between the world frame and a body fixed frame. Therefore, if these potential state variables are suited, a FreeMotion joint is not needed.
The states of the FreeMotion object are:
The quaternions have the slight disadvantage that there is a nonlinear constraint equation between the 4 quaternions. Therefore, at least one nonlinear 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 states by setting useQuaternions = false.
In text books about 3dimensional 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 states (if useQuaternions = false). The reason is that for realtime simulation the discretization formula of the integrator might be "inlined" and solved together with the model 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.
If parameter enforceStates is set to true (= the default) in the "Advanced" menu, then FreeMotion variables are forced to be used as states according to the setting of parameters "useQuaternions" and "sequence_angleStates".
In the following figure the animation of a FreeMotion joint is shown. The light blue coordinate system is frame_a and the dark blue coordinate system is frame_b of the joint. (here: r_rel_a_start = {0.5, 0, 0.5}, angles_start = {45, 45, 45}^{o}).
animation 
Value: true Type: Boolean Description: = true, if animation shall be enabled (show arrow from frame_a to frame_b) 

angles_fixed 
Value: false Type: Boolean Description: = true, if angles_start are used as initial values, else as guess values 
angles_start 
Value: {0, 0, 0} Type: Angle[3] (rad) Description: Initial values of angles to rotate frame_a around 'sequence_start' axes into frame_b 
sequence_start 
Value: {1, 2, 3} Type: RotationSequence Description: Sequence of rotations to rotate frame_a into frame_b at initial time 
w_rel_a_fixed 
Value: false Type: Boolean Description: = true, if w_rel_a_start are used as initial values, else as guess values 
w_rel_a_start 
Value: {0, 0, 0} Type: AngularVelocity[3] (rad/s) Description: Initial values of angular velocity of frame_b with respect to frame_a, resolved in frame_a 
z_rel_a_fixed 
Value: false Type: Boolean Description: = true, if z_rel_a_start are used as initial values, else as guess values 
z_rel_a_start 
Value: {0, 0, 0} Type: AngularAcceleration[3] (rad/s²) Description: Initial values of angular acceleration z_rel_a = der(w_rel_a) 
arrowDiameter 
Value: world.defaultArrowDiameter Type: Length (m) Description: Diameter of arrow from frame_a to frame_b 
enforceStates 
Value: true Type: Boolean Description: = true, if relative variables between frame_a and frame_b shall be used as states 
useQuaternions 
Value: true Type: Boolean Description: = true, if quaternions shall be used as states otherwise use 3 angles as states 
sequence_angleStates 
Value: {1, 2, 3} Type: RotationSequence Description: Sequence of rotations to rotate frame_a into frame_b around the 3 angles used as states 
R_rel_start 
Value: Modelica.Mechanics.MultiBody.Frames.axesRotations(sequence_start, angles_start, zeros(3)) Type: Orientation Description: Orientation object from frame_a to frame_b at initial time 
Q_start 
Value: Frames.to_Q(R_rel_start) Type: Orientation Description: Quaternion orientation object from frame_a to frame_b at initial time 
phi_start 
Value: if sequence_start[1] == sequence_angleStates[1] and sequence_start[2] == sequence_angleStates[2] and sequence_start[3] == sequence_angleStates[3] then angles_start else Frames.axesRotationsAngles(R_rel_start, sequence_angleStates) Type: Angle[3] (rad) Description: Potential angle states at initial time 
world 
Type: World Description: 


R_rel_start 
Type: Orientation Description: Orientation object from frame_a to frame_b at initial time 

arrow 
Type: Arrow Description: 

R_rel 
Type: Orientation Description: Dummy or relative orientation object to rotate from frame_a to frame_b 

R_rel_inv 
Type: Orientation Description: Dummy or relative orientation object to rotate from frame_b to frame_a 
Rigidly connected point masses in a point gravity field 