It can be much simpler and much less error prone (user errors) to transform forces and moments between two points by using a cross product instead of using transformation matrices like:

\begin{bmatrix}  1&0&0\\  0&\cos{\theta} & \sin{\theta}\\  0&-\sin{\theta}& \cos{\theta}  \end{bmatrix}

 The simple trick is to recognize that a cross product can be expressed as a matrix multiply as follows:

\begin{matrix}  a\times{b} & = & skew(a) \cdot{b}\\  \begin{bmatrix}  a_x &a_y &a_z  \end{bmatrix}\times{b}&=&\left[ \begin{matrix}0&-a_z&a_y\\a_z&0&-a_x\\-a_y&a_x&0 \end{matrix}\right]\cdot{b}  \end{matrix}


So to show how we would use the cross product to our advantage, see the the following example.  We want to transform the forces and moments applied to a rigid body at point A to point B:

\begin{matrix}  F_b&=&T_{Fa2b}\cdot{F_a} \\  \begin{bmatrix}  F_{bx}\\  F_{by}\\  F_{bz}\\  F_{brx}\\  F_{bry}\\  F_{brz}  \end{bmatrix} & = &  \begin{bmatrix}  I&0\\skew(ptb-pta)&I\end{bmatrix}\\  \end{matrix}\cdot{\begin{bmatrix}  F_{ax}\\  F_{ay}\\  F_{az}\\  F_{arx}\\  F_{ary}\\  F_{arz}  \end{bmatrix}}

It’s quite easy to see that the forces along the cartesian coordinates remain the same between the two points, but the moments change due to the moment arm (ptb-pta).

It is also useful that displacements can be easily transformed using the transpose of the transformation matrix above:

\begin{matrix}  X_b&=&T_{Fa2b}'\cdot{X_a} \\  \begin{bmatrix}  X_{bx}\\  X_{by}\\  X_{bz}\\  X_{brx}\\  X_{bry}\\  X_{brz}  \end{bmatrix} & = &  \begin{bmatrix}  I&skew(ptb-pta)\\0&I\end{bmatrix}\\  \end{matrix}\cdot{\begin{bmatrix}  X_{ax}\\  X_{ay}\\  X_{az}\\  X_{arx}\\  X_{ary}\\  X_{arz}  \end{bmatrix}}


This is an excerpt from Layton Hale’s lecture notes “Design and Analysis of Constraint Systems” from the November 2010 ASPE Conference.


Many engineers make a simple mistake when determining the equivalent stiffness of a spring that is rotated with respect to a coordinate system.  Typically they find k_x=k \cos{\theta} and k_y=k \sin{\theta}, which are both incorrect.  2dof-spring


When we displace the spring in the x direction \delta_x the compression of the spring along it’s axis is quite a bit less as you can see in the figure below.  From the figures it is quite easy to see:

\delta_x = \delta / \cos{\theta}

\delta_y = \delta / \sin{\theta}

2dof-spring2It follows that the spring stiffness along the x-direction is:

\begin{matrix}k_{xx}&= &\frac{F_x}{\delta{x}}\\k_{xx}& = &\frac{F\cos{\theta}}{\delta/\cos{\theta}}\\k_{xx}& = &\frac{F}{\delta}\cos^2{\theta}\end{matrix}

We can then easily solve for the equivalent stiffness matrix as:

\mathbf{K} = k\cdot \begin{bmatrix}  \cos^2{\theta} & \cos{\theta}\cdot\sin{\theta}\\  \cos{\theta}\cdot\sin{\theta} & \sin^2{\theta}  \end{bmatrix}

And now we can compute the forces along the rotated coordinate system as:

\begin{bmatrix}f_x\\ f_y\end{bmatrix} = \begin{bmatrix}k_{xx} & k_{xy}\\ k_{yx} & k_{yy}\\\end{bmatrix}\cdot\begin{bmatrix}\delta_x\\ \delta_y\end{bmatrix}

This is a continuation post on simple implementations of tuned-mass-dampers. For the curious please see my previous posts about TMDs here …

Say we have the 6-DOF model with frequency response as shown below.  The FRF’s show the response of a leadscrew actuator to an acceleration disturbance at it’s base (continue reading about the leadscrew actuator here…).  poi_tf_x_dir_out_Base_in

We can use a TMD to dampen the first few modes. As a first pass damper design, let’s set the mass ratio \alpha=\frac{m_{damper}}{m_{sys}} to be 10%.  We then have m_{damper}=0.2 kg.  Also, the first interesting system mode occurs around \omega_n=300hz, a general rule of thumb for determining the damper’s resonance is \frac{\omega_{damper}}{\omega_{sys}}=\frac{1}{1-\alpha}.  We then set \omega_d = 278hz.  It is trivial to determine the damper stiffness k_{damper}=m_{damper}{\omega_d}^2.  We can start with a damping value of c=\frac{1}{2}m_{damper}\omega_d.

