Description
Hello, the Python Robotics Toolbox has been incredibly helpful and is one of the most user-friendly libraries I’ve encountered. However, while simulating the UR10 robot, I noticed an issue with the ur10.inertia(q) function. Regardless of the input joint angles q, the last row of the inertia matrix is always zero, resulting in a singular (non-invertible) matrix.
Steps to Reproduce:
`import numpy as np
from roboticstoolbox import models
robot = models.DH.UR10()
print(robot.inertia(robot.qz))`
Output attached below
[[ 1.11024103e+01 5.54268189e-02 5.54268189e-02 5.54268189e-02 -1.21107730e-02 0.00000000e+00] [ 5.54268189e-02 1.06425026e+01 4.32753994e+00 2.91654488e-02 -6.70885910e-03 0.00000000e+00] [ 5.54268189e-02 4.32753994e+00 1.93032952e+00 2.91654488e-02 -6.70885910e-03 0.00000000e+00] [ 5.54268189e-02 2.91654488e-02 2.91654488e-02 2.91654488e-02 -6.70885910e-03 0.00000000e+00] [-1.21107730e-02 -6.70885910e-03 -6.70885910e-03 -6.70885910e-03 2.24759060e-03 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
Even with non-zero joint angles:
print(robot.inertia([0.1, 0.2, 0.3, 0.4, 0.5, 0.6]))
outputs
[[ 9.38114647e+00 5.22236675e-01 2.99317646e-01 3.83881804e-02 -3.60450616e-02 0.00000000e+00] [ 5.22236675e-01 1.01214122e+01 4.01657180e+00 -1.24053598e-01 2.66954058e-02 0.00000000e+00] [ 2.99317646e-01 4.01657180e+00 1.82948361e+00 -2.09992031e-02 5.87920184e-03 0.00000000e+00] [ 3.83881804e-02 -1.24053598e-01 -2.09992031e-02 2.96820550e-02 -5.88757776e-03 0.00000000e+00] [-3.60450616e-02 2.66954058e-02 5.87920184e-03 -5.88757776e-03 2.24759060e-03 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
Issue:
The last row of the inertia matrix is entirely zero, making it singular. As far as I understand, the inertia matrix M(q) should always be symmetric and positive definite (thus invertible). This behavior seems contradictory.
Questions:
Is this a bug in the UR10 model implementation, or am I misunderstanding something?
Could there be missing inertial parameters for the last joint/link in the UR10 definition?
Note:
I’m a beginner in robotics, so apologies if this is a misunderstanding on my part. Any clarification would be greatly appreciated!