MultiBondLib.Mechanics3DwithImpulses.Joints

joint elements

MultiBondLib.Mechanics3DwithImpulses.Joints.Revolute MultiBondLib.Mechanics3DwithImpulses.Joints.Prismatic MultiBondLib.Mechanics3DwithImpulses.Joints.Spherical MultiBondLib.Mechanics3DwithImpulses.Joints.FreeTranslationalMovement MultiBondLib.Mechanics3DwithImpulses.Joints.FreeBodyMovement MultiBondLib.Mechanics3DwithImpulses.Joints.PotentialFBM MultiBondLib.Mechanics3DwithImpulses.Joints.CloseLoop

Information


This package contains models of joints.

Joints are massles objects, that define the relative movement between two rigid elements. The number of degrees of freedom specifies how many variables are minimally needed to describe the relative position. An object in 3D-space can have up to 6 degrees of freedom.

Joints usually define integrators and the joint variables on positional and velocity level become state variables of the system. Anyhow the integrators might be removed by the Pantelides algorithm, if the joint is placed in a kinematic loop.
The number of degrees of freedom equals the number of potential state variables.

The state variables have to be reinitialized at a force impulse. Hence, the selection of the reinitialization points must be done manually and is equal to the selection of the state variables that also should be done manually.

It is possible and common to create complex joints out of simple joints. However, one has to pay attention that no singularities occur if two or more joints are connected (directly or through massless elements).

NameDescription
Revolute revolute joint with 1 degree of freedom
Prismatic prismatic joint with 1 degree of freedom
Spherical spherical joint with all 3 rotational degrees of freedom
FreeTranslationalMovement joint with all 3 translational degrees of freedom
FreeBodyMovement joint with all 6 degrees of freedom
PotentialFBM potential joint with all 6 degrees of freedom
CloseLoop element to close kinematik loops manualy


MultiBondLib.Mechanics3DwithImpulses.Joints.Revolute MultiBondLib.Mechanics3DwithImpulses.Joints.Revolute

revolute joint with 1 degree of freedom

MultiBondLib.Mechanics3DwithImpulses.Joints.Revolute

Information


This is a revolute joint. The two connected frames are allowed to rotate around the joint axis.
This joint defines one degree of freedom. 

General parameter

The rotation axis of the revolute joint can be defined by the parameter n. n can be of arbitrary length, but it must not be zero.

The parameter phi_offset defines an offset value for the revolute angle phi.

The parameter animation toggles the visualization of the element.

Initialization

In general, you can specify... Which of these variables do effectively appear in the inital equations can be defined by the parameter initType.

Visualization

This element is visualized by cylinder along the rotation axis. The settings for length, diameter and color can be specified by the animation parameters.

Advanced settings

The activation of enforceStates enforces the joint to explicitely define integrators. This parameter is useful to choose the state variables manually.

The activation of reinitByImpulse determines the state variables to be reinitialized in case of a force impulse. It is coupled by default with the parameter enforceStates. The selection of the reinitialization points must be done manually.


Parameters

NameDefaultDescription
animationtrueanimate revolute joint as cylinder
n[3]{0,0,1}direction of revolute axis [m]
phi_offset0phi + phi_offset = angle between frames [rad]
Initialization
initTypeMB.Types.Init.Free Type of initialization (defines usage of start values below)
phi_start0initial angle [rad]
w_start0initial angular velocity [rad/s]
z_start0initial angular acceleration [rad/s2]
Animation
if animation = true
cylinderLengthworld3D.defaultJointLength Length of cylinder representing the joint axis [m]
cylinderDiameterworld3D.defaultJointWidth Diameter of cylinder representing the joint axis [m]
cylinderColorworld3D.defaultJointColor Color of cylinder representing the joint axis
Advanced
enforceStatesfalseenforce phi and w as states
reinitByImpulseenforceStatesreinit velocities by an impulse

Modelica definition

model Revolute "revolute joint with 1 degree of freedom" 
extends Mechanics3D.Joints.Revolute(
        redeclare Interfaces.IFrame_a frame_a,
        redeclare Interfaces.IFrame_b frame_b,
        redeclare Interfaces.IMech2MBG Mech2MBG1,
        redeclare Interfaces.MBG2IMech MBG2Mech1);
  
   parameter Boolean reinitByImpulse =  enforceStates 
    "|Advanced||reinit velocities by an impulse";
  
