Translational Kinematics

Note

You can download this example as a Python script: translational.py or Jupyter Notebook: translational.ipynb.

Learning Objectives

After completing this chapter readers will be able to:

  • calculate the velocity and acceleration of a point in a multibody system

  • apply the one and two point theorems to calculate velocity and acceleration of points

  • identify the tangential, centripetal, and Coriolis acceleration components

Introduction

In multibody dynamics, we are going to need to calculate the translation velocities and accelerations of points. We will learn that the acceleration of the mass centers of the bodies in a multibody system will be a primary ingredient in forming Newton’s Second Law of motion \(\bar{F} = m\bar{a}\). This chapter will equip you to calculate the relative translational velocities and accelerations of points in a system.

Translational Velocity

If a point \(P\) is moving with respect to a point \(O\) that is fixed in reference frame \(A\) the translational velocity vector of point \(P\) is defined as:

(69)\[{}^A\bar{v}^P := \frac{{}^Ad\bar{r}^{P/O}}{dt}\]

We also know from Eq. (63) that the time derivative of any vector can be written in terms of the angular velocity of the associated reference frames, so:

(70)\[\begin{split}{}^A\bar{v}^P & = \frac{{}^Ad\bar{r}^{P/O}}{dt} \\ & = \frac{{}^Bd\bar{r}^{P/O}}{dt} + {}^A\bar{\omega}^B\times\bar{r}^{P/O} \\ & = {}^B\bar{v}^P + {}^A\bar{\omega}^B\times\bar{r}^{P/O}\end{split}\]

This formulation will allow us to utilize different reference frames to simplify velocity calculations. Take for example this piece of kinetic art that now stands in Rotterdam:

https://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Rickey_Rotterdam_04.JPG/360px-Rickey_Rotterdam_04.JPG

Fig. 20 Kinetic sculpture “Two Turning Vertical Rectangles” (1971) in Rotterdam/The Netherlands (FOP) by George Rickey. https://nl.wikipedia.org/wiki/Two_Turning_Vertical_Rectangles

K.Siereveld, Public domain, via Wikimedia Commons

User https://www.reddit.com/user/stravalnak posted this video of the sculpture to Reddit during the 2022 storm Eunice:

From: https://www.reddit.com/r/Rotterdam/comments/svo3cs/hij_maakt_overuren/

and it looks very dangerous. It would be interesting to know the velocity and acceleration of various points on this sculpture. First, we sketch a configuration diagram:

_images/translational-kinetic-sculpture.svg

Fig. 21 Sketch of one of the two plates mounted on the rotating T-support. Reference frames \(N\), \(A\), and \(B\) are shown. Also note the pigeon trying to walk across one edge of the plate at point \(R\).

Now let’s use SymPy Mechanics to calculate Eq. (70) for this example.

import sympy as sm
import sympy.physics.mechanics as me
me.init_vprinting(use_latex='mathjax')

Set up the orientations:

alpha, beta = me.dynamicsymbols('alpha, beta')

N = me.ReferenceFrame('N')
A = me.ReferenceFrame('A')
B = me.ReferenceFrame('B')

A.orient_axis(N, alpha, N.z)
B.orient_axis(A, beta, A.x)

Write out the position vectors to \(P\), \(S\), and \(Q\):

h, d, w, c, l = sm.symbols('h, d, w, c, l')

r_O_P = h*N.z
r_P_S = -d*A.x
r_S_Q = -w*B.x - (c + l/2)*B.z

r_O_P, r_P_S, r_S_Q
\[\displaystyle \left( h\hat{n}_z, \ - d\hat{a}_x, \ - w\hat{b}_x + (- c - \frac{l}{2})\hat{b}_z\right)\]

Now calculate:

(71)\[{}^N\bar{v}^S = {}^A\bar{v}^S + {}^N\bar{\omega}^A\times\bar{r}^{S/O}\]

