FreeMotion
Free motion joint (6 degrees-of-freedom, 12 potential states)
Library
Modelica/Mechanics/MultiBody/Joints
Description
Joint which does not constrain the motion between frame_a and frame_b.Such a joint is only meaningful if the relative distance and orientationbetween frame_a and frame_b, and their derivatives, shall be usedas states.
Note, that bodies such as Parts.Body, Parts.BodyShape,have potential states describing the distanceand orientation, and their derivatives, between the world frame anda 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 relative position vector r_rel_a from the origin of frame_a to the origin of frame_b, resolved in frame_a and the relative velocity v_rel_a of the origin of frame_b with respect to the origin of frame_a, resolved in frame_a (= der(r_rel_a)).
- If parameter useQuaternions in the "Advanced" menu is true (this is the default), then 4 quaternions are states. Additionally, the coordinates of the relative angular velocity vector 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_b is computed by rotating frame_a along the axes defined in parameter vector "sequence_angleStates" (default = {1,2,3}, i.e., the Cardan angle sequence) around the angles used as states. For example, the default is to rotate the x-axis of frame_a around angles[1], the new y-axis around angles[2] and the new z-axis around angles[3], arriving at frame_b.
The quaternions have the slight disadvantage that there is anon-linear constraint equation between the 4 quaternions.Therefore, at least one non-linear equation has to be solvedduring simulation. A tool might, however, analytically solve thissimple constraint equation. Using the 3 angles as states has thedisadvantage that there is a singular configuration in which adivision by zero will occur. If it is possible to determine in advancefor an application class that this singular configuration is outsideof the operating region, the 3 angles might be used asstates by setting useQuaternions = false.
In text books about 3-dimensional mechanics often 3 angles and theangular velocity are used as states. This is not the case here, since3 angles and their derivatives are used as states(if useQuaternions = false). The reasonis that for real-time simulation the discretization formula of theintegrator might be "inlined" and solved together with the model equations.By appropriate symbolic transformation the performance isdrastically increased if angles and theirderivatives are used as states, instead of angles and the angularvelocity.
If parameterenforceStates is set to true (= the default)in the "Advanced" menu,then FreeMotion variables are forced to be used as states accordingto the setting of parameters "useQuaternions" and"sequence_angleStates".
In the following figure the animation of a FreeMotionjoint is shown. The light blue coordinate system isframe_a and the dark blue coordinate system isframe_b of the joint.(here: r_rel_a_start = {0.5, 0, 0.5}, angles_start = {45, 45, 45}o).
Parameters
Name | Label | Description | Data Type | Valid Values |
---|---|---|---|---|
mo_animation | animation | = true, if animation shall be enabled (show arrow from frame_a to frame_b) | Scalar | true |
mo_R_rel_start | R_rel_start | Orientation object from frame_a to frame_b at initial time | FromModelica('Modelica.Mechanics.MultiBody.Frames.Orientation') | |
mo_Q_start | Q_start | Quaternion orientation object from frame_a to frame_b at initial time | Vector of size 4 | |
mo_phi_start | phi_start | Potential angle states at initial time | Vector of size 3 | |
mo_r_rel_a | r_rel_a | r_rel_a | Structure | |
mo_r_rel_a/fixed | fixed | Cell of vectors of size 3 | true | |
mo_r_rel_a/start | start | Cell of vectors of size 3 | ||
mo_v_rel_a | v_rel_a | v_rel_a | Structure | |
mo_v_rel_a/fixed | fixed | Cell of vectors of size 3 | true | |
mo_v_rel_a/start | start | Cell of vectors of size 3 | ||
mo_a_rel_a | a_rel_a | a_rel_a | Structure | |
mo_a_rel_a/fixed | fixed | Cell of vectors of size 3 | true | |
mo_a_rel_a/start | start | Cell of vectors of size 3 | ||
mo_angles_fixed | angles_fixed | = true, if angles_start are used as initial values, else as guess values | Scalar | true |
mo_angles_start | angles_start | Initial values of angles to rotate frame_a around 'sequence_start' axes into frame_b | Vector of size 3 | |
mo_sequence_start | sequence_start | Sequence of rotations to rotate frame_a into frame_b at initial time | Vector of size 3 | |
mo_w_rel_a_fixed | w_rel_a_fixed | = true, if w_rel_a_start are used as initial values, else as guess values | Scalar | true |
mo_w_rel_a_start | w_rel_a_start | Initial values of angular velocity of frame_b with respect to frame_a, resolved in frame_a | Vector of size 3 | |
mo_z_rel_a_fixed | z_rel_a_fixed | = true, if z_rel_a_start are used as initial values, else as guess values | Scalar | true |
mo_z_rel_a_start | z_rel_a_start | Initial values of angular acceleration z_rel_a = der(w_rel_a) | Vector of size 3 | |
mo_Q | Q | Q | Structure | |
mo_Q/fixed | fixed | Cell of vectors of size 4 | true | |
mo_Q/start | start | Cell of vectors of size 4 | ||
mo_phi | phi | phi | Structure | |
mo_phi/fixed | fixed | Cell of vectors of size 3 | true | |
mo_phi/start | start | Cell of vectors of size 3 | ||
mo_w_rel_b | w_rel_b | w_rel_b | Structure | |
mo_w_rel_b/fixed | fixed | Cell of vectors of size 3 | true | |
mo_w_rel_b/start | start | Cell of vectors of size 3 |
Name | Label | Description | Data Type | Valid Values |
---|---|---|---|---|
mo_arrowDiameter | arrowDiameter | Diameter of arrow from frame_a to frame_b | Scalar | |
mo_arrowColor | arrowColor | Color of arrow | Vector of size 3 | |
mo_specularCoefficient | specularCoefficient | Reflection of ambient light (= 0: light is completely absorbed) | Scalar |
Name | Label | Description | Data Type | Valid Values |
---|---|---|---|---|
mo_enforceStates | enforceStates | = true, if relative variables between frame_a and frame_b shall be used as states | Scalar | true |
mo_useQuaternions | useQuaternions | = true, if quaternions shall be used as states otherwise use 3 angles as states | Scalar | true |
mo_sequence_angleStates | sequence_angleStates | Sequence of rotations to rotate frame_a into frame_b around the 3 angles used as states | Vector of size 3 |
Name | Label | Description | Data Type | Valid Values |
---|---|---|---|---|
mo__nmodifiers | Number of Modifiers | Specifies the number of modifiers | Number | |
mo__modifiers | Modifiers | Add new modifier | Structure | |
mo__modifiers/varname | Variable name | Cell of strings | 'phi_d' | |
mo__modifiers/attribute | Attribute | Cell of strings | 'start' | |
mo__modifiers/value | Value |
Ports
Name | Type | Description | IO Type | Number |
---|---|---|---|---|
frame_a | implicit | Coordinate system a fixed to the component with one cut-force and cut-torque | input | 1 |
frame_b | implicit | Coordinate system b fixed to the component with one cut-force and cut-torque | output | 1 |