Rigid Body Motion

Μηχανική

14 Νοε 2013 (πριν από 4 χρόνια και 5 μήνες)

86 εμφανίσεις

computer graphics & visualization

Rigid Body Motion

A Comprehensive Introduction

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Motivation

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Motiviation

Rigid Body Motion is all around us

Rigid Body Motion is
the

game physics concept in use

Bullet,
Havok
, ODE all use this concept

You

need to know about it if you want to work with and
understand physics engines!

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Overview

1.
Short Math Primer

1.
Vector

2.
Dot Product

3.
Cross Product

4.
Calculus

2.
Kinematics

1.
Linear Motion

2.
Angular Motion in 2D

3.
Statics

1.
Force

2.
Newton’s Laws of Motion

3.
Rigid Bodies

4.
Field Forces

5.
Contact Forces

6.
Moment

7.
Net Force and Net Torque

8.
Center of Mass

4.
Kinetics

1.
Linear Momentum

2.
Angular Momentum

3.
Integration

4.
Inertia Tensor in 2D

5.
Inertia Tensor in 3D

5.
Bibliography

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Rigid Body

A
rigid body (
Starrkörper
)

is a solid body that is not
deformable.

Rigid Body

Soft Body

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Game Engine Example

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Short Math Primer

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Vector

A vector is a matrix with a single column:

or

denotes the magnitude of the vector.

This is just a stub to show the notation
:
-

)

You all know everything about vertices and matrices from your
Linear Algebra lecture.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Dot Product

The
dot product (Skalarproduct)

of two vectors

is
the scalar

, where

is the angle between the
two vectors.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Cross Product

The
cross product (Kreuzprodukt)

of two vectors

is a vector that is
perpendicular

to both

and

.
The length of the resulting vector is

, where

is the angle between

and

.

You can use the right
-
hand rule (Rechte
-
Hand
-
Regel) to visualize
the cross product.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Cross Product

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Branches

of Mechanics

There are
three
branches

of mechanics that are of interest to us:

Definition

Kinematics

(Kinematik)

describes the motion of objects without
regard for the reason of their movement.

(from Wikipedia)

Definition

Dynamics
(Dynamik
)

or also called
Kinetics (
Kinetik
)

examines the
correlation between an object‘s motion and the reasons for it.

(from Wikipedia)

Definition

Statics (
Statik
)

analyzes the motion of objects without regard for
the reason of their movement.

(from Wikipedia)

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Kinematics

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Linear Motion

Let’s look at the movement of a simple
particle (
Massenpunkt
)
.
We identify a particle

by its
position

.

The
velocity

of a particle

is its change of position over time:

The
speed (Tempo)

of a particle is simply the magnitude of its
velocity:

.

Likewise the
acceleration

is the change of velocity over time:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Angular Motion in 2D

Imagine that a particle moves on a circle around the origin.

We can exactly describe the particle’s position by the
angle

between the particle and the x
-
axis at any moment of
time.

Like with

linear motion
,

we can examine the change of

over
time and get the
angular velocity

:

Similarly the
angular acceleration

is the change of

over time:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Example: Circular Movement

And               because

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Example: Circular Movement in 3D

If we look at the same rotation in 3D
nothing changes.

We give      a direction as rotation axis and
set:

Since               it follows that:

with

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Example: Rotation around an Axis in 3D

In the general case we have              , so
does our equation fail?

with

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Angular Motion in 3D

In 3D we can’t use a single angle to describe
the orientation. Instead we use a rotation
matrix     .

The derivative of a matrix is again a matrix,
so instead we need something simpler:

The change of the rotation matrix from one
moment to the next is nothing else but a
rotation itself.

We can describe any rotation using the
rotation axis      with its magnitude being the
amount of rotation.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Angular Motion in 3D

It can be shown that                          (with a column
-
wise cross
product).

Now we know how to get from      to      and can use the formulas
that we have deduced when rotating a point around an axis:

to convert from angular velocity to linear velocity.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Summary

Linear Motion:

Position

Velocity

Acceleration

Angular Motion:

Orientation     or

Angular Velocity

Angular Acceleration

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Statics

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Force

A
force (Kraft)
is any influence that causes a free body
to undergo an acceleration.

A force has both
magnitude

and
direction
, making it a
vector quantity.

(from Wikipedia)

It also has a
point of action (Angriffspunkt)
: the point
where the force is applied; and a
line of action
(Wirkungslinie)
: the line along the force’s direction
through the point of action.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Force

line of action

body

force

point of action

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Newton’s Laws of Motion

Second Law

The acceleration of a body is proportional to the net
force acting on the body and this acceleration is in the
same direction as the net force.

Third Law

For every force acting on a body, there is an equal and
opposite reacting force.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Rigid Bodies

A
rigid body (
Starrkörper
)

is a solid body that is not
deformable.

If we take a body to be made
-
up of particles, then the definition
means that the distance between any two particles always
remains constant.

This, of course, is an idealization, because
every body

can be
deformed if enough stress is applied.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Rigid Bodies

Because of this rigidness for a rigid body only its position and
orientation in space need to be stored.

They suffice to describe its instantaneous state.

Another special property of rigid bodies is that the point of action
for a force is irrelevant

only the line of action matters.

Rigid Body

Soft Body

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Rigid Bodies

Particle Model

We already know particles. They have mass but no orientation. A
group of particles, however, has orientation.

We can use a
set of particles

to model a rigid body. Each
particle has its own properties: mass, position, velocity, etc. But
they are all linked together by their constant distance to each
other. We will use this to deduce many important properties of
rigid bodies.

We will see later that many properties of the whole rigid body are
made up of the sum of its particles.

The mass of the rigid body for example is:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Field Forces

A

field force (
Feldkraft
)

is a force that is not transferred
through direct contact but through a

force field
(
Kraftfeld
)
.

Example: Gravity

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Contact Forces

A

contact force (
Kontaktkraft
)

is a force that is
transmitted through a
contact point
of two bodies that
touch.

Because of                                       both bodies
apply the same force (but in opposite
directions) on each other.

It consists of a
normal force (
Normalkraft
)

perpendicular to the contact plane and
a
friction force (
Reibungskraft
)

that lies on
the contact plane.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Moment (Motivation)

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Law of the Lever

A level is in equilibirum if the forces applied on each
end is inversely proportional to the distance of the
points of action to the pivot:

Law of the Lever (Hebelgesetz)

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Moment

Moment (
Drehmoment
)

is a measure for the ability of
a force to rotate an object.

It is always defined with respect to a point of reference

:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Moment

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Net Force and Net Torque

If we have forces

(with points of action

etc), then we can calculate the net force and net
moment in respect to a point of reference

with:

That is, we can simply add up the forces and moments to get the
net force and net moment.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Center of Mass (Motivation)

What is a good choice for our point of reference?

It would be nice to choose it in such a way that applying a force to
it won’t induce any actual moment on an unconstrained rigid
body, that is                .

This means that every particle as well as the whole rigid body will
experience the same acceleration. So if a force      is applied to the
point of reference, the whole rigid body should be accelerated by
.       is the mass of the whole rigid body,
ie

.

Then:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Center of Mass (Deduction)

Because the last statement has to hold for any force

, it follows
that

, that is:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Center of Mass

The
center of mass ((Masse
-
)
Schwerpunkt
)

of a
rigid body is the mass
-
weighted average of all particle
positions:

The center of mass of a rigid body moves as if the
whole mass of the rigid body were focused in it and all
external forces acted on it.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Kinetics

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Linear Momentum

The
linear momentum (
Impuls
)

of a particle

is
defined as:

The linear momentum of a rigid body is the sum of the
linear momentums of all its particles:

The linear momentum of a system of bodies is a
conserved quantity
(
Erhaltungsgröße
)
,
ie

the total amount never changes inside the
system.

This is called
conservation of momentum (
Impulserhaltung
)
.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Linear Momentum and Force