So we create a 6-DOF tuned-mass-damper by appending six 1-DOF TMD’s, and if so desired, each 1-DOF TMD can target different modes as they are independent of eachother.

tmd_{6d} = \left[\begin{matrix}tmd_{1dx}\\tmd_{1dy}\\tmd_{1dz}\\tmd_{1drx}\\tmd_{1dry}\\tmd_{1drz}\end{matrix}\right]

The 6-DOF TMD is then feedback to the dynamic system and the resultant FRF’s are shown below.  The dashed lines are the undamped and solid lines are the damped FRF’s.  Notice the original resonance is quite suppressed, this will dramatically reduce the POI motion from base disturbances.




For further reading on tuned mass dampers can by Lei Zuo and Samir Nayfeh be found here.

I proposed using an improper transfer function to model a simple tuned-mass damper (read more here) with the transfer function:

\frac{y}{u} = \frac{mcs^{3}+mks^{2}}{ms^{2}+cs+k}

To convert this to state-space representation we need to use the more generalized descriptor state-space notation which introduces the “E” term:



where E,A \in \mathbb{R}^{n\times n}B \in \mathbb{R}^{n\times m}C \in \mathbb{R}^{p\times n} and D \in \mathbb{R}^{p\times m}.

We derive C as:

y = C \times \left[\begin{matrix}x_1\\x_2\\x_3\\x_4\end{matrix}\right]

y = \left[\begin{matrix}mc,mk,0,0\end{matrix}\right]\times \left[\begin{matrix}x_1\\x_2\\x_3\\x_4\end{matrix}\right]

We then have the following states:



where  d = ms^2+cs+k

we can see that

\begin{matrix}u&=&d\times x_4&\\u&=&ms^2x_4+csx_4+kx_4&\\u&=&m\dot{x}_3+cx_3+kx_4&\\\end{matrix}

On to fill out the rest of the matrices as:

\begin{matrix}E&\dot{X}&=&A&X&+&B&u\\ \left[\begin{matrix}0&1&0&0\\0&0&1&0\\0&0&m&0\\0&0&0&1\end{matrix}\right]&\left[\begin{matrix}\dot{x}_1\\\dot{x}_2\\\dot{x}_3\\\dot{x}_4\end{matrix}\right]&=&\left[\begin{matrix} 1&0&0&0\\0&1&0&0\\0&0&-c&-k\\0&0&0&1 \end{matrix}\right]&\left[\begin{matrix}x_1\\x_2\\x_3\\x_4\end{matrix}\right]&+&\left[\begin{matrix}0\\0\\1\\0\end{matrix}\right]&u\end{matrix}


where D=0.

rel_mot_abs_mot_diagramJust a quick reminder about converting relative motion to absolute motion.  Say we already have the transfer function for input acceleration to relative motion:

sys_{rel} = \frac{\delta}{\ddot{x}_1} = \frac{x_2-x_1}{\ddot{x}_1}

The absolute motion of the second mass can be found as

\frac{x_{2}}{\ddot{x}_{1}} = \frac{\delta}{\ddot{x}_{1}} + \frac{1}{s^{2}}

The derivation is as follows:

sys_{rel} = \frac{\delta}{\ddot{x}_{1}}= \frac{x_{2}-x_{1}}{\ddot{x}_{1}}=\frac{x_2}{\ddot{x}_1}-\frac{x_1}{\ddot{x}_1}

\frac{x_2}{\ddot{x}_1} = \frac{\delta}{\ddot{x}_{1}}+\frac{x_1}{\ddot{x}_1}=\frac{\delta}{\ddot{x}_{1}}+\frac{1}{s^2}

A client wanted to investigate adding a tuned mass damper (TMD) to their system to improve its performance. We developed a large FEA model to estimate the dynamics of the system and didn’t want to add the damper within the FEA model because it was quite large and long solve times prevented quick iteration. We came up with this simple method to estimate the impact a TMD would have on system performance.

A 1-DOF tuned mass damper is easily derived from the diagram below

\frac{F}{x_{1}} = \frac{mcs^{3}+mks^{2}}{ms^{2}+cs+k}

From the FEA model, we generated a state-space dynamic model that has a node at the location where we’d like to add the TMD.  The input at that node is force (N, N.m) and the output at that node is displacement (m, rads).  To incorporate the TMD into the dynamics all we need to do is apply the feedback loop as shown below:



To expand the TMD out to 6-DOF, we simply create six 1-DOF TMD’s and connect them to their respective inputs and outputs.

Now that the TMD dynamics are generated in post processing we can easily iterate on different designs (different masses, spring rates and damping values) to optimize the design.  Frequency and transient responses are very quickly calculated as compared to solving FEA models.


For further reading on tuned mass dampers can by Lei Zuo and Samir Nayfeh be found here.