# Robot and interface specifications

Realtime control commands sent to the robot should fulfill *recommended* and *necessary*
conditions. Recommended conditions should be fulfilled to ensure optimal operation of the
robot. If necessary conditions are not met then the motion will be aborted.

The final robot trajectory is the result of processing the user-specified trajectory ensuring
that recommended conditions are fulfilled. As long as necessary conditions are met, the robot
will try to follow the user-provided trajectory but it will only match the final trajectory
if it also fulfills recommended conditions. If the necessary conditions are violated, an error
will abort the motion: if, for instance, the first point of the user defined joint trajectory
is very different from robot start position (\(q(t=0) \neq q_c(t=0)\)) a `start_pose_invalid`

error
will abort the motion.

Values for the constants used in the equations below are shown in the Limits for Panda and Limits for Franka Research 3 section.

## Joint trajectory requirements

### Necessary conditions

\(q_{min} < q_c < q_{max}\)

\(-\dot{q}_{max} < \dot{q}_c < \dot{q}_{max}\)

\(-\ddot{q}_{max} < \ddot{q}_c < \ddot{q}_{max}\)

\(-\dddot{q}_{max} < \dddot{q}_c < \dddot{q}_{max}\)

### Recommended conditions

\(-{\tau_j}_{max} < {\tau_j}_d < {\tau_j}_{max}\)

\(-\dot{\tau_j}_{max} < \dot{\tau_j}_d < \dot{\tau_j}_{max}\)

At the beginning of the trajectory, the following conditions should be fulfilled:

\(q = q_c\)

\(\dot{q}_{c} = 0\)

\(\ddot{q}_{c} = 0\)

At the end of the trajectory, the following conditions should be fulfilled:

\(\dot{q}_{c} = 0\)

\(\ddot{q}_{c} = 0\)

## Cartesian trajectory requirements

### Necessary conditions

\(T\) is proper transformation matrix

\(-\dot{p}_{max} < \dot{p_c} < \dot{p}_{max}\) (Cartesian velocity)

\(-\ddot{p}_{max} < \ddot{p_c} < \ddot{p}_{max}\) (Cartesian acceleration)

\(-\dddot{p}_{max} < \dddot{p_c} < \dddot{p}_{max}\) (Cartesian jerk)

Conditions derived from inverse kinematics:

\(q_{min} < q_c < q_{max}\)

\(-\dot{q}_{max} < \dot{q_c} < \dot{q}_{max}\)

\(-\ddot{q}_{max} < \ddot{q_c} < \ddot{q}_{max}\)

### Recommended conditions

Conditions derived from inverse kinematics:

\(-{\tau_j}_{max} < {\tau_j}_d < {\tau_j}_{max}\)

\(-\dot{\tau_j}_{max} < \dot{{\tau_j}_d} < \dot{\tau_j}_{max}\)

At the beginning of the trajectory, the following conditions should be fulfilled:

\({}^OT_{EE} = {{}^OT_{EE}}_c\)

\(\dot{p}_{c} = 0\) (Cartesian velocity)

\(\ddot{p}_{c} = 0\) (Cartesian acceleration)

At the end of the trajectory, the following conditions should be fulfilled:

\(\dot{p}_{c} = 0\) (Cartesian velocity)

\(\ddot{p}_{c} = 0\) (Cartesian acceleration)

## Controller requirements

### Necessary conditions

\(-\dot{\tau_j}_{max} < \dot{{\tau_j}_d} < \dot{\tau_j}_{max}\)

### Recommended conditions

\(-{\tau_j}_{max} < {\tau_j}_d < {\tau_j}_{max}\)

At the beginning of the trajectory, the following conditions should be fulfilled:

\({\tau_j}_{d} = 0\)

## Limits for Panda

Limits in the Cartesian space are as follows:

Name |
Translation |
Rotation |
Elbow |
---|---|---|---|

\(\dot{p}_{max}\) |
1.7 \(\frac{\text{m}}{\text{s}}\) |
2.5 \(\frac{\text{rad}}{\text{s}}\) |
2.1750 \(\frac{rad}{\text{s}}\) |

\(\ddot{p}_{max}\) |
13.0 \(\frac{\text{m}}{\text{s}^2}\) |
25.0 \(\frac{\text{rad}}{\text{s}^2}\) |
10.0 \(\;\frac{rad}{\text{s}^2}\) |

\(\dddot{p}_{max}\) |
6500.0 \(\frac{\text{m}}{\text{s}^3}\) |
12500.0 \(\frac{\text{rad}}{\text{s}^3}\) |
5000.0 \(\;\frac{rad}{\text{s}^3}\) |

Joint space limits are:

Name |
Joint 1 |
Joint 2 |
Joint 3 |
Joint 4 |
Joint 5 |
Joint 6 |
Joint 7 |
Unit |
---|---|---|---|---|---|---|---|---|

\(q_{max}\) |
2.8973 |
1.7628 |
2.8973 |
-0.0698 |
2.8973 |
3.7525 |
2.8973 |
\(\text{rad}\) |

\(q_{min}\) |
-2.8973 |
-1.7628 |
-2.8973 |
-3.0718 |
-2.8973 |
-0.0175 |
-2.8973 |
\(\text{rad}\) |

