# Joint-Space Motion Model

The joint-space motion model characterizes the motion of a manipulator under closed-loop joint-space position control, as used in the `jointSpaceMotionModel`

object and Joint Space Motion Model block.

Robot manipulators are typically position-controlled devices. For joint-space control, you specify the vector of joint angles or positions, $$q$$, that tracks a reference configuration, $${q}_{ref}$$. You can do this by using closed-loop control on the robot joints and using the motion model to simulate the behavior of a robot under this control.

For this approach to most closely approximate the motion of the actual system, you must accurately represent the dynamics of the controller and plant. This topic covers the methods of modeling the behavior of the robot under closed-loop joint-space position control:

As a system subject to Computed Torque Control

As a system subject to PD Control

As a system with Independent Joint Motion

### Background

#### Joint-Space vs. Task-Space Motion Models

Generally, there are two categories of robot position control:

Joint-Space motion control — In this case, the position input of the robot is specified as a vector of joint angles or positions, known as the robot's

*joint configuration,*$$q$$. The controller tracks a reference configuration, $${q}_{ref}$$, and returns the actual joint configuration $$q$$. This is also known as*configuration-space*control.Task-Space

*operational-space*control.

The following figures shows the different types of inputs/outputs in these two motion control categories.

This topic page is specific to joint-space motion control, as used in the `jointSpaceMotionModel`

object and Joint Space Motion Model block. For task-space motion models, see the `taskSpaceMotionModel`

object. For an example that covers the difference between task-space and joint-space control in greater detail, see Plan and Execute Task- and Joint-Space Trajectories Using KINOVA Gen3 Manipulator.

#### Usage in MATLAB**®** and Simulink**®**

The joint-space motion model can be represented in MATLAB or Simulink.

In Simulink, the Joint Space Motion model block accepts the reference inputs and optional external force when applicable, and returns the joint configuration, velocity, and acceleration. The block handles integration, so no additional integration is required.

In MATLAB, the

`jointSpaceJointModel`

system object models the closed-loop motion. The`derivative`

method returns derivatives of the joint configuration, velocity, and acceleration at each instant in time, so you must use an ODE solver or equivalent external integration method to simulate the motion in time.

For a more specific overview, refer to the associated documentation pages.

### State

The joint-space motion model state consists of these values:

$$q$$ — Robot joint configuration, as a vector of joint positions. Specified in $\mathrm{rad}$ for revolute joints and $\mathit{m}$ for prismatic joints.

$$\underset{}{\overset{\dot{}}{q}}$$ — Vector of joint velocities in $$rad\cdot {s}^{-1}$$ for revolute joints and $$m\cdot {s}^{-1}$$ for prismatic joints

$$\underset{}{\overset{\xa8}{q}}$$ — Vector of joint accelerations in $$rad\cdot {s}^{-2}$$ for revolute joints or $$m\cdot {s}^{-2}$$ for prismatic joints

### Equations of Motion for the Types of Closed-Loop Joint-Space Motion

The joint-space motion model is used when you need a low-fidelity model of your system under closed-loop control and the inputs are specified as joint configuration, velocity, and acceleration. The motion model includes three ways to model its overall behavior:

As a system under Computed Torque Control —

As a system under PD Control —

As a system with Independent Joint Motion —

To set these different motion types, use the MotionType property of the `jointSpaceMotionModel`

object. These motion types are not exhaustive, but they do provide a set of options to use when approximating the closed-loop behavior of your system. For details and suggestions on when to use which model, see the sections below.

In the following sections, the equations of motion for each model are introduced, in order of decreasing complexity. Here, complexity is a measure of how much computation occurs in a given motion model. A high-complexity varaition models dynamics subject to a fairly advanced controller by directly simulating the controller and dynamics within the loop, while a low complexity model uses simplified dynamics to represent the overall error behavior.

#### Notation & Terminology

Many of the equations of motion for the closed-loop system are dervied from the standard rigid body Robot Dynamics, which defines the open-loop motion of the robot. Additionally, the equations frequently use a *tilde* to indicate error dynamics, e.g. $$\underset{}{\overset{\sim}{q}}=q-{q}_{ref}$$.

#### Computed Torque Control

When the motion model is defined as a robot subject to computed torque control, the motion model uses standard rigid body Robot Dynamics, but the generalized force input is given by a control law that compensates for the rigid body dynamics and instead assigns a second-order error dynamics response.

