You are on page 1of 50

Rigid Body Dynamics

CSE169: Computer Animation Instructor: Steve Rotenberg UCSD, Winter 2008

Cross Product
i a b = ax bx j ay by k az bz a z bx a x bz a x by a y bx

a b = a y bz a z by

Cross Product
a b = a y bz a z by

a z bx a x bz

a x by a y bx

c = ab c x = 0 bx a z by + a y bz c y = a z bx + 0 by a x bz c z = a z bx + a x by + 0 bz

Cross Product
c x = 0 bx a z by + a y bz c y = a z bx + 0 by a x bz c z = a z bx + a x by + 0 bz cx 0 c = a y z c z a y az 0 ax a y bx a x by 0 bz

Cross Product
cx 0 c = a y z c z a y ab = a b 0 a = az a y 0 ax az 0 ax a y bx a x by 0 bz

az

ay ax 0

Derivative of a Rotating Vector


Lets say that vector r is rotating around the origin, maintaining a fixed distance At any instant, it has an angular velocity of

dr = r dt

Derivative of Rotating Matrix


If matrix A is a rigid 3x3 matrix rotating with angular velocity This implies that the a, b, and c axes must be rotating around The derivatives of each axis are xa, xb, and xc, and so the derivative of the entire matrix is:

dA = A dt

= A

Product Rule
The product rule defines the derivative of products

db d (ab ) da = b+a dt dt dt dc db d (abc ) da bc + a c + ab = dt dt dt dt

Product Rule
It can be extended to vector and matrix products as well

d (a b ) da db = b + a dt dt dt d (a b ) da db = b + a dt dt dt d ( A B ) dA dB = B + A dt dt dt

Dynamics of Particles

Kinematics of a Particle
x dx v= dt 2 dv d x a= = 2 dt dt position velocity acceleration

Mass, Momentum, and Force


m p = mv dp = ma f= dt mass momentum force

Moment of Momentum
The moment of momentum is a vector

L = rp
Also known as angular momentum (the two terms mean basically the same thing, but are used in slightly different situations) Angular momentum has parallel properties with linear momentum In particular, like the linear momentum, angular momentum is conserved in a mechanical system

Moment of Momentum
L is the same for all three of these particles

p
r3

r2

L = rp

r1

Moment of Momentum
L is different for all of these particles

p p L = rp r2 p
r3

r1

Moment of Force (Torque)


The moment of force (or torque) about a point is the rate of change of the moment of momentum about that point

dL = dt

Moment of Force (Torque)


L = rp dL dr dp = = p + r dt dt dt = vp + rf = v (mv ) + r f = rf

Rotational Inertia
L=rxp is a general expression for the moment of momentum of a particle In a case where we have a particle rotating around the origin while keeping a fixed distance, we can re-express the moment of momentum in terms of its angular velocity

Rotational Inertia
L = rp L = r (mv ) = mr v

L = mr ( r ) = mr (r ) L = mr r L = I I = mr r

Rotational Inertia
I = mr r 0 rz ry 0 rz ry 0 rx rz 0 rx I = m rz ry rx 0 ry rx 0 2 2 ry rz rx ry rx rz 2 2 ry rz rx rz I = m rx ry 2 2 rx rz ry rz rx ry

Rotational Inertia
m ry2 + rz2 I = mrx ry mrx rz

mrx ry 2 2 m rx + rz mry rz

mrx rz mry rz 2 2 m rx + ry

L = I

Rotational Inertia
The rotational inertia matrix I is a 3x3 matrix that is essentially the rotational equivalent of mass It relates the angular momentum of a system to its angular velocity by the equation

L = I
This is similar to how mass relates linear momentum to linear velocity, but rotation adds additional complexity

p = mv

Systems of Particles
mtotal = mi
i =1 n

total mass of all particles

x cm

m x = m
i i

position of center of mass

p cm = p i = mi v i

total momentum

Velocity of Center of Mass


v cm dx cm d = = dt dt

m x m
i i

v cm v cm

dx i mi dt = = mi p cm = mtotal

m v m
i i

p cm = mtotal v cm

Force on a Particle
The change in momentum of the center of mass is equal to the sum of all of the forces on the individual particles This means that the resulting change in the total momentum is independent of the location of the applied force

p cm = p i

dp cm d p i dp i = = = f i dt dt dt

Systems of Particles
The total moment of momentum around the center of mass is:

L cm = (x i x cm ) p i

L cm = ri p i

Torque in a System of Particles


L cm = ri p i cm cm cm

