In the last video we derived the recursive Newton-Euler inverse dynamics algorithm for

open chains.

In this video we address the forward dynamics, which solves for theta-double-dot given the

joint forces and torques tau, the joint positions and velocities, and optionally an end-effector

wrench F_tip.

We can solve the forward dynamics using the inverse dynamics algorithm.

First, we use the inverse dynamics to calculate the joint forces and torques if the joint

accelerations theta-double-dot are zero.

This gives us the Coriolis terms, the gravity terms, and the end-effector wrench terms of

the joint forces and torques.

Next, we use the inverse dynamics to solve for the mass matrix M of theta.

To do this, we call the inverse dynamics algorithm n times, once for each joint, and each time

we set gravity, the end-effector wrench, the joint velocities, and all joint accelerations

except one, equal to zero.

We set the i'th joint acceleration to be one.

Then the joint torque vector tau found by the inverse dynamics algorithm is the same

as the i'th column of the mass matrix M. By calling the inverse dynamics algorithm n times,

we can construct the mass matrix M.

Now referring back to the original problem statement, by calling the inverse dynamics

algorithm n-plus-1 times, we have the mass matrix M of theta as well as c of theta, theta-dot,

g of theta, and J-transpose times F_tip.

We are given tau, so we just need to solve an equation of the form M times theta-double-dot

equals a known vector.

We can use any efficient algorithm to solve this for theta-double-dot.

The forward dynamics can be numerically integrated to simulate the motion of a robot.

At each timestep, you use the forward dynamics to calculate the joint accelerations, then

use the accelerations and the current joint positions and velocities to calculate the

joint positions and velocities at the next timestep.

Let's use the forward dynamics to simulate the motion of this 6R arm as it falls in gravity

with zero joint torques applied by the motors.

The motion may look somewhat unrealistic, because we have not modeled friction in the

joints.

There are many approximate models of friction, and you can add your favorite model of friction

torque, replacing the zero joint torques by joint torques that depend on the joint velocities.

One advantage of having zero friction and zero joint torques, however, is that we know

that no energy is dissipated.

Therefore, the total energy of the robot, the kinetic energy plus the potential energy,

must be conserved.

This gives us one test of whether our simulation is working properly.

Let's watch the simulation one more time.

Notice that the arm swings to approximately the same maximum height each time, indicating

that the potential energy at the end of each swing is approximately the same.

In fact, if we plotted the sum of the kinetic and potential energy as a function of time,

we would see it is nearly constant.

This is one indication that our simulator is working properly.

Because of numerical integration drift, the total energy will slowly change with time,

but this effect can be mitigated by using smaller integration timesteps or more complex

numerical integration procedures.

Now that we can derive the forward and inverse dynamics of an open-chain robot, in the last

few videos of Chapter 8 we address advanced concepts, such as dynamics in task space,

dynamics of robots subject to constraints such as loop-closure constraints, and dynamics

considering the details of geared motors driving the joints.