Model Element |
|||||||||||||||||||||||||||||||||||||
Description |
|||||||||||||||||||||||||||||||||||||
Motion_Marker defines a motion input between two Reference_Markers. The motion input may be translational or rotational. You define an expression for the motion characteristics. The expression may be used to define a displacement, velocity, or acceleration input. The expression is usually a function of time. Refer to Comment 8 if you want to make the motion expression dependent on system states. Translational motions may be defined in one of the ways listed below. The functions DX(), DY(), and DZ() represent the x-, y- and z-components, respectively, of the translational displacement vector of the I Reference_Marker, relative to the J Reference_Marker, as measured in the coordinate system of the J Reference_Marker.
The functions VX(), VY(), and VZ() represent the x-, y- and z-components, respectively, of the translational velocity vector of the I Reference_Marker relative to the J Reference_Marker, as measured in the coordinate system of the J Reference_Marker. The time derivative is taken in the reference frame of the J Reference_Marker.
The functions ACCX(), ACCY(), and ACCZ() represent the x-, y- and z-components, respectively, of the translational acceleration vector of the I Reference_Marker relative to the J Reference_Marker, as measured in the coordinate system of the J Reference_Marker. All time derivatives are taken in the reference frame of the J Reference_Marker.
Rotational motions may be defined in one of the ways listed below. B1(I,J), B2(I,J), and B3(I,J) represent the first, second, and third angles of the Body 1-2-3 Euler angle sequence that orients the I Reference_Marker with respect to the J Reference_Marker. See the Comments section for a more detailed description of the B123 Euler rotation sequence.
|
|||||||||||||||||||||||||||||||||||||
Format |
|||||||||||||||||||||||||||||||||||||
<Motion_Marker id = "integer" [ label = "string" ] i_marker_id = "integer" j_marker_id = "integer" direction = { "X" | "Y" | "Z" | "B1" | "B2" | "B3" } { val_typ = "D" | val_typ = "V" ic_disp = "real" | val_typ = "A" ic_disp = "real" ic_vel = "real" } { type = "expression" expr = "motionsolve_expression" > | type = "USERSUB" usrsub_dll_name = "valid_path_name" usrsub_param_string = "USER( [[par_1 [, ...][,par_n]] )" usrsub_fnc_name = "custom_fnc_name" > | type = "USERSUB" script_name = valid_path_name interpreter = "PYTHON" | "MATLAB" usrsub_param_string = "USER( [[par_1 [, ...][,par_n]] )" usrsub_fnc_name = "custom_fnc_name" > }
</Motion_Marker> |
|||||||||||||||||||||||||||||||||||||
Attributes |
|||||||||||||||||||||||||||||||||||||
id |
Element identification number (integer>0). This number is unique among all Motion_Marker elements. |
||||||||||||||||||||||||||||||||||||
label |
The name of the Motion_Marker element. |
||||||||||||||||||||||||||||||||||||
i_marker_id |
Specifies the Reference_Marker ID at which the the motion input is applied. |
||||||||||||||||||||||||||||||||||||
j_marker_id |
Specifies the Reference_Marker ID from which the the motion input is applied. |
||||||||||||||||||||||||||||||||||||
direction |
Specifies the direction of the input. Select one from "X", "Y", "Z", "B1", "X", "Y", and "Z" specify the direction for the translational motion. "B1", "B2", "B3" specify the direction for the rotational motion. |
||||||||||||||||||||||||||||||||||||
val_type |
Specifies whether the motion applies a displacement input (D), a velocity input (V), or an acceleration input (A). You must select one value from "D", "V" or "A". |
||||||||||||||||||||||||||||||||||||
ic_disp |
Specifies the displacement initial condition that is required when |
||||||||||||||||||||||||||||||||||||
ic_vel |
Specifies the velocity initial condition that is required when |
||||||||||||||||||||||||||||||||||||
type |
Select from expression and USERSUB. Specifies how the motion expression is defined. The expression option specifies that the motion value is a MotionSolve expression that can be evaluated at run-time. The USERSUB option indicates that the value of the motion is specified in a user defined subroutine. The parameters |
||||||||||||||||||||||||||||||||||||
expr |
Defines an expression that defines the motion value. Use this parameter only when type = expression. Any valid run-time MotionSolve expression can be provided as input. |
||||||||||||||||||||||||||||||||||||
usrsub_param_string |
The list of parameters that are passed from the data file to the user defined subroutine. Use this keyword only when type = USERSUB is selected. |
||||||||||||||||||||||||||||||||||||
usrsub_dll_name |
Specifies the path and name of the DLL or shared library containing the user subroutine. MotionSolve uses this information to load the user subroutine in the DLL at run time. |
||||||||||||||||||||||||||||||||||||
usrsub_fnc_name |
Specifies an alternative name for the user subroutine MOTSUB. |
||||||||||||||||||||||||||||||||||||
script_name |
Specifies the path and name of the user written script that contains the routine specified by usrsub_fnc_name. |
||||||||||||||||||||||||||||||||||||
interpreter |
Specifies the interpreted language that the user script is written in. Valid choices are MATLAB or PYTHON. |
||||||||||||||||||||||||||||||||||||
Comments |
|||||||||||||||||||||||||||||||||||||
EXPR(Tk+1) = VR(100,200) evaluated at Tk, where Tk+1- Tk is the sampling period for the system. Note that EXPR(Tn+1) is constant. However, it changes whenever the velocity VR() is sampled. This implementation is not adequate because the sampled values are not continuous. Now, you must fit a curve through the previously sampled values and extrapolate the curve to provide a smooth value. This is shown symbolically below: EXPR(Tk+1) = CUBIC(VR(100,200)|Tk, VR(100,200)|Tk-1, VR(100,200)|Tk-2)
|
|||||||||||||||||||||||||||||||||||||
Example |
|||||||||||||||||||||||||||||||||||||
The first example shows how experimental data may be fed into the system as motion input. Automotive durability simulations are often performed using semi-analytical simulation techniques. A vehicle to be tested is instrumented with wheel force transducers to measure the acceleration at the spindle while it is being driven. The vehicle is driven on a proving ground and the acceleration data at the spindles is collected and saved in a file. Since all necessary data cannot be measured experimentally, a computer simulation is now performed to "recover" the full set of loads required to analyze component durability. This simulation is done as follows. The experimental data is "cleaned" to remove noise and high frequency data. Next, a four-poster test rig model is created in MotionSolve. The vehicle is tethered to the test-rig. Actuators at each spindle replay the experimentally measured data. During the simulation, loads acting at each component are measured. These are passed on to finite element programs for component strength, damage, and life prediction. One of the motions in the vertical direction might be as follows. Reference_Marker 301 defines a coordinate system at the front-right spindle of the vehicle. The measured motion in the global "z" direction is to be applied at this marker. The experimental data is contained in PARAM_SPLINE 301001. A cubic spline is used to interpolate through the data. Since the data experimentally measured are accelerations, as a part of the "cleaning" process, it is numerically integrated to yield the desired velocity data. The Motion_Marker modeling element for this scenario is: <Motion_Marker id = "1" i_marker_id = "301" j_marker_id = "0" direction = "Y" val_type = "V" ic_disp = "0." type = "EXPRESSION" expr = "CUBSPL(301001, Time, 0)" > </Motion_Marker> The second example demonstrates how you may specify the motion of the end-effector of a robotic manipulator while it is executing a 3-D path through global space. Reference_marker 314159 defines a coordinate system at the tip of the end-effector. Reference_Curve 3 defines the 3-D curve in global space. The X-, Y- and Z-coordinates of the end-effector are to be specified as a function of time. Motions in the X- and Y-directions are shown below. <Motion_Marker id = "101" i_marker_id = "314159" j_marker_id = "0" direction = "X" type = "EXPRESSION" expr = "CURVE(3, Time, 1)" val_type = "D" > </Motion_Marker>
<Motion_Marker id = "101" i_marker_id = "314159" j_marker_id = "0" direction = "Y" type = "EXPRESSION" expr = "CURVE(3, Time, 2)" val_type = "D" > </Motion_Marker> <Motion_Marker id = "101" i_marker_id = "314159" j_marker_id = "0" direction = "X" type = "EXPRESSION" expr = "CURVE(3, Time, 1)" val_type = "D" > </Motion_Marker> <Motion_Marker id = "101" I_marker_id = "314159" J_marker_id = "0" direction = "Y" type = "expression" expr = "CURVE(3, Time, 2)" val_type = "D" > </Motion_Marker> |
The following MDL Model statements:
*SetMotion() - asymmetric motion pair
*SetMotion() - asymmetric motion pair with user subroutine
*SetMotion() - single motion with user subroutine
*SetMotion() - symmetric motion pair
*SetMotionIC() - asymmetric motion pair