protected 
  Real Rrel[3,3];
  Real Wm;
  Real Wa;
  
equation 
  when frame_a.contact then
    Wa = w;
    Rrel = planarRotation1.Rrel;
  end when;
  
  if reinitByImpulse then
    when frame_b.contact then
      reinit(w,Wa+2*(Wm-Wa));
    end when;
  end if;
  
frame_a.contact = frame_b.contact;
frame_a.F + frame_b.F  = zeros(3);
frame_a.Vm = frame_b.Vm;
Rrel*frame_a.T + frame_b.T  = zeros(3);
frame_b.T*eN = 0;
Rrel*frame_a.Wm = -Wm*eN+frame_b.Wm;
  
end Revolute;

MultiBondLib.Mechanics3DwithImpulses.Joints.Prismatic MultiBondLib.Mechanics3DwithImpulses.Joints.Prismatic

prismatic joint with 1 degree of freedom

MultiBondLib.Mechanics3DwithImpulses.Joints.Prismatic

Information


This is a prismatic joint. The two connected frames are allowed to shift in direction of the joint axis.
This joint defines one degree of freedom. 

General parameter

The joint axis can be defined by the parameter n. n can be of arbitrary length, but it must not be zero.

The parameter s_offset defines an offset value for the joint length s.

The parameter animation toggles the visualization of the element.

Initialization

In general, you can specify... Which of these variables do effectively appear in the inital equations can be defined by the parameter initType.

Visualization

This element is visualized by box. The settings for width, height and color can be specified by the animation parameters.

Advanced settings

The activation of enforceStates enforces the joint to explicitely define integrators. This parameter is useful to choose the state variables manually.

The activation of reinitByImpulse determines the state variables to be reinitialized in case of a force impulse. It is coupled by default with the parameter enforceStates. The selection of the reinitialization points must be done manually.


Parameters

NameDefaultDescription
animationtrueanimate prismatic joint as box
n[3]{1,0,0}direction of the joint axis [m]
s_offset0Relative distance offset (distance between frame_a and frame_b = s_offset + s) [m]
Initialization
initTypeMB.Types.Init.Free Type of initialization (defines usage of start values below)
s_start0initial length [m]
v_start0initial velocity [m/s]
a_start0initial acceleration [m/s2]
Animation
if animation = true
boxWidthworld3D.defaultJointWidth Width of prismatic joint box [m]
boxHeightboxWidth Height of prismatic joint box [m]
boxColorworld3D.defaultJointColor Color of prismatic joint box
Advanced
enforceStatesfalseenforce s and v as states
reinitByImpulseenforceStatesreinit velocities by an impulse

Modelica definition

model Prismatic "prismatic joint with 1 degree of freedom" 
extends Mechanics3D.Joints.Prismatic(
        redeclare Interfaces.IFrame_a frame_a,
        redeclare Interfaces.IFrame_b frame_b,
        redeclare Interfaces.IMech2MBG Mech2MBG1,
        redeclare Interfaces.MBG2IMech MBG2Mech1);
  
   parameter Boolean reinitByImpulse =  enforceStates 
    "|Advanced||reinit velocities by an impulse";
  
protected 
  Real R[3,3];
  Real rs;
  Real Vm;
  Real Va;
  
equation 
  when frame_a.contact then
    R = frame_a.P.R;
    rs = s;
    Va = v;
  end when;
  
  if reinitByImpulse then
    when frame_b.contact then
      reinit(v,Va+2*(Vm-Va));
    end when;
  end if;
  
  frame_a.contact = frame_b.contact;
  frame_a.F + frame_b.F = zeros(3);
  (R*frame_b.F)*eN = 0;
  frame_a.T + frame_b.T + cross(rs*eN,R*frame_b.F) = zeros(3);
  frame_a.Vm + transpose(R)*cross(frame_a.Wm,rs*eN) + transpose(R)*(Vm*eN) = frame_b.Vm;
  frame_a.Wm = frame_b.Wm;
  
end Prismatic;

MultiBondLib.Mechanics3DwithImpulses.Joints.Spherical MultiBondLib.Mechanics3DwithImpulses.Joints.Spherical

