# Determine the maximum joint velocities for a PTP-Movement

Assuming an industrial robot performs a PTP movement with a speed of 100% for each joint, it often happens that the joints never reach 100% of speed because the torque limits of the actuators are violated and the movement stops.

My approach was to get the torques at each joint with the general equation of motion using reverse Newton-Euler-Algorithm (RNEA):

$$T = M(q)*\ddot q + C(q,\dot q)\dot q + G(q)$$. With $$\dot q$$ being the the joint velocity. My idea was to convert this equation so that it calculates the velocity. But I'm not sure if that is even possible.

Basic Algorithm idea: Iterating over each torque the robot would reach when performing the movement to identify the point where it reaches its maximum. Using this maximum torque to calculate the corresponding maximum velocity. Also I'm not sure if maximum torque equals maximum velocity.

Is there an approach that delivers the maximum reachable velocity for a PTP-Movement before the actual movement starts to avoid an error?

• Yeah, and nice catch: no one ever really accounts for this. Another interesting phenomenon is that the potential velocity of a joint increases with the amount of torque that can be delivered, but in the wild joint weight increases roughly linearly with the amount of torque that can be delivered. So the faster you want the arm to move, the more torque you need, but that increases the inertia!! It basically breaks the robot equation. This paper touches on this: researchgate.net/publication/… Dec 1, 2022 at 18:45
• Thank you for the reading recommendation. Dec 5, 2022 at 9:00

I see a few practical issues and things that should be made clear with this approach, but overall I think this could work.

Issues:

• The dynamics model you have listed is a "disturbance-free" model - i.e. it does not take into account joint friction, external forces, etc. This usually is not too big of a problem for simulating smaller robots, but if you are working with industrial robots I would imagine they have more impactful disturbances.
• Joint friction is largely important for what you are looking to solve for here. imagine a simpler form of the robot dynamics: $$\tau = \mathbf{M}(\mathbf{q})\ddot{\mathbf{q}}$$. Now, the friction term will be part of $$\tau$$, so our equation becomes: $$\tau_{c} + \mathbf{B}\dot{\mathbf{q}} = \mathbf{M}(\mathbf{q})\ddot{\mathbf{q}}$$, where $$\tau_{c}$$ is the controller torque and $$\mathbf{B}$$ is some negative definite damping (friction) matrix. As we can see, we cannot increase joint velocity if a joint is moving at a speed which creates friction equal to the max torque of that given motor. Note that friction is notoriously difficult to model, and is not as simple as a constant matrix. This should hopefully illustrate that there is at least a maximum velocity of a real robot, although not necessarily with the disturbance-free model.

Considerations:

• You do not need to convert the equation to calculate velocity. If you would like to use this approach, you should numerically integrate your acceleration "into" velocity. If you are familiar with matlab, this would essentially be ode45 or other functions of the same family.
• Does max torque equal max velocity? No. Max torque equals max change in velocity, but you would need to apply this torque over time to continue increasing velocity to achieve the maximum velocity.

Basic algorithm:

• Inputs:
• Trajectory torques: $$\tau_{i}$$ for $$0 \le i \le N$$,
• Robot model: $$\mathbf{M}$$, $$\mathbf{C}$$, $$\mathbf{G}$$
• Maybe some sort of friction estimation (we'll call it $$\mathbf{B}$$ for consistency)
• Initial starting states $$\mathbf{q}(0)$$ and $$\dot{\mathbf{q}}(0)$$
• Difference in time between torque inputs, $$\Delta t$$
• $$\mathbf{v}_{\text{max}} \leftarrow \mathbf{0}$$
• $$\mathbf{q} \leftarrow \mathbf{q}(0)$$
• $$\dot{\mathbf{q}} \leftarrow \dot{\mathbf{q}}(0)$$
• $$\ddot{\mathbf{q}} \leftarrow \mathbf{0}$$
• for $$i \leftarrow 0$$ to $$N$$
• $$\ddot{\mathbf{q}} \leftarrow \mathbf{M}(\mathbf{q})^{-1}(\tau_{i} -\mathbf{C}(\mathbf{q},\dot{\mathbf{q}})\dot{\mathbf{q}} - \mathbf{G}(\mathbf{q}) + \mathbf{B}(\mathbf{q},\dot{\mathbf{q}})\dot{\mathbf{q}})$$
• $$\mathbf{q} \leftarrow \mathbf{q} + \dot{\mathbf{q}} \Delta t$$
• $$\dot{\mathbf{q}} \leftarrow \dot{\mathbf{q}} + \ddot{\mathbf{q}} \Delta t$$
• if $$v_{\text{max},j} < |\dot{q}_{j}|$$ (assuming you are looking for max absolute velocity)
• $$v_{\text{max},j} \leftarrow |\dot{q}_{j}|$$
• Return: $$\mathbf{v}_{\text{max}}$$

This algorithm simply uses the Euler method to perform numerical integration, but there exist more accurate methods (most commonly used methods are Runge-Kutta). The general idea of the algorithm is that you want to simulate your trajectory, then pick out the max velocity as the simulation progresses. You can also calculate the torque values during each step of the simulation - for instance if you are using a PID controller, the torque is just the error of the robot with respect to a desired trajectory.

• Thank you very much for this detailed answer. I'll definitley test this. Dec 5, 2022 at 8:59
• What about the maximum velocity and peak torque limits of the actuators? Dec 6, 2022 at 1:00
• Good question. I believe the assumption is that once a torque limit is reached, the task will be stopped - so I would imagine a break statement could be added to the proposed loop that would stop the search for max velocity if the torque limits are surpassed (returning the current max velocities). Now if the actuator has a velocity limit, then we can apply the same principle as we did for the torque limit and end our search early. Dec 6, 2022 at 14:04