modelJointUSR

Universal - spherical - revolute joint aggregation (no constraints, no potential states)

Extends from Interfaces.PartialTwoFramesDoubleSize (Base model for components providing two frame connectors + outer world + assert to guarantee that the component is connected (default icon size is factor 2 larger as usual)).

Information

This component consists of a universal joint at frame_a, a revolute joint at frame_b and a spherical joint which is connected via rod1 to the universal and via rod2 to the revolute joint, see the default animation in the following figure (the axes vectors are not part of the default animation):

model Joints.Assemblies.JointUSR

This joint aggregation has no mass and no inertia and introduces neither constraints nor potential state variables. It should be used in kinematic loops whenever possible since the non-linear system of equations introduced by this joint aggregation is solved analytically (i.e., a solution is always computed, if a unique solution exists).

The universal joint is defined in the following way:

  • The rotation axis of revolute joint 1 is along parameter vector n1_a which is fixed in frame_a.
  • The rotation axis of revolute joint 2 is perpendicular to axis 1 and to the line connecting the universal and the spherical joint (= rod 1).

The definition of axis 2 of the universal joint is performed according to the most often occurring case for the sake of simplicity. Otherwise, the treatment is much more complicated and the number of operations is considerably higher, if axis 2 is not orthogonal to axis 1 and to the connecting rod.

Note, there is a singularity when axis 1 and the connecting rod are parallel to each other. Therefore, if possible n1_a should be selected in such a way that it is perpendicular to rRod1_ia in the initial configuration (i.e., the distance to the singularity is as large as possible).

The rest of this joint aggregation is defined by the following parameters:

  • The position of the spherical joint with respect to the universal joint is defined by vector rRod1_ia. This vector is directed from frame_a to the spherical joint and is resolved in frame_ia (it is most simple to select frame_ia such that it is parallel to frame_a in the reference or initial configuration).
  • The position of the spherical joint with respect to the revolute joint is defined by vector rRod2_ib. This vector is directed from the inner frame of the revolute joint (frame_ib or revolute.frame_a) to the spherical joint and is resolved in frame_ib (note, that frame_ib and frame_b are parallel to each other).
  • The axis of rotation of the revolute joint is defined by axis vector n_b. It is fixed and resolved in frame_b.
  • When specifying this joint aggregation with the definitions above, two different configurations are possible. Via parameter phi_guess a guess value for revolute.phi(t0) at the initial time t0 is given. The configuration is selected that is closest to phi_guess (|revolute.phi - phi_guess| is minimal).

An additional frame_ia is present. It is fixed in the rod connecting the universal and the spherical joint at the origin of frame_a. The placement of frame_ia on the rod is implicitly defined by the universal joint (frame_a and frame_ia coincide when the angles of the two revolute joints of the universal joint are zero) and by parameter vector rRod1_ia, the position vector from the origin of frame_a to the spherical joint, resolved in frame_ia.

An additional frame_ib is present. It is fixed in the rod connecting the revolute and the spherical joint at the side of the revolute joint that is connected to this rod (= rod2.frame_a = revolute.frame_a).

An additional frame_im is present. It is fixed in the rod connecting the revolute and the spherical joint at the side of the spherical joint that is connected to this rod (= rod2.frame_b). It is always parallel to frame_ib.

The easiest way to define the parameters of this joint is by moving the MultiBody system in a reference configuration where all frames of all components are parallel to each other (alternatively, at least frame_a and frame_ia of the JointUSR joint should be parallel to each other when defining an instance of this component).

In the public interface of the JointUSR joint, the following (final) parameters are provided:

parameter Real rod1Length(unit="m")  "Length of rod 1";
parameter Real eRod1_ia[3] "Unit vector along rod 1, resolved in frame_ia";
parameter Real e2_ia  [3]  "Unit vector along axis 2, resolved in frame_ia";

This allows a more convenient definition of data which is related to rod 1. For example, if a box shall be connected at frame_ia directing from the origin of frame_a to the middle of rod 1, this might be defined as:

  Modelica.Mechanics.MultiBody.Joints.Assemblies.JointUSP jointUSR(rRod1_ia={1.2, 1, 0.2});
  Modelica.Mechanics.MultiBody.Visualizers.FixedShape     shape(shapeType       = "box",
                                             lengthDirection = jointUSR.eRod1_ia,
                                             widthDirection  = jointUSR.e2_ia,
                                             length          = jointUSR.rod1Length/2,
                                             width           = jointUSR.rod1Length/10);
equation
  connect(jointUSP.frame_ia, shape.frame_a);

Parameters