Inputs —

`externalForce`

function..Outputs —

Complexity —

When to apply —

The resultant closed-loop system aims to achieve the following second error behavior for the $\mathit{i}$-th joint:

$${\underset{}{\overset{\xa8}{\underset{}{\overset{\sim}{q}}}}}_{i}=-{\omega}_{n}^{2}{\underset{}{\overset{\sim}{q}}}_{i}-2\zeta {\omega}_{n}{\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}}}_{i}$$

$${\underset{}{\overset{\sim}{q}}}_{i}={q}_{i}-{q}_{i.ref}$$

These parameters characterize the desired response defined for each joint:

$${\omega}_{n}$$ — Natural frequency, specified in Hz ($${s}^{-1}$$)

$$\zeta $$ — The damping ratio, which is unitless

As seen in the diagram, the complete system consists of the standard rigid-body robot dynamics with a control law that enforces closed error dynamics via the generalized force input $$Q$$:

$$\frac{d}{dt}\left[\begin{array}{c}q\\ \underset{}{\overset{\dot{}}{q}}\end{array}\right]={f}_{dyn}(q,\underset{}{\overset{\dot{}}{q}},Q,{F}_{ext})$$

$$Q={g}_{CTC}(\underset{}{\overset{\sim}{q}},\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}},{\underset{}{\overset{\xa8}{q}}}_{ref},{\omega}_{n},\zeta )=M(q){a}_{q}+C(q,\underset{}{\overset{\dot{}}{q}})\underset{}{\overset{\dot{}}{q}}+G(q)$$

$${a}_{q}={\underset{}{\overset{\xa8}{q}}}_{ref}-{\left[{\omega}_{n}^{2}\right]}_{diag}\underset{}{\overset{\sim}{q}}-{\left[2\zeta {\omega}_{n}\right]}_{diag}\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}}$$

$$\underset{}{\overset{\sim}{q}}=q-{q}_{ref}$$

where,

$$M(q)$$ — is a joint-space mass matrix based on the current robot configuration Calculate this matrix by using the

`massMatrix`

object function.$$C(q,\underset{}{\overset{\dot{}}{q}})$$ — is the coriolis terms. Together with the joint velocity, this forms the velocity product $$C(q,\underset{}{\overset{\dot{}}{q}})\underset{}{\overset{\dot{}}{q}}$$, which can be calculated using the

`velocityProduct`

object function.$$G(q)$$ — is the torques and forces required for all joints to maintain their positions due to gravitational weights & forces acting on the robot, given the specified Gravity. Calculate the gravity torque by using the

`gravityTorque`

object function.$${\left[{\omega}_{n}^{2}\right]}_{diag}$$ — NxN diagonal matrix of natural frequencies in the NaturalFrequency property of the

`jointSpaceMotionModel`

object are in Hz ($${s}^{-1}$$).$${\left[2\zeta {\omega}_{n}^{2}\right]}_{diag}$$ — NxN diagonal matrix of the products of the squared natural frequencies $${\omega}_{n}$$, and damping ratios $$\zeta $$, specified in the DampingRatio property of the

`jointSpaceMotionModel`

object.

The values of $${\omega}_{n}$$ and $$\zeta $$ may be set directly, or they may be provided using the the `updateErrorDynamicsFromStep`

method, which computes values for $${\omega}_{n}$$ and $$\zeta $$ based on desired unit step response (defined using it's transient behavior characteristics).

Because the dynamics are compensated, in the absence of external force inputs and assuming continuous integration without time delay in the feedback terms, the error dynamics will be achieved. Therefore, In the absence of external forces, the independent joint motion type provides a simpler way of modeling the same motion.

For more information about the robot dynamics, see Robot Dynamics.

#### Proportional-Derivative (PD) Control

When the robot is defined as a system subject to PD control, the robot models behavior according to standard rigid body robot dynamics, but with the generalized force input $$Q$$ given by a control law that applies PD control based on the joint error, as well as gravity compensation.

Inputs —

`externalForce`

function.Outputs —

Complexity —

When to apply —

As with computed torque control, this system behavior uses the standard rigid-body robot dynamics, but uses the PD control law define the generalized force input $$Q$$:

$$\frac{d}{dt}\left[\begin{array}{c}q\\ \underset{}{\overset{\dot{}}{q}}\end{array}\right]={f}_{dyn}(q,\underset{}{\overset{\dot{}}{q}},\tau ,{F}_{ext})$$

$$Q={g}_{PD}(\underset{}{\overset{\sim}{q}},\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}},{K}_{P},{K}_{D})=-{K}_{P}(\underset{}{\overset{\sim}{q}})-{K}_{D}(\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}})+G(q)$$