spherical joint with all 3 rotational degrees of freedom

MultiBondLib.Mechanics3DwithImpulses.Joints.Spherical

Information


This is an spherical joint. The two connected frames are allowed to rotate freely.
This joint defines three degrees of freedom. 

General parameter

The parameter animation toggles the visualization of the element

Initialization

In general, you can specify... Which of these variables do effectively appear in the inital equations can be defined by the parameter initType.

Visualization

This element is visualized by a sphere.

Advanced settings

The activation of enforceStates enforces the joint to explicitely define integrators. This parameter is useful to choose the state variables manually.

The activation of reinitByImpulse determines the state variables to be reinitialized in case of a force impulse. It is coupled by default with the parameter enforceStates. The selection of the reinitialization points must be done manually.

The orientation can either be expressed by the three cardan angles or by quaternions.

Which of these two variants is used, can be specified by the parameter useQuaternions. If cardan angles are chosen to be used, you can specify the sequence of rotation axis by the parameter sequence_angles.


Parameters

NameDefaultDescription
animationtrueanimate spherical joint as sphere
Initialization
initTypeMB.Types.Init.Free Type of initialization (defines usage of start values below)
phi_start[3]{0,0,0}initial cardan angles in degree [deg]
w_start[3]{0,0,0}initial angular velocity in deg/s [deg/s]
z_start[3]{0,0,0}initial angular acceleration in deg/s2 [deg/s2]
if animation = true
sphereDiameterworld3D.defaultJointLength Diameter of sphere representing the spherical joint [m]
sphereColorworld3D.defaultJointColor Color of sphere representing the spherical joint
Advanced
enforceStatesfalseenforce Quaternions or cardan angles and w as states
useQuaternionstrueuse Quaternions instead of cardan angles
sequence_angles{1,2,3}sequence of the cardan angles
reinitByImpulseenforceStatesreinit velocities by an impulse

Modelica definition

model Spherical 
  "spherical joint with all 3 rotational degrees of freedom" 
extends Mechanics3D.Joints.Spherical(
        redeclare Interfaces.IFrame_a frame_a,
        redeclare Interfaces.IFrame_b frame_b,
        redeclare Interfaces.IMech2MBG Mech2MBG1,
        redeclare Interfaces.MBG2IMech MBG2Mech1);
  
   parameter Boolean reinitByImpulse =  enforceStates 
    "|Advanced||reinit velocities by an impulse";
  
protected 
  Real Rrel[3,3];
  Real Wm[3];
  Real Wa[3];
  
equation 
  when frame_a.contact then
    Wa = w;
    Rrel = Rotation1.Rrel;
  end when;
  
  if reinitByImpulse then
    when frame_b.contact then
      reinit(w,Wa+2*(Wm-Wa));
    end when;
  end if;
  
  frame_a.contact = frame_b.contact;
  frame_a.F + frame_b.F  = zeros(3);
  frame_a.Vm = frame_b.Vm;
  Rrel*frame_a.T + frame_b.T  = zeros(3);
  frame_b.T = zeros(3);
  Rrel*frame_a.Wm = -Wm + frame_b.Wm;
  
end Spherical;

MultiBondLib.Mechanics3DwithImpulses.Joints.FreeTranslationalMovement MultiBondLib.Mechanics3DwithImpulses.Joints.FreeTranslationalMovement

joint with all 3 translational degrees of freedom

MultiBondLib.Mechanics3DwithImpulses.Joints.FreeTranslationalMovement

Information


This is an untypical joint. The translational movement of its connected element is not restricted
and all 3 translational degrees of freedom are defined. The orientation is fixated.

General parameter

The parameter r defines a positional offset.

Initialization

In general, you can specify... Which of these variables do effectively appear in the inital equations can be defined by the parameter initType.

Visualization

This element isn't visualized.

Advanced settings

The activation of enforceStates enforces the joint to explicitely define integrators. This parameter is useful to choose the state variables manually.

The activation of reinitByImpulse determines the state variables to be reinitialized in case of a force impulse. It is coupled by default with the parameter enforceStates. The selection of the reinitialization points must be done manually.


Parameters

