In this post, I want to break down the control parameters found in the Franka Robotics Documentation.
🗺Big Picture
Think of the relationship between a driver(us) and a car(Franka).
Why do we need to know this parameters as a developer?
As developers, we are the drivers planning a route from point to point . We must plan a smooth path that doesn’t require slamming on the gas, jerky braking, or taking a sharp turn at high speed.
Why do we need to care about the robot’s limits?
You treat your car well, right? You should treat your robot the same way. However, the Franka robot is more conservative. It constantly checks: “Can my tires🛞 handle this turn at this speed?” If you try to move too fast or too suddenly, the system will intervene. The Franka controller will “abort” and throw an error if you planned an impossible “route”.
✒Notation
Let’s define the notation used in the Franka Control Interface Specification and Robot Limits.
refers to joint positions, sometimes called “robot configuration”. It is a -vector containing the positions of all joints, measured in radian.
TipWhen you saw , you are working in “joint space”.
refers to position vector.
TipUsually, this describes the end-effector position in Cartesian coordinates.
🧠Intuition
The and are “static”. On the contrary, their “rate of change”(derivative) are:
- velocity, 1st derivative
- acceleration, 2nd derivative
- jerk, 3rd derivative
Imagine you’re in a car🚗.
- Velocity is your speed.
- Acceleration is you pushing the gas pedal.
- Jerk is how ==suddenly== you slam your foot on the gas or brake pedal.
Then the constraints on these 3 are:
- (Velocity) : are you commanding the robot moving too fast?
- (Acceleration) : are you commanding the robot to speed up or slow down too hard?
- (Jerk) : are you commanding the robot to move too suddenly?
Joint trajectory requirements
Necessary conditions
For a command to be accepted, these must be true:
Remark
The subscript from the denotes the commanded velocity/acceleration/jerk of one specific joint.
Remark
The actual and values refer to Limits for Franka Research 3.
Recommended conditions
TipRecommended conditions are about smoothness.
Remark
- The refers to torque.
- The refers to a specific joint.
- The refers to desired torque you are asking for.
The amount of torque your command requests from a joint motor should stay below its recommended maximum.”
WarningAsking for a very sudden change in torque ( is high) is like yanking a handbrake instead of smoothly pressing a brake pedal. It will “jolt” the robot’s gears, causing vibration.
At the beginning of the trajectory, the following conditions should be fulfilled:
At the end of the trajectory, the following conditions should be fulfilled:
Remark
These conditions are crucial for trajectory generation. If you write your own trajectory generator rather instead of using a framework like MoveIt2, take these conditions seriously.
TipThe figure in Modern Robotics: Mechanics, Planning, and Control Chapter 9 really illustrates the perfectly.
Let’s interpret it.
- : the first commanded joint positions must match the robot’s current measured joint positions.
- : the robot’s speed should be zero at the start and end of the motion.
- : the robot should not be accelerating at the very start and very end.
Cartesian trajectory requirements
Necessary conditions
- must be a proper homogeneous transformation matrix
- (Cartesian velocity)
- (Cartesian acceleration)
- (Cartesian jerk)
Remark
The matrix (e.g.,
O_T_EEin libfranka: C++ library for Franka Robotics research robots) represents the end-effector’s pose. TheO_T_EEreads aloud “origin transform to end effector”.
- the last row is
[0 0 0 1]- the rotation part(top left 3x3) should be orthogonal matrix.
Remark
The denotes the position () of the end effector.
Remark
The from the denotes the commanded velocity/acceleration/jerk.
Conditions derived from inverse kinematics:
Recommended conditions
Conditions derived from inverse kinematics:
At the beginning of the trajectory, the following conditions should be fulfilled:
- (Cartesian velocity)
- (Cartesian acceleration)
Remark
- the is the robot’s current, measured pose (the 4x4 matrix).
- the is the commanded pose your algorithm is sending at the very first step (time = 0).
This is crucial. If the commanded starting pose is 10cm away from the current pose, the robot would have to instantly jump (teleport) 10cm. This is physically impossible, probably violating the necessary condition.
At the end of the trajectory, the following conditions should be fulfilled:
- (Cartesian velocity)
- (Cartesian acceleration)
Remark
These are all about smoothness.
Controller requirements
Necessary conditions
Recommended conditions
At the beginning of the trajectory, the following conditions should be fulfilled:
Limits for Franka Research 3
Limits in the Cartesian space are as follows:
| Name | Translation | Rotation | Elbow |
|---|---|---|---|
Remark
A limit of means the end-effector’s speed in any direction () cannot exceed 3 meters per second.
The is a peak speed limit. The speed of a trajectory isn’t simple as
time = distance / velocity. Think of driving a car for 100 meters. You speed limit is3m/s, but you can’t drive a car all the way3m/s. Your speed will be0m/sat the start and the end.What really matters to our trajectory generation is: This limit sets a minimum possible time for the motion.
- if we tell the robot to move 1.5 meters in 0.5 seconds, it would require the speed to be
3m/sfor the whole time, this is impossible! The acceleration and jerk limit must be invalid.
Remark
The rotation limits apply to the angular velocity, acceleration, and jerk of the end-effector’s orientation.
Joint space limits are:
| Name | Joint 1 | Joint 2 | Joint 3 | Joint 4 | Joint 5 | Joint 6 | Joint 7 | Unit |
|---|---|---|---|---|---|---|---|---|
| 2.9007 | 1.8361 | 2.9007 | -0.1169 | 2.8763 | 4.6216 | 3.0508 | ||
| -2.9007 | -1.8361 | -2.9007 | -3.0770 | -2.8763 | 0.4398 | -3.0508 | ||
| 2.62 | 2.62 | 2.62 | 2.62 | 5.26 | 4.18 | 5.26 | ||
| 10 | 10 | 10 | 10 | 10 | 10 | 10 | ||
| 5000 | 5000 | 5000 | 5000 | 5000 | 5000 | 5000 | ||
| 87 | 87 | 87 | 87 | 12 | 12 | 12 | ||
| 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | ||
| 0.6599 | 0.2517 | 0.2000 | 0.3533 | 0.5757 | 0.4878 | 0.4628 | ||
| 6.0 | 2.585 | 3.5 | 4.0 | 17.0 | 5.5 | 17.0 |
Remark
- the denotes the Maximum Deceleration Limits, the “braking power”. This value allows the robot to calculate its “stopping distance” (in this case, “stopping angle”). By knowing this guaranteed “braking” power, the controller can figure out when it needs to start telling the joint to slow down so it doesn’t slam into its physical limit ().
- the denotes velocity offset, a small “buffer” velocity. A technical tuning parameter. It’s used in that square-root formula to help shape the “ramp” of the slowing-down curve. It helps ensure the velocity limit starts to decrease smoothly before it gets critically close to the joint limit, rather than all at once.
Remark
Note that the maximum joint velocity depends on both the joint position and the direction of motion. The position based joint velocity limits are computed by:
where:
- is the maximum joint velocity for joint at position .
- is the minimum joint velocity for joint at position .
- is the maximum joint velocity for joint from the table above.
- is the minimum joint velocity for joint . (simply )
- is the velocity offset for joint from the table above.
- is the maximum deceleration limits for joint from the table above.
- is the maximum joint position for joint from the table above.
- is the minimum joint position for joint from the table above.
- is the current joint position of joint .
TipSince we have this contradiction:
- most motion planners cannot represent variable velocity limits and instead rely on constant limits,. e.g. pantor/ruckig: Motion Generation for Robots and Machines. Real-time. Jerk-constrained. Time-optimal.,
- Franka’s joint velocity limit are variable limit!
What should we do then?
- use the above formula. (libfranka has a wrapper for us.)
- use the following heuristic table
Heuristic Optimal Limits
| Name | Joint 1 | Joint 2 | Joint 3 | Joint 4 | Joint 5 | Joint 6 | Joint 7 | Unit |
|---|---|---|---|---|---|---|---|---|
| 2.3476 | 1.5454 | 2.4937 | -0.4226 | 2.5100 | 4.2841 | 2.7045 | ||
| -2.3476 | -1.5454 | -2.4937 | -2.7714 | -2.5100 | 0.7773 | -2.7045 | ||
| 2 | 1 | 1.5 | 1.25 | 3 | 1.5 | 3 | ||
| 10 | 10 | 10 | 10 | 10 | 10 | 10 | ||
| 5000 | 5000 | 5000 | 5000 | 5000 | 5000 | 5000 |
Compared to the “theoretical” limits, these values are more conservative. I use them quite a lot.