\(S\) is not moving when observed from \(A\) so:

(r_O_P + r_P_S).dt(A)
\[\displaystyle 0\]

The second term does have a value and can be found with these two components:

A.ang_vel_in(N)
\[\displaystyle \dot{\alpha}\hat{n}_z\]
me.cross(A.ang_vel_in(N), r_O_P + r_P_S)
\[\displaystyle - d \dot{\alpha}\hat{a}_y\]

giving \({}^N\bar{v}^S\):

N_v_S = (r_O_P + r_P_S).dt(A) + me.cross(A.ang_vel_in(N), r_O_P + r_P_S)
N_v_S
\[\displaystyle - d \dot{\alpha}\hat{a}_y\]

Similarly for point \(Q\):

(r_O_P + r_P_S + r_S_Q).dt(B)
\[\displaystyle - h \sin{\left(\alpha \right)} \dot{\beta}\hat{n}_x + h \cos{\left(\alpha \right)} \dot{\beta}\hat{n}_y\]
me.cross(B.ang_vel_in(N), r_O_P + r_P_S + r_S_Q)
\[\displaystyle h \sin{\left(\alpha \right)} \dot{\beta}\hat{n}_x - h \cos{\left(\alpha \right)} \dot{\beta}\hat{n}_y - d \dot{\alpha}\hat{a}_y + \left(- c - \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_x + (- w \cos{\left(\beta \right)} \dot{\alpha} - \left(- c - \frac{l}{2}\right) \dot{\beta})\hat{b}_y + w \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z\]
N_v_Q = (r_O_P + r_P_S + r_S_Q).dt(B) + me.cross(B.ang_vel_in(N), r_O_P + r_P_S + r_S_Q)
N_v_Q
\[\displaystyle - d \dot{\alpha}\hat{a}_y + \left(- c - \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_x + (- w \cos{\left(\beta \right)} \dot{\alpha} - \left(- c - \frac{l}{2}\right) \dot{\beta})\hat{b}_y + w \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z\]

SymPy Mechanics provides the Point object that simplifies working with position vectors. Start by creating points and setting relative positions among points with set_pos().

O = me.Point('O')
P = me.Point('P')
S = me.Point('S')
Q = me.Point('Q')

P.set_pos(O, h*N.z)
S.set_pos(P, -d*A.x)
Q.set_pos(S, -w*B.x - (c + l/2)*B.z)

Once relative positions among points are established you can request the position vector between any pair of points that are connected by the set_pos() statements, for example \(\bar{r}^{Q/O}\) is:

Q.pos_from(O)
\[\displaystyle - w\hat{b}_x + (- c - \frac{l}{2})\hat{b}_z - d\hat{a}_x + h\hat{n}_z\]

Also, once the position vectors are established, velocities can be calculated. You will always explicitly need to set the velocity of at least one point in a collection of points before the velocities of the other points can be calculated. In our case, we can set \({}^N\bar{v}^O=0\) with set_vel():

O.set_vel(N, 0)

Note

SymPy Mechanics has no way of knowing whether the sculpture is fixed on the road or floating around with some constant speed. All the relative velocities of the various points would not be changed in those two scenarios. Hence, at least the speed of one point must be specified.

Now the velocity in \(N\) for any point that is connected to \(O\) by the prior set_pos() statements can be found with the vel() method:

Q.vel(N)
\[\displaystyle \left(- c - \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_x + (- w \cos{\left(\beta \right)} \dot{\alpha} - \left(- c - \frac{l}{2}\right) \dot{\beta})\hat{b}_y + w \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z - d \dot{\alpha}\hat{a}_y\]

This gives the same result as manually calculated above.

Warning

vel() method will calculate velocities naively, i.e. not necessarily give the simplest form.

Exercise

Calculate the velocity of point \(B_c\) when observed from reference frame \(A\).

Velocity Two Point Theorem

If there are two points \(P\) and \(S\) fixed in a reference frame \(A\) and you know the angular velocity \({}^N\bar{\omega}^A\) and the velocity \({}^N\bar{v}^P\) then \({}^N\bar{v}^S\) can be calculated if the vector \(\bar{r}^{S/P}\), which is fixed in \(A\), is known. The following theorem provides a convenient formulation:

(73)\[\begin{split}{}^N\bar{v}^S &= \frac{{}^N d\bar{r}^{S/O} }{dt} \\ &= \frac{{}^N d\left(\bar{r}^{P/O} + \bar{r}^{S/P}\right)}{dt} \\ &= {}^N\bar{v}^P + \frac{{}^N d\bar{r}^{S/P} }{dt} \\ &= {}^N\bar{v}^P + {}^N\bar{\omega}^A \times \bar{r}^{S/P}\end{split}\]

For our example kinetic sculpture, both \(O\) and \(P\) are fixed in \(N\), so \({}^N\bar{v}^P=0\):

N_v_P = 0*N.z

Only the cross product then needs to be formed:

N_v_S = N_v_P +  me.cross(A.ang_vel_in(N), S.pos_from(P))
N_v_S
\[\displaystyle - d \dot{\alpha}\hat{a}_y\]

Using pairs of points both fixed in the same reference frame and Eq. (73) gives a compact result.

Point objects have the v2pt_theory() method for applying the above equation given the other point fixed in the same frame, the frame you want the velocity in, and the frame both points are fixed in. The velocity of \(P\) is set to zero using set_vel() first to ensure we start with a known velocity.

P.set_vel(N, 0)
S.v2pt_theory(P, N, A)
\[\displaystyle - d \dot{\alpha}\hat{a}_y\]

Note that when you call v2pt_theory() it also sets the velocity of point \(S\) to this version of the velocity vector:

S.vel(N)
\[\displaystyle - d \dot{\alpha}\hat{a}_y\]

Both points \(S\) and \(Q\) are fixed in reference frame \(B\) and we just calculated \({}^N\bar{v}^S\), so we can use the two point theorem to find the velocity of \(Q\) in a similar fashion by applying:

(74)\[{}^N\bar{v}^Q = {}^N\bar{v}^S + {}^N\bar{\omega}^B \times \bar{r}^{Q/S}\]

First, using the manual calculation:

N_v_Q = N_v_S +  me.cross(B.ang_vel_in(N), Q.pos_from(S))
N_v_Q
\[\displaystyle - d \dot{\alpha}\hat{a}_y + \left(- c - \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_x + (- w \cos{\left(\beta \right)} \dot{\alpha} - \left(- c - \frac{l}{2}\right) \dot{\beta})\hat{b}_y + w \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z\]

and then with the v2pt_theory():

Q.v2pt_theory(S, N, B)
\[\displaystyle - d \dot{\alpha}\hat{a}_y + \left(- c - \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_x + (- w \cos{\left(\beta \right)} \dot{\alpha} - \left(- c - \frac{l}{2}\right) \dot{\beta})\hat{b}_y + w \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z\]

Exercise

Calculate the velocity of the center of mass of the plate \(B_c\) using the two point theorem.

Velocity One Point Theorem

If you are interested in the velocity of a point \(R\) that is moving in a reference frame \(B\) and you know the velocity of a point \(S\) fixed in \(B\) then the velocity of \(R\) is the sum of it’s velocity when observed from \(B\) and the velocity of a point fixed in \(B\) at \(R\) at that instant of time. Put into mathematical terms we get:

(75)\[{}^N\bar{v}^R = {}^B\bar{v}^R + {}^N\bar{v}^T\]

where point \(T\) is a point that coincides with \(R\) at that instant.

Combined with the two point theorem for \(T\), you can write:

(76)\[{}^N\bar{v}^R = {}^B\bar{v}^R + {}^N\bar{v}^S + {}^N\bar{\omega}^B \times \bar{r}^{R/S}\]

In our kinetic sculpture example, if the pigeon \(R\) is walking at a distance \(s\) in the \(\hat{b}_x\) direction from the upper right corner, then we can calculate the velocity of the pigeon when observed from the \(N\) reference frame. First establish the position of \(R\):

s = me.dynamicsymbols('s')
t = me.dynamicsymbols._t

R = me.Point('R')
R.set_pos(Q, l*B.z + s*B.x)

The velocity of the pigeon when observed from \(B\) is:

B_v_R = s.diff(t)*B.x
B_v_R
\[\displaystyle \dot{s}\hat{b}_x\]

Now the other terms:

r_S_R = R.pos_from(S)
r_S_R
\[\displaystyle (- w + s)\hat{b}_x + (- c + \frac{l}{2})\hat{b}_z\]
N_v_T = N_v_S + me.cross(B.ang_vel_in(N), r_S_R)
N_v_T
\[\displaystyle - d \dot{\alpha}\hat{a}_y + \left(- c + \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_x + (- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha})\hat{b}_y - \left(- w + s\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z\]

And finally the velocity of the pigeon when observed from \(N\):

N_v_R = B_v_R + N_v_T
N_v_R
\[\displaystyle (\left(- c + \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha} + \dot{s})\hat{b}_x + (- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha})\hat{b}_y - \left(- w + s\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z - d \dot{\alpha}\hat{a}_y\]

There is a method v1pt_theory() that does this calculation. It does require that the point \(S\)’s, in our case, velocity is fixed in \(B\) before making the computation:

S.set_vel(B, 0)
R.v1pt_theory(S, N, B)
\[\displaystyle (\left(- c + \frac{l}{2}\right) \sin{\left(\beta \right)} \dot{\alpha} + \dot{s})\hat{b}_x + (- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha})\hat{b}_y - \left(- w + s\right) \sin{\left(\beta \right)} \dot{\alpha}\hat{b}_z - d \dot{\alpha}\hat{a}_y\]

Translational Acceleration

The acceleration of point \(P\) in reference frame \(A\) is defined as

(77)\[{}^A\bar{a}^P := \frac{{}^A d {}^A\bar{v}^P}{dt}\]

Using SymPy Mechanics, the acceleration of a point in a reference frame can be calculated with acc():

S.acc(N)
\[\displaystyle d \dot{\alpha}^{2}\hat{a}_x - d \ddot{\alpha}\hat{a}_y\]

Acceleration Two Point Theorem

The two point theorem above has a corollary for acceleration. Starting with the velocity theorem:

(78)\[{}^N\bar{v}^S = {}^N\bar{v}^P + {}^N\bar{\omega}^A \times \bar{r}^{S/P}\]

the acceleration can be found by applying the definition of acceleration:

(79)\[\begin{split}{}^N\bar{a}^S & = \frac{{}^N d\left({}^N\bar{v}^P\right)}{dt} + \frac{{}^N d \left( {}^N\bar{\omega}^A \times \bar{r}^{S/P}\right)}{dt} \\ & = {}^N\bar{a}^P + \frac{{}^N d \left( {}^N\bar{\omega}^A \right)}{dt} \times \bar{r}^{S/P} + {}^N\bar{\omega}^A \times \frac{{}^N d \left(\bar{r}^{S/P}\right)}{dt} \\ & = {}^N\bar{a}^P + {}^N\bar{\alpha}^A \times\bar{r}^{S/P} + {}^N\bar{\omega}^A\times\left({}^N\bar{\omega}^A \times\bar{r}^{S/P}\right)\end{split}\]

This presentation of the acceleration shows the tangential component of acceleration:

(80)\[{}^N\bar{\alpha}^A \times\bar{r}^{S/P}\]

\({}^N\bar{\alpha}^A\) can be calculated with ang_acc_in():

me.cross(A.ang_acc_in(N), S.pos_from(P))
\[\displaystyle - d \ddot{\alpha}\hat{a}_y\]

The tangential component is always tangent to the motion path of \(P\). The last term is the radial component of acceleration, also called centripetal acceleration:

(81)\[{}^N\bar{\omega}^A\times\left({}^N\bar{\omega}^A \times\bar{r}^{S/P}\right)\]

which can also be calculated using the methods of with Point and ReferenceFrame:

me.cross(A.ang_vel_in(N), me.cross(A.ang_vel_in(N), S.pos_from(P)))
\[\displaystyle d \dot{\alpha}^{2}\hat{a}_x\]

This acceleration component is always normal to the motion path of \(P\).

Lastly, a2pt_theory() calculates the acceleration using this theorem with:

S.a2pt_theory(P, N, A)
\[\displaystyle d \dot{\alpha}^{2}\hat{a}_x - d \ddot{\alpha}\hat{a}_y\]

where \(S\) and \(P\) are fixed in \(A\) and the velocity is desired in \(N\).

Exercise

Calculate the acceleration of point \(Q\) with the two point theorem.

Acceleration One Point Theorem

The velocity one point theorem also can be time differentiated to see its acceleration form. Starting with the expanded one point theorem for velocity:

(82)\[{}^N\bar{v}^R = {}^B\bar{v}^R + {}^N\bar{v}^S + {}^N\bar{\omega}^B \times \bar{r}^{R/S}\]

and taking the time derivative in the frame \(N\) the corollary formula for acceleration can be derived:

(83)\[\begin{split}{}^N\bar{a}^R & = \frac{{}^Nd {}^B\bar{v}^R}{dt} + \frac{{}^Nd {}^N\bar{v}^S}{dt} + \frac{{}^Nd {}^N\bar{\omega}^B \times \bar{r}^{R/S}}{dt} \\ & = \frac{{}^Nd {}^N\bar{v}^R }{dt} + {}^N\bar{\omega}^B \times {}^N\bar{v}^R + {}^N\bar{a}^S + \frac{{}^Nd {}^N\bar{\omega}^B}{dt} \times \bar{r}^{R/S} + {}^N\bar{\omega}^B \times \frac{{}^Nd \bar{r}^{R/S}}{dt} \\ & = {}^B\bar{a}^R + {}^N\bar{\omega}^B \times {}^B\bar{v}^R + {}^N\bar{a}^S + {}^N\bar{\alpha}^B \times \bar{r}^{R/S} + {}^N\bar{\omega}^B \times \left( {}^B\bar{v}^T + {}^N\bar{\omega}^B \times \bar{r}^{R/S} \right) \\ & = {}^B\bar{a}^R + 2{}^N\bar{\omega}^B \times {}^B\bar{v}^R + {}^N\bar{a}^S + {}^N\bar{\alpha}^B \times \bar{r}^{R/S} + {}^N\bar{\omega}^B \times \left( {}^N\bar{\omega}^B \times \bar{r}^{R/S} \right)\end{split}\]

One of my dynamics professors, Dean Karnopp, liked to call this equation the “five term beast”, as it is about the nastiest equation that shows up in dynamics. Looking carefully at this form, the result of the two point theorem is embedded, so this is equivalent to:

(84)\[{}^N\bar{a}^R = {}^B\bar{a}^R + {}^N\bar{a}^T + 2{}^N\bar{\omega}^B \times {}^B\bar{v}^R\]

where \(T\) is again the point fixed at \(R\) in this instant of time. The tangential and centripetal acceleration terms are present in \({}^N\bar{a}^T\). The term \(2{}^N\bar{\omega}^B \times {}^B\bar{v}^R\) is the Coriolis acceleration that arises from \(R\) moving in the rotating frame \(B\).

The three terms in Eq. (84) can be calculated for our pigeon like so:

B_a_R = R.acc(B)
B_a_R
\[\displaystyle \ddot{s}\hat{b}_x\]
N_a_T = R.a2pt_theory(S, N, B)
N_a_T
\[\displaystyle d \dot{\alpha}^{2}\hat{a}_x - d \ddot{\alpha}\hat{a}_y + (\left(- c + \frac{l}{2}\right) \left(\sin{\left(\beta \right)} \ddot{\alpha} + \cos{\left(\beta \right)} \dot{\alpha} \dot{\beta}\right) - \left(- w + s\right) \sin^{2}{\left(\beta \right)} \dot{\alpha}^{2} - \left(- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha}\right) \cos{\left(\beta \right)} \dot{\alpha})\hat{b}_x + (\left(- c + \frac{l}{2}\right) \sin{\left(\beta \right)} \cos{\left(\beta \right)} \dot{\alpha}^{2} - \left(- c + \frac{l}{2}\right) \ddot{\beta} + \left(- w + s\right) \left(- \sin{\left(\beta \right)} \dot{\alpha} \dot{\beta} + \cos{\left(\beta \right)} \ddot{\alpha}\right) + \left(- w + s\right) \sin{\left(\beta \right)} \dot{\alpha} \dot{\beta})\hat{b}_y + (- \left(- c + \frac{l}{2}\right) \sin^{2}{\left(\beta \right)} \dot{\alpha}^{2} - \left(- w + s\right) \left(\sin{\left(\beta \right)} \ddot{\alpha} + \cos{\left(\beta \right)} \dot{\alpha} \dot{\beta}\right) + \left(- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha}\right) \dot{\beta})\hat{b}_z\]
2*me.cross(B.ang_vel_in(N), R.vel(B))
\[\displaystyle 2 \cos{\left(\beta \right)} \dot{\alpha} \dot{s}\hat{b}_y - 2 \sin{\left(\beta \right)} \dot{\alpha} \dot{s}\hat{b}_z\]

The a1pt_theory() method can also be used to make this calculation:

R.a1pt_theory(S, N, B)
\[\displaystyle (\left(- c + \frac{l}{2}\right) \left(\sin{\left(\beta \right)} \ddot{\alpha} + \cos{\left(\beta \right)} \dot{\alpha} \dot{\beta}\right) - \left(- w + s\right) \sin^{2}{\left(\beta \right)} \dot{\alpha}^{2} - \left(- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha}\right) \cos{\left(\beta \right)} \dot{\alpha} + \ddot{s})\hat{b}_x + (\left(- c + \frac{l}{2}\right) \sin{\left(\beta \right)} \cos{\left(\beta \right)} \dot{\alpha}^{2} - \left(- c + \frac{l}{2}\right) \ddot{\beta} + \left(- w + s\right) \left(- \sin{\left(\beta \right)} \dot{\alpha} \dot{\beta} + \cos{\left(\beta \right)} \ddot{\alpha}\right) + \left(- w + s\right) \sin{\left(\beta \right)} \dot{\alpha} \dot{\beta} + 2 \cos{\left(\beta \right)} \dot{\alpha} \dot{s})\hat{b}_y + (- \left(- c + \frac{l}{2}\right) \sin^{2}{\left(\beta \right)} \dot{\alpha}^{2} - \left(- w + s\right) \left(\sin{\left(\beta \right)} \ddot{\alpha} + \cos{\left(\beta \right)} \dot{\alpha} \dot{\beta}\right) + \left(- \left(- c + \frac{l}{2}\right) \dot{\beta} + \left(- w + s\right) \cos{\left(\beta \right)} \dot{\alpha}\right) \dot{\beta} - 2 \sin{\left(\beta \right)} \dot{\alpha} \dot{s})\hat{b}_z + d \dot{\alpha}^{2}\hat{a}_x - d \ddot{\alpha}\hat{a}_y\]

The acceleration of the pigeon when viewed from \(N\) is no flapping matter.