$$\underset{}{\overset{\sim}{q}}=q-{q}_{ref}$$

where

$$G(q)$$ — is the gravity torques and forces required for all joints to maintain their positions at the gravity specified in the Gravity property of the rigid body tree. Calculate the gravity torque by using the

`gravityTorque`

object function.

The control input relies on these user-defined parameters:

$${K}_{P}$$ — Proportional gain, specified as an $\mathit{N}$-by-$\mathit{N}$ matrix, where $\mathit{N}$ is the number of movable joints of the manipulator

$${K}_{D}$$ — Derivative gain, specified as an $\mathit{N}$-by-$\mathit{N}$ matrix

#### Independent Joint Motion

When this system is modeled with independent joint motion, instead of modeling the closed loop system as standard rigid body robot dynamics plus a control input, each joint is instead modeled as a second-order system that already has the desired error behavior:

Inputs —

Outputs —

Complexity —

When to apply —

The system models the following closed-loop second order behavior for the *i-*th joint:

$$\frac{d}{dt}\left[\begin{array}{c}\underset{}{\overset{\sim}{q}}\\ \underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}}\end{array}\right]={f}_{err}(\underset{}{\overset{\sim}{q}},\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}},\zeta ,{\omega}_{n})=\left[\begin{array}{c}\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}}\\ -{\omega}_{n}^{2}{\underset{}{\overset{\sim}{q}}}_{i}-2\zeta {\omega}_{n}{\underset{}{\overset{\dot{}}{\underset{}{\overset{\sim}{q}}}}}_{i}\end{array}\right]$$

$${\underset{}{\overset{\sim}{q}}}_{i}={q}_{i}-{q}_{i.ref}$$

These parameters characterize the desired response defined for each joint:

$${\omega}_{n}$$ — the natural frequency specified in units of $${s}^{-1}$$

$$\zeta $$ — t the damping ratio, which is unitless

Or as:

The complete system is therefore modeled as:

$$\frac{d}{dt}\left[\begin{array}{c}q\\ \underset{}{\overset{\dot{}}{q}}\end{array}\right]={f}_{IJM}({q}_{ref},{\underset{}{\overset{\dot{}}{q}}}_{ref},\zeta ,{\omega}_{n})=\left[\begin{array}{cc}0& I\\ {[-{\omega}_{n}^{2}]}_{diag}& {[-2\zeta {\omega}_{n}]}_{diag}\end{array}\right]\left[\begin{array}{c}q\\ \underset{}{\overset{\dot{}}{q}}\end{array}\right]+\left[\begin{array}{cc}0& I\\ {\left[{\omega}_{n}^{2}\right]}_{diag}& {\left[2\zeta {\omega}_{n}\right]}_{diag}\end{array}\right]\left[\begin{array}{c}{q}_{ref}\\ {\underset{}{\overset{\dot{}}{q}}}_{ref}\end{array}\right]$$

The model relies on these user-defined parameters:

$${\left[{\omega}_{n}^{2}\right]}_{diag}$$ — $\mathit{N}$-by-$\mathit{N}$ diagonal matrix of natural frequencies in the NaturalFrequency property of the

`jointSpaceMotionModel`

object are in Hz ($${s}^{-1}$$).$${\left[2\zeta {\omega}_{n}^{2}\right]}_{diag}$$ — $\mathit{N}$-by-$\mathit{N}$ diagonal matrix of the products of the squared natural frequencies $${\omega}_{n}$$, and damping ratios $$\zeta $$, specified in the DampingRatio property of the

`jointSpaceMotionModel`

object.

The values of $${\omega}_{n}$$ and $$\zeta $$ may be set directly, or they may be provided using the the `updateErrorDynamicsFromStep`

method, which computes values for $${\omega}_{n}$$ and $$\zeta $$ based on desired unit step response (defined using it's transient behavior characteristics).

The Independent Joint Motion model represents a closed loop system under idealized behavior. In the absence of external forces and assuming no delays in the feedback (e.g. with continuous integration), the motion model using computed torque control produces an equivalent output.