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 ˉF=mˉ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ˉvP:=AdˉrP/Odt

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)AˉvP=AdˉrP/Odt=BdˉrP/Odt+AˉωB×ˉrP/O=BˉvP+AˉωB×ˉrP/O

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
(hˆnz, dˆax, wˆbx+(cl2)ˆbz)

Now calculate:

(71)NˉvS=AˉvS+NˉωA×ˉrS/O

S is not moving when observed from A and O is fixed in A so:

(r_O_P + r_P_S).dt(A)
0

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

A.ang_vel_in(N)
˙αˆnz
me.cross(A.ang_vel_in(N), r_O_P + r_P_S)
d˙αˆay

giving NˉvS:

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
d˙αˆay

Similarly for point Q where P is fixed in B:

(r_P_S + r_S_Q).dt(B)
0
me.cross(B.ang_vel_in(N), r_P_S + r_S_Q)
d˙αˆay+(cl2)sin(β)˙αˆbx+(wcos(β)˙α(cl2)˙β)ˆby+wsin(β)˙αˆbz
N_v_Q = (r_P_S + r_S_Q).dt(B) + me.cross(B.ang_vel_in(N), r_P_S + r_S_Q)
N_v_Q
d˙αˆay+(cl2)sin(β)˙αˆbx+(wcos(β)˙α(cl2)˙β)ˆby+wsin(β)˙αˆbz

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 ˉrQ/O is:

Q.pos_from(O)
wˆbx+(cl2)ˆbzdˆax+hˆnz

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ˉvO=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)
(cl2)sin(β)˙αˆbx+(wcos(β)˙α(cl2)˙β)ˆby+wsin(β)˙αˆbzd˙αˆay

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 Bc 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ˉωA and the velocity NˉvP then NˉvS can be calculated if the vector ˉrS/P, which is fixed in A, is known. The following theorem provides a convenient formulation:

(73)NˉvS=NdˉrS/Odt=Nd(ˉrP/O+ˉrS/P)dt=NˉvP+NdˉrS/Pdt=NˉvP+NˉωA×ˉrS/P

For our example kinetic sculpture, both O and P are fixed in N, so NˉvP=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
d˙αˆay

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)
d˙αˆay

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)
d˙αˆay

Both points S and Q are fixed in reference frame B and we just calculated NˉvS, so we can use the two point theorem to find the velocity of Q in a similar fashion by applying:

(74)NˉvQ=NˉvS+NˉωB×ˉrQ/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
d˙αˆay+(cl2)sin(β)˙αˆbx+(wcos(β)˙α(cl2)˙β)ˆby+wsin(β)˙αˆbz

and then with the v2pt_theory():

Q.v2pt_theory(S, N, B)
d˙αˆay+(cl2)sin(β)˙αˆbx+(wcos(β)˙α(cl2)˙β)ˆby+wsin(β)˙αˆbz

Exercise

Calculate the velocity of the center of mass of the plate Bc 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ˉvR=BˉvR+NˉvT

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ˉvR=BˉvR+NˉvS+NˉωB×ˉrR/S

In our kinetic sculpture example, if the pigeon R is walking at a distance s in the ˆbx 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
˙sˆbx

Now the other terms:

r_S_R = R.pos_from(S)
r_S_R
(w+s)ˆbx+(c+l2)ˆbz
N_v_T = N_v_S + me.cross(B.ang_vel_in(N), r_S_R)
N_v_T
d˙αˆay+(c+l2)sin(β)˙αˆbx+((c+l2)˙β+(w+s)cos(β)˙α)ˆby(w+s)sin(β)˙αˆbz

And finally the velocity of the pigeon when observed from N:

N_v_R = B_v_R + N_v_T
N_v_R
((c+l2)sin(β)˙α+˙s)ˆbx+((c+l2)˙β+(w+s)cos(β)˙α)ˆby(w+s)sin(β)˙αˆbzd˙αˆay

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)
((c+l2)sin(β)˙α+˙s)ˆbx+((c+l2)˙β+(w+s)cos(β)˙α)ˆby(w+s)sin(β)˙αˆbzd˙αˆay

Translational Acceleration

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

(77)AˉaP:=AdAˉvPdt

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

S.acc(N)
d˙α2ˆaxd¨αˆay

Acceleration Two Point Theorem

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

(78)NˉvS=NˉvP+NˉωA×ˉrS/P

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

(79)NˉaS=Nd(NˉvP)dt+Nd(NˉωA×ˉrS/P)dt=NˉaP+Nd(NˉωA)dt×ˉrS/P+NˉωA×Nd(ˉrS/P)dt=NˉaP+NˉαA×ˉrS/P+NˉωA×(NˉωA×ˉrS/P)

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

(80)NˉαA×ˉrS/P

NˉαA can be calculated with ang_acc_in():

me.cross(A.ang_acc_in(N), S.pos_from(P))
d¨αˆay

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ˉωA×(NˉωA×ˉrS/P)

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)))
d˙α2ˆax

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)
d˙α2ˆaxd¨αˆay

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ˉvR=BˉvR+NˉvS+NˉωB×ˉrR/S

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

(83)NˉaR=NdBˉvRdt+NdNˉvSdt+NdNˉωB×ˉrR/Sdt=NdNˉvRdt+NˉωB×NˉvR+NˉaS+NdNˉωBdt×ˉrR/S+NˉωB×NdˉrR/Sdt=BˉaR+NˉωB×BˉvR+NˉaS+NˉαB×ˉrR/S+NˉωB×(BˉvT+NˉωB×ˉrR/S)=BˉaR+2NˉωB×BˉvR+NˉaS+NˉαB×ˉrR/S+NˉωB×(NˉωB×ˉrR/S)

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ˉaR=BˉaR+NˉaT+2NˉωB×BˉvR

where T is again the point fixed at R in this instant of time. The tangential and centripetal acceleration terms are present in NˉaT. The term 2NˉωB×BˉvR 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
¨sˆbx
N_a_T = R.a2pt_theory(S, N, B)
N_a_T
d˙α2ˆaxd¨αˆay+((c+l2)(sin(β)¨α+cos(β)˙α˙β)(w+s)sin2(β)˙α2((c+l2)˙β+(w+s)cos(β)˙α)cos(β)˙α)ˆbx+((c+l2)sin(β)cos(β)˙α2(c+l2)¨β+(w+s)(sin(β)˙α˙β+cos(β)¨α)+(w+s)sin(β)˙α˙β)ˆby+((c+l2)sin2(β)˙α2(w+s)(sin(β)¨α+cos(β)˙α˙β)+((c+l2)˙β+(w+s)cos(β)˙α)˙β)ˆbz
2*me.cross(B.ang_vel_in(N), R.vel(B))
2cos(β)˙α˙sˆby2sin(β)˙α˙sˆbz

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

R.a1pt_theory(S, N, B)
((c+l2)(sin(β)¨α+cos(β)˙α˙β)(w+s)sin2(β)˙α2((c+l2)˙β+(w+s)cos(β)˙α)cos(β)˙α+¨s)ˆbx+((c+l2)sin(β)cos(β)˙α2(c+l2)¨β+(w+s)(sin(β)˙α˙β+cos(β)¨α)+(w+s)sin(β)˙α˙β+2cos(β)˙α˙s)ˆby+((c+l2)sin2(β)˙α2(w+s)(sin(β)¨α+cos(β)˙α˙β)+((c+l2)˙β+(w+s)cos(β)˙α)˙β2sin(β)˙α˙s)ˆbz+d˙α2ˆaxd¨αˆay

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