NameDefaultDescription
r[3]{0,0,0}positional shift to inertial frame [m]
Initialization
initTypeMB.Types.Init.Free Type of initialization (defines usage of start values below)
x_start[3]{0,0,0}initial position [m]
v_start[3]{0,0,0}initial velocity [m/s]
a_start[3]{0,0,0}initial acceleration [m/s2]
Advanced
enforceStatesfalseenforce position and velocity as states
reinitByImpulseenforceStatesreinit velocities by an impulse

Modelica definition

model FreeTranslationalMovement 
  "joint with all 3 translational degrees of freedom" 
   extends Mechanics3D.Joints.FreeTranslationalMovement(redeclare Interfaces.IFrame_b
      frame_b,                                          redeclare Interfaces.MBG2IMech
      MBG2Mech1);
   parameter Boolean reinitByImpulse =  enforceStates 
    "|Advanced||reinit velocities by an impulse";
  
  
protected 
  Real Va[3];
  Real Wa[3];
  
equation 
    when frame_b.contact then
      Va = frame_b.P.v;
      Wa = frame_b.P.w;
    end when;
  
    if reinitByImpulse then
      when frame_b.contact then
        reinit(v,Va+2*(frame_b.Vm-Va));
      end when;
    end if;
  
    frame_b.F = zeros(3);
    frame_b.Wm = zeros(3);
  
end FreeTranslationalMovement;

MultiBondLib.Mechanics3DwithImpulses.Joints.FreeBodyMovement MultiBondLib.Mechanics3DwithImpulses.Joints.FreeBodyMovement

joint with all 6 degrees of freedom

MultiBondLib.Mechanics3DwithImpulses.Joints.FreeBodyMovement

Information


This is an untypical joint, that does not restrict the movement of its connected element
and defines all 6 degrees of freedom. The usage of this joint is hardly necessary, because it is potentially avaiable in each body element.

General parameter

There are no general parameters

Initialization

In general, you can specify... Which of these variables do effectively appear in the inital equations can be defined by the parameter initType.

Visualization

This element isn't visualized.

Advanced settings

The activation of enforceStates enforces the joint to explicitely define integrators. This parameter is useful to choose the state variables in a kinematic manually.

The activation of reinitByImpulse determines the state variables to be reinitialized in case of a force impulse. It is coupled by default with the parameter enforceStates. The selection of the reinitialization points must be done manually.

The orientation can either be expressed by the three cardan angles or by quaternions.

Which of these two variants is used, can be specified by the parameter useQuaternions. If cardan angles are chosen to be used, you can specify the sequence of rotation axis by the parameter sequence_angles.


Parameters

NameDefaultDescription
Initialization
initTypeMB.Types.Init.Free Type of initialization (defines usage of start values below)
x_start[3]{0,0,0}initial position [m]
v_start[3]{0,0,0}initial velocity [m/s]
a_start[3]{0,0,0}initial acceleration [m/s2]
phi_start[3]{0,0,0}initial cardan angles in degree [deg]
w_start[3]{0,0,0}initial angular velocity in deg/s [deg/s]
z_start[3]{0,0,0}initial angular acceleration in deg/s2 [deg/s2]
Advanced
enforceStatesfalseenforce Quaternions or cardan angles and w as states
useQuaternionstrueuse Quaternions instead of cardan angles
sequence_angles{1,2,3}sequence of the cardan angles
reinitByImpulseenforceStatesreinit velocities by an impulse

Modelica definition

model FreeBodyMovement "joint with all 6 degrees of freedom" 
     extends Mechanics3D.Joints.FreeBodyMovement(redeclare Interfaces.IFrame_b 
      frame_b,                                          redeclare Interfaces.MBG2IMech
      MBG2Mech1);
  
   parameter Boolean reinitByImpulse =  enforceStates 
    "|Advanced||reinit velocities by an impulse";
  
protected 
  Real Va[3];
  Real Wa[3];
  
equation 
    when frame_b.contact then
      Va = frame_b.P.v;
      Wa = frame_b.P.w;
   end when;
  
    if reinitByImpulse then
      when frame_b.contact then
        reinit(v,Va+2*(frame_b.Vm-Va));
        reinit(w,Wa+2*(frame_b.Wm-Wa));
      end when;
    end if;
  
    frame_b.F = zeros(3);
    frame_b.T = zeros(3);
  