TypeNameDefaultDescription
Booleananimationtrue= true, if animation shall be enabled
BooleanshowUniversalAxestrue= true, if universal joint shall be visualized with two cylinders, otherwise with a sphere (provided animation=true)
Modelica.Mechanics.MultiBody.Types.Axisn1_a{0, 0, 1}Axis 1 of universal joint fixed and resolved in frame_a (axis 2 is orthogonal to axis 1 and to rod 1)
Modelica.Mechanics.MultiBody.Types.Axisn_b{0, 0, 1}Axis of revolute joint fixed and resolved in frame_b
SI.Position[3]rRod1_ia{1, 0, 0}Vector from origin of frame_a to spherical joint, resolved in frame_ia
SI.Position[3]rRod2_ib{-1, 0, 0}Vector from origin of frame_ib to spherical joint, resolved in frame_ib
Modelica.Units.NonSI.Angle_degphi_offset0Relative angle offset of revolute joint (angle = phi(t) + from_deg(phi_offset))
Modelica.Units.NonSI.Angle_degphi_guess0Select the configuration such that at initial time |phi(t0) - from_deg(phi_guess)| is minimal
Real[3]eRod1_iarod1.eRod_iaUnit vector from origin of frame_a to origin of spherical joint, resolved in frame_ia
Real[3]e2_iarod1.e2_iaUnit vector in direction of axis 2 of universal joint, resolved in frame_ia
SI.Distancerod1Lengthrod1.rodLengthLength of rod 1 (= distance between universal and spherical joint)
Animation › if animation = true
SI.DiametersphereDiameterworld.defaultJointLengthDiameter of the spheres representing the universal and the spherical joint
SI.Diameterrod1DiametersphereDiameter/Types.Defaults.JointRodDiameterFractionDiameter of rod 1 connecting the universal and the spherical joint
SI.Diameterrod2Diameterrod1DiameterDiameter of rod 2 connecting the revolute and the spherical joint
SI.DiameterrevoluteDiameterworld.defaultJointWidthDiameter of cylinder representing the revolute joint
SI.DistancerevoluteLengthworld.defaultJointLengthLength of cylinder representing the revolute joint
Animation › if animation = true and showUniversalAxes
SI.DistancecylinderLengthworld.defaultJointLengthLength of cylinders representing the two universal joint axes
SI.DistancecylinderDiameterworld.defaultJointWidthDiameter of cylinders representing the two universal joint axes
Advanced
BooleancheckTotalPowerfalse= true, if total power flowing into this component shall be determined (must be zero)

Connectors

TypeNameDefaultDescription
Interfaces.Frame_aframe_a (from PartialTwoFramesDoubleSize)Coordinate system fixed to the component with one cut-force and cut-torque
Interfaces.Frame_bframe_b (from PartialTwoFramesDoubleSize)Coordinate system fixed to the component with one cut-force and cut-torque
Modelica.Mechanics.MultiBody.Interfaces.Frame_aframe_iaCoordinate system at origin of frame_a fixed at connecting rod of universal and spherical joint
Modelica.Mechanics.MultiBody.Interfaces.Frame_bframe_ibCoordinate system at origin of frame_b fixed at connecting rod of spherical and revolute joint
Modelica.Mechanics.MultiBody.Interfaces.Frame_bframe_imCoordinate system at origin of spherical joint fixed at connecting rod of spherical and revolute joint
Modelica.Mechanics.Rotational.Interfaces.Flange_aaxis1-dim. rotational flange that drives the revolute joint
Modelica.Mechanics.Rotational.Interfaces.Flange_bbearing1-dim. rotational flange of the drive bearing of the revolute joint

Components

TypeNameDefaultDescription
Types.ColorsphereColorModelica.Mechanics.MultiBody.Types.Defaults.JointColorColor of the spheres representing the universal and the spherical joint
Types.Colorrod1ColorModelica.Mechanics.MultiBody.Types.Defaults.RodColorColor of rod 1 connecting the universal and the spherical joint
Types.Colorrod2Colorrod1ColorColor of rod 2 connecting the revolute and the spherical joint
Types.ColorrevoluteColorModelica.Mechanics.MultiBody.Types.Defaults.JointColorColor of cylinder representing the revolute joint
Types.SpecularCoefficientspecularCoefficientworld.defaultSpecularCoefficientReflection of ambient light (= 0: light is completely absorbed)
Types.ColorcylinderColorModelica.Mechanics.MultiBody.Types.Defaults.JointColorColor of cylinders representing the two universal joint axes
SI.PowertotalPowerTotal power flowing into this element, if checkTotalPower=true (otherwise dummy)
SI.PositionauxDenominator used to compute force in rod connecting universal and spherical joint
SI.Forcef_rodConstraint force in direction of the rod (positive, if rod is pressed)
Modelica.Mechanics.MultiBody.Joints.Internal.RevoluteWithLengthConstraintrevolute
Modelica.Mechanics.MultiBody.Joints.UniversalSphericalrod1
Modelica.Mechanics.MultiBody.Parts.FixedTranslationrod2
Sensors.RelativePositionrelativePosition
Modelica.Blocks.Sources.Constant[3]position_b