dL cm d ri p i = = dt dt d (ri pi ) = dt = (ri f i )

Systems of Particles
We can see that a system of particles behaves a lot like a particle itself It has a mass, position (center of mass), momentum, velocity, acceleration, and it responds to forces

f cm = f i
We can also define its angular momentum and relate a change in system angular momentum to a force applied to an individual particle

cm = (ri f i )

Internal Forces
If forces are generated within the particle system (say from gravity, or springs connecting particles) they must obey Newtons Third Law (every action has an equal and opposite reaction) This means that internal forces will balance out and have no net effect on the total momentum of the system As those opposite forces act along the same line of action, the torques on the center of mass cancel out as well

Kinematics of Rigid Bodies

Kinematics of a Rigid Body


For the center of mass of the rigid body:

x cm dx cm v cm = dt 2 dv cm d x cm = a cm = 2 dt dt

Kinematics of a Rigid Body


For the orientation of the rigid body:

A d = dt

3x3 orientation matrix angular velocity angular acceleration

Offset Position
Lets say we have a point on a rigid body If r is the world space offset of the point relative to the center of mass of the rigid body, then the position x of the point in world space is:

x = x cm + r

Offset Velocity
The velocity of the offset point is just the derivative of its position

x = x cm + r dx dx cm dr v= = + dt dt dt v = v cm + r

Offset Acceleration
The offset acceleration is the derivative of the offset velocity

v = v cm + r dv dv cm d dr a= = + r + dt dt dt dt a = a cm + r + ( r )

Kinematics of an Offset Point


The kinematic equations for an fixed point on a rigid body are:

x = x cm + r a = a cm + r + ( r ) v = v cm + r

Dynamics of Rigid Bodies

Rigid Bodies
We treat a rigid body as a system of particles, where the distance between any two particles is fixed We will assume that internal forces are generated to hold the relative positions fixed. These internal forces are all balanced out with Newtons third law, so that they all cancel out and have no effect on the total momentum or angular momentum The rigid body can actually have an infinite number of particles, spread out over a finite volume Instead of mass being concentrated at discrete points, we will consider the density as being variable over the volume

Rigid Body Mass


With a system of particles, we defined the total mass as:
n

m = mi
i =1

For a rigid body, we will define it as the integral of the density over some volumetric domain

m = d

Rigid Body Center of Mass


The center of mass is:

x cm

xd = d

Rigid Body Rotational Inertia


ry2 + rz2 d I = rx ry d rx rz d I xx I = I xy I xz I xy I yy I yz I xz I yz I zz

rx rz d 2 2 rx + rz d ry rz d 2 2 ry rz d rx + ry d rx ry d

Diagonalization of Rotational Inertial


I xx I = I xy I xz I xy I yy I yz I xz I yz I zz I x I0 = 0 0 0 Iy 0 0 0 Iz

I = A I 0 AT

where

Derivative of Rotational Inertial


dI dt dI dt dI dt dI dt dI dt d A I0 A = dt

) = dA I
dt

dA 0 A + A I0 dt
T T

= A I 0 AT + A I 0 ( A ) = I + A I 0 ( A )
T

= I + A I 0 A T T = I + I T = I I

Derivative of Angular Momentum


L = I dL dI d = = + I dt dt dt = ( I I ) + I = I I + I = I + I

Newton-Euler Equations

f = ma = I + I

Applied Forces & Torques


f cg = f i

cg = (ri f i )

1 a= f m 1 = I ( I )

Properties of Rigid Bodies


m
x v a p = mv f = ma

I A L = I = r f = I + I

Rigid Body Simulation


RigidBody { void Update(float time); void ApplyForce(Vector3 &f,Vector3 &pos); private: // constants float Mass; Vector3 RotInertia; // Ix, Iy, & Iz from diagonal inertia // variables Matrix34 Mtx; // contains position & orientation Vector3 Momentum,AngMomentum; // accumulators Vector3 Force,Torque; };

Rigid Body Simulation


RigidBody::ApplyForce(Vector3 &f,Vector3 &pos) { Force += f; Torque += (pos-Mtx.d) x f }

Rigid Body Simulation


RigidBody::Update(float time) { // Update position Momentum += Force * time; Mtx.d += (Momentum/Mass) * time;

// Mtx.d = position

// Update orientation AngMomentum += Torque * time; Matrix33 I = MtxI0MtxT // AI0AT Vector3 = I-1L float angle = || * time; // magnitude of Vector3 axis = ; axis.Normalize(); Mtx.RotateUnitAxis(axis,angle); }

You might also like