end FreeBodyMovement;

MultiBondLib.Mechanics3DwithImpulses.Joints.PotentialFBM MultiBondLib.Mechanics3DwithImpulses.Joints.PotentialFBM

potential joint with all 6 degrees of freedom

MultiBondLib.Mechanics3DwithImpulses.Joints.PotentialFBM

Information


This is a potential joint. It is in principle equal to the free body movement joint, but the differential
equations are only stated if necessary (i. e.: if the body movement can't be derived out of other joints).
This joint is part of every body element. There is actually no further usage of this element. 

General parameter

There are no general parameters

Initialization

In general, you can specify... Which of these variables do effectively appear in the inital equations can be defined by the parameter initType.

Visualization

This element isn't visualized.

Advanced settings

The activation of enforceStates enforces the joint to explicitely define integrators. This parameter is useful to choose the state variables manually.

The activation of reinitByImpulse determines the state variables to be reinitialized in case of a force impulse. It is coupled by default with the parameter enforceStates. The selection of the reinitialization points must be done manually.

The orientation can either be expressed by the three cardan angles or by quaternions.

Which of these two variants is used, can be specified by the parameter useQuaternions. If cardan angles are chosen to be used, you can specify the sequence of rotation axis by the parameter sequence_angles.


Parameters

NameDefaultDescription
Initialization
initTypeMB.Types.Init.Free Type of initialization (defines usage of start values below)
x_start[3]{0,0,0}initial position [m]
v_start[3]{0,0,0}initial velocity [m/s]
a_start[3]{0,0,0}initial acceleration [m/s2]
phi_start[3]{0,0,0}initial cardan angles in degree [deg]
w_start[3]{0,0,0}initial angular velocity in deg/s [deg/s]
z_start[3]{0,0,0}initial angular acceleration in deg/s2 [deg/s2]
Advanced
enforceStatesfalseenforce Quaternions or cardan angles and w as states
useQuaternionstrueuse Quaternions instead of cardan angles
sequence_angles{1,2,3}sequence of the cardan angles
reinitByImpulseenforceStatesreinit velocities by an impulse

Modelica definition

model PotentialFBM "potential joint with all 6 degrees of freedom" 
     extends Mechanics3D.Joints.PotentialFBM(
        redeclare Interfaces.IFrame_b frame_b,
        redeclare Interfaces.MBG2IMech MBG2Mech1);
  
   parameter Boolean reinitByImpulse =  enforceStates 
    "|Advanced||reinit velocities by an impulse";
  
protected 
  Real Va[3];
  Real Wa[3];
  
equation 
    when frame_b.contact then
      Va = frame_b.P.v;
      Wa = frame_b.P.w;
   end when;
  
    if reinitByImpulse then
      when frame_b.contact then
        reinit(v,Va+2*(frame_b.Vm-Va));
        reinit(w,Wa+2*(frame_b.Wm-Wa));
      end when;
    end if;
  
    frame_b.F = zeros(3);
    frame_b.T = zeros(3);
  
end PotentialFBM;

MultiBondLib.Mechanics3DwithImpulses.Joints.CloseLoop MultiBondLib.Mechanics3DwithImpulses.Joints.CloseLoop

element to close kinematik loops manualy

MultiBondLib.Mechanics3DwithImpulses.Joints.CloseLoop

Information


This is the CloseLoop element.

With this element you can cut a kinematic loop. Just insert the element into the loop at the point where you'd like to cut it. Kinematic loops have to be cut manually in impulse mechanical systems.

This element connects its two connectors in a non-redundant way. It must not be used outside a kinematik loop.


Modelica definition

model CloseLoop "element to close kinematik loops manualy" 
extends Mechanics3D.Joints.CloseLoop(
        redeclare Interfaces.IFrame_a frame_a,
        redeclare Interfaces.IFrame_b frame_b);
  
equation 
frame_a.F = frame_b.F;
frame_a.T = frame_b.T;
frame_a.Vm = frame_b.Vm;
frame_a.Wm = frame_b.Wm;
  
end CloseLoop;

HTML-documentation generated by Dymola Thu Feb 23 12:20:04 2006.