\(\dot{q}_{max}\) |
2.1750 |
2.1750 |
2.1750 |
2.1750 |
2.6100 |
2.6100 |
2.6100 |
\(\frac{\text{rad}}{\text{s}}\) |

\(\ddot{q}_{max}\) |
15 |
7.5 |
10 |
12.5 |
15 |
20 |
20 |
\(\frac{\text{rad}}{\text{s}^2}\) |

\(\dddot{q}_{max}\) |
7500 |
3750 |
5000 |
6250 |
7500 |
10000 |
10000 |
\(\frac{\text{rad}}{\text{s}^3}\) |

\({\tau_j}_{max}\) |
87 |
87 |
87 |
87 |
12 |
12 |
12 |
\(\text{Nm}\) |

\(\dot{\tau_j}_{max}\) |
1000 |
1000 |
1000 |
1000 |
1000 |
1000 |
1000 |
\(\frac{\text{Nm}}{\text{s}}\) |

The arm can reach its maximum extension when joint 4 has angle \(q_{elbow-flip}\), where \(q_{elbow-flip} = -0.467002423653011\:rad\). This parameter is used to determine the flip direction of the elbow.

## Limits for Franka Research 3

Limits in the Cartesian space are as follows:

Name |
Translation |
Rotation |
Elbow |
---|---|---|---|

\(\dot{p}_{max}\) |
3.0 \(\frac{\text{m}}{\text{s}}\) |
2.5 \(\frac{\text{rad}}{\text{s}}\) |
2.620 \(\frac{rad}{\text{s}}\) |

\(\ddot{p}_{max}\) |
9.0 \(\frac{\text{m}}{\text{s}^2}\) |
17.0 \(\frac{\text{rad}}{\text{s}^2}\) |
10.0 \(\;\frac{rad}{\text{s}^2}\) |

\(\dddot{p}_{max}\) |
4500.0 \(\frac{\text{m}}{\text{s}^3}\) |
8500.0 \(\frac{\text{rad}}{\text{s}^3}\) |
5000.0 \(\;\frac{rad}{\text{s}^3}\) |

Joint space limits are:

Name |
Joint 1 |
Joint 2 |
Joint 3 |
Joint 4 |
Joint 5 |
Joint 6 |
Joint 7 |
Unit |
---|---|---|---|---|---|---|---|---|

\(q_{max}\) |
2.7437 |
1.7837 |
2.9007 |
-0.1518 |
2.8065 |
4.5169 |
3.0159 |
\(\text{rad}\) |

\(q_{min}\) |
-2.7437 |
-1.7837 |
-2.9007 |
-3.0421 |
-2.8065 |
0.5445 |
-3.0159 |
\(\text{rad}\) |

\(\dot{q}_{max}\) |
2.62 |
2.62 |
2.62 |
2.62 |
5.26 |
4.18 |
5.26 |
\(\frac{\text{rad}}{\text{s}}\) |

\(\ddot{q}_{max}\) |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
\(\frac{\text{rad}}{\text{s}^2}\) |

\(\dddot{q}_{max}\) |
5000 |
5000 |
5000 |
5000 |
5000 |
5000 |
5000 |
\(\frac{\text{rad}}{\text{s}^3}\) |

\({\tau_j}_{max}\) |
87 |
87 |
87 |
87 |
12 |
12 |
12 |
\(\text{Nm}\) |

\(\dot{\tau_j}_{max}\) |
1000 |
1000 |
1000 |
1000 |
1000 |
1000 |
1000 |
\(\frac{\text{Nm}}{\text{s}}\) |

The arm can reach its maximum extension when joint 4 has angle \(q_{elbow-flip}\), where \(q_{elbow-flip} = -0.467002423653011\:rad\). This parameter is used to determine the flip direction of the elbow.

Important

Note that the maximum joint velocity depends on the joint position. The maximum and minimum joint velocities at a certain joint position are calculated as:

As most motion planners cannot deal with those functions for describing the velocity limits of each joint but they only deal with fixed velocity limits (rectangular limits), we are providing here a suggestion on which values to use for them.

In the figures below the system velocity limits are visualized by the red and blue thresholds while the suggested “position-velocity rectangular limits” are visualized in black.

Here are the parameters describing the suggested position-velocity rectangular limits:

Name |
Joint 1 |
Joint 2 |
Joint 3 |
Joint 4 |
Joint 5 |
Joint 6 |
Joint 7 |
Unit |
---|---|---|---|---|---|---|---|---|

\(q_{max}\) |
2.3093 |
1.5133 |
2.4937 |
-0.4461 |
2.4800 |
4.2094 |
2.6895 |
\(\text{rad}\) |

\(q_{min}\) |
-2.3093 |
-1.5133 |
-2.4937 |
-2.7478 |
-2.4800 |
0.8521 |
-2.6895 |
\(\text{rad}\) |

\(\dot{q}_{max}\) |
2 |
1 |
1.5 |
1.25 |
3 |
1.5 |
3 |
\(\frac{\text{rad}}{\text{s}}\) |

Important

These limits are the values that are used by default in the rate limiter and in the URDF inside franka_ros. However, these are only a suggestion, you are free to define your own rectangles within the specification accordingly to your needs.

Since FR3 does not inherently implement any restriction to the system limits (red and blue line in the plots above), you are also free to implement your own motion generator to exploit the HW capabilities of FR3 beyond the rectangular limits imposed by existing motion generators.