API for deploying Inverse Kinematics

May I know where I can find the documentation on deploying inverse kinematics?

Especially for a robot arm mounted on a moving base.

Thank you.

Check out the Lula Kinematics Solver:
https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/advanced_tutorials/tutorial_motion_generation_lula_kinematics.html

Thank you so much.
But it seems Lula kinematics solver is for robot arm with fixed base.
Any API for inverse kinematics for mobile manipulators?

Thank you.

Not in general, but do you have a particular robot in mind? If it’s a holonomic base, one option would be to use Isaac Sim standard IK, representing the base as a pair of prismatic joints and a revolute joint (for XY position and rotation).

Yes, it is prismatic joints. May you tell me more about it?
Thanks

Yes, it is a holonomic base robot. May you tell me more about it?
Thank you.

The idea is to create a URDF where the mobile base is represented as a series of fake links and joints:

fixed_link --> x_joint (prismatic) --> dummy_link_1 --> y_joint (prismatic) --> dummy_link_2 --> rotation_joint (revolute) --> base_of_arm --> ... (rest of arm)

This is a hack, but it might work well enough depending on your use case.

Regarding this solution, I have a few questions:

  1. The flow is “fixed_link → x_joint (prismatic) → dummy_link_1 → y_joint (prismatic) → dummy_link_2 → rotation_joint (revolute) → base_of_arm → … (rest of arm)”, does it mean the first link, “fixed_link”, is not movable?

  2. May I know how to make a dummy link?

  3. Would it be possible if you can demo it in a short video?

  4. After this, may I know which Isaac Sim IK library is suitable?

Thank you so much.

  1. Correct. It’s just serving as the origin of your (x,y) coordinate system.
  2. The idea is to construct a URDF that looks something like this:
<robot name="my_holonomic_robot">
    <link name="fixed_link"/>
    <link name="dummy_link_1"/>
    <joint name="x_joint" type="prismatic">
        <parent link="fixed_link"/>
        <child link="dummy_link_1"/>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <axis xyz="1 0 0"/>
        <limit effort="10" lower="-10" upper="10" velocity="1"/>
    </joint>
    <link name="dummy_link_2"/>
    <joint name="y_pos" type="prismatic">
        <parent link="dummy_link_1"/>
        <child link="dummy_link_2"/>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <axis xyz="0 1 0"/>
        <limit effort="10" lower="-10" upper="10" velocity="1"/>
    </joint>
    <link name="base_of_arm"/>
    <joint name="rotation_joint" type="revolute">
        <parent link="dummy_link_2"/>
        <child link="base_of_arm"/>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <axis xyz="0 0 1"/>
        <limit effort="10" velocity="3.14"/>
    </joint>

    <!-- etc. -->

</robot>
  1. I’ve never actually tried this. You’re in uncharted territory. :-)
  2. See Motion Generation — Omniverse Robotics documentation
    and Motion Generation Extension [omni.isaac.motion_generation] — isaac_sim 2022.2.1-beta.29 documentation