Does the URDF Importer in Isaac Sim support velocity and force/torque limits for joints? I have a .urdf file in which the joints have a specified velocity and torque limit in addition to the rotation limits such as the one given below:
The rotation limits (lower and upper) seem to be imported properly, however the effort and velocity limits seem to be ignored. The closest thing to an implementation that I have found for this URDF import functionality was in parse_urdf() in omni.warp-0.6.1+cp37/warp/sim/import_urdf.py.
lower = -1.e+3
upper = 1.e+3
damping = 0.0
# limits
if joint.limit:
if joint.limit.lower != None:
lower = joint.limit.lower
if joint.limit.upper != None:
upper = joint.limit.upper
# damping
if joint.dynamics:
if joint.dynamics.damping:
damping = joint.dynamics.damping
This imports the physical limits but ignores the velocity and effort limits, similar to what I described earlier. This seems like it would be a relatively simple change if this is the correct area, but I was unsure if there would be other necessary changes or if this functionality is implemented somewhere else. Does anyone know more about this topic?
I have seen that section but did not see an automatic interface for importing directly from the URDF. I was able to accomplish the desired limits by using the advice that is given at the end of that section to use the Command Tool to replicate changes made in the UI in code. I now see that this may be accomplished in a cleaner way via GetMaxForceAttr(), however, this still seems to be highly manual in pulling the limits from the URDF and setting the corresponding joint parameters. This seems like it would be greatly expedited if it was imported via the URDF in which it is specified. Would it be possible to update the URDF importer to support this functionality?
Hello, yes - those parameters are imported directly in the URDF Importer. you can see them by selecting the joint in the stage, and then at the properties, effort limit will be at drive / Max Force.
and velocity limit will be under “Raw USD Properties / Maximum Joint Velocities” (“physxJoint:MaxJointVelocity” - part of PhysxJointAPI)
I missed that these parameters were being considered because I did not realize that there was automatic scaling/unit conversion happening. The URDF importer seems to assume that the URDF velocities are specified in rad/s (which they are in my use case) and converts them to the degrees/s that Isaac Sim expects. I am somewhat confused however by the conversion applied to go from the URDF’s effort specification to the max force as the importer seems to scale the effort by a factor of exactly 60 to get the Max Force parameter in Isaac Sim. What is the reason for this scale factor? I believe that the URDF that I have specifies the efforts in kg*m/s^2 (or N) for linear joints and in kg*m^2/s^2 (or N*m) for revolute joints.
that was the expected behavior in earlier versions of the importer, as the physics model was not accounting for the time stepping and we defaulted to 60 timesteps per second. In newer versions this was removed and the value is imported in SI (with the exception of limits that are converted to degrees instead of radians).
I am currently using Isaac Sim 2022.2.0 with URDF Importer v0.5.4. Is this version sufficient or would it be necessary to update to Isaac Sim 2022.2.1?