Look at the derivative of

:

But

is constant and thus

.

We get:

Derivative of Linear Momentum = Force

The linear momentum changes according to the
applied force:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Newton’s First Law of Motion

Every object in a state of uniform motion tends to
remain in that state of motion unless an external force
is applied to it. This is the concept of
inertia (
Trägheit
).

Proof:

This follows directly from the conservation of momentum:

If

then

, and then

and since the
mass

is constant, we see that the velocity is constant, too.

Newton’s First Law

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Angular

Momentum

Angular momentum is a
conserved quantity
, too, that is it stays
constant for a system of particles (except if outer forces are
applied).

The
angular momentum (
Drehimpuls
)

of a particle

is defined as:

with respect to a point of reference

.

The angular momentum of a rigid body is the sum of
the angular momentum of its particles:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Angular Momentum and Moment

Angular momentum changes according to the applied
momentum (around the center of mass):

Derivative of Angular Momentum = Moment

Proof Sketch:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Integration

The problem is that you know the net moment and net torque, but
want to know the linear and angular momentum.

From the differential equation we need to evaluate:

The integration steps in a rigid body simulation can be as difficult
and complicated as you want.

To solve this you can
eg

use a simple Euler step:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Summary

Linear Momentum

Angular Momentum

Conservation of Linear Momentum

Conservation of Angular Momentum

Linear Momentum = Integrated Force:

Angular Momentum = Integrated Moment:

Integration = actual problem

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Linear Momentum and Linear Velocity

From the definition of linear momentum                     we can directly
identify                .

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Angular Momentum and Angular Velocity

We know:

.

depends on the angular velocity      indirectly.

Using this fact, it is possible to transform the equation to

,

where      is the
inertia tensor (
Trägheitstensor
)
.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Inertia

Tensor in 2D

In 2D the moment definition can be simplified
to scalars (like we did for the moment):

with

If we look at an angular motion, it can also be
thought of as circular motion around the
center of gravity and since

is collinear with

, we know that it is perpendicular to

, this
gives

. From the slide about circular
movement we also know that

.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Inertia

Tensor in 2D

with

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Definition

Inertia Tensor in 2D

In 2D the inertia tensor is just a scalar. It is the squared
distance of all particles to the center of gravity
weighted by their mass:

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Inertia Tensor in 3D

In 3D the inertia tensor is a

matrix:

The deduction is similar to the 2D case, only more heavy
-
handed.

Definition

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Intuition behind the Inertia Tensor

It is possible to rotate many objects in such a way that

is
diagonal.

The bigger the diagonal entry the more inert the object is
regarding a rotation around that axis.

The smaller

is in total, the faster the object’s rotation axis can
change.

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

for each (RigidBody* body in scene
-
>rigidBodies) {

auto contacts = scene
-
>determineContacts(body);

auto fieldForces = scene
-
>determineFieldForces(body);

auto totalForce = computeTotalForce(contacts, fieldForces);

auto totalMoment = computeTotalMoment(contacts);

body
-
>linearMomentum.integrate(timeStep, totalForce);

body
-
>angularMomentum.integrate(timeStep, totalMoment);

body
-
>velocity = body
-
>linearMomentum / body
-
>mass;

body
-
>angularVelocity = body
-
>invInertiaTensor *

body
-
>angularMomentum;

body
-
>position.integrate(timeStep, body
-
>velocity);

body
-
>rotation.integrate(timeStep, body
-
>angularVelocity);

}

Rigid Body Update Code

Where We Are

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Questions?

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization

Bibliography

Technische

Mechanik

1 & 3” by Gross,
Hauger
,
Schröder

& Wall

“Physically Based Modeling” by Pixar (SIGGRAPH 2001)

“Mathematics for 3D Game Programming & Computer
Graphics” by Eric
Lengyel

“Physics for Game Developers” by David M. Bourg

“Game Physics” by David H.
Eberly

Rigid Body Motion

Andreas Kirsch

computer

graphics & visualization