Dear reader,
I am trying to set up a simulated experiment for my research where I control a Franka robotic arm with position, velocity, and effort control modes. After playing around for a while I noticed some abnormally fast movements of the robot arm which led me to check the dof_properties and I am a bit surprised as to what I find. Below is the minimal example to reproduce the data:
from isaacsim import SimulationApp
simulation_app = SimulationApp({"headless": False})
from omni.isaac.core import World
from omni.isaac.franka import Franka
world = World()
world.scene.add_default_ground_plane()
franka = world.scene.add(Franka(prim_path="/World/Fancy_Franka", name="fancy_franka"))
world.reset()
print(franka.dof_properties)
The output I get looks like this:
[(0, True, -2.8973 , 2.8973 , 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, -1.76279998, 1.76279998, 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, -2.8973 , 2.8973 , 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, -3.07179999, -0.0698 , 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, -2.8973 , 2.8973 , 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, -0.0175 , 3.75250006, 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, -2.8973 , 2.8973 , 1, 5.93904701e+36, 1.00000000e+05, 5.72957824e+08, 5.729578e+06)
(0, True, 0. , 0.04 , 1, 3.40282347e+38, 7.19999981e+00, 1.00000000e+04, 1.000000e+03)
(0, True, 0. , 0.04 , 1, 3.40282347e+38, 3.40282347e+38, 0.00000000e+00, 0.000000e+00)]
To my surprise this is quite different from the documentation here. The DOF type, maxVelocity, maxEffort, stiffness, and damping do not match. Interestingly, I also believe the values in the documentation to not match the official description.
I also found the file lula_franka_gen.urdf
in isaac-sim-4.1.0/exts/omni.isaac.motion_generation/motion_policy_configs/franka/lula_franka_gen.urdf
which seems to contain the correct values, but these limits are not applied when I just use
action = ArticulationAction(joint_positions=np.array([0.0, -1.0, 0.0, -2.2, 0.0, 2.4, 0.8, 0.04, 0.04]))
franka.apply_action(action)
My main question is, how can I get my franka robot to use the correct velocity and effort limits as specified on their official website or in the .urdf file when I want to apply actions that have been generated using an external source (e.g. my neural networks). A minimal example with code would be much appreciated as I am quite new to the Omniverse.
Further I wonder why the DOF properties in the .urdf, documentation, and the franka.usd (loaded at the creation of the franka = Franka()
all have different values in the first place?
Thank you for your kind assistance.
Justus