Creating a IKFast Inverse Kinematics Plugin

Important

This guide can only serve as a starting point since the desired result could not be achieved!

The IKFast is an analytical inverse kinematics solver that automatically generates a robots IK solver code based on its URDF file. This guide documents which steps have been undertaken to generate the IKFast solver plugin for MoveIt.

The result however has always been that the robot did not move when dragging on its handles in MoveIt.

Background

Please refer to the original guide on the MoveIt documentation page here for the information about the individual commands.

Plugin Creation

make sure Docker is installed:

docker -v

If that is not the case install Docker by following the guide here.

if that is done, make sure your user is added to the “docker” group:

sudo usermod -aG docker ${USER}

log out and back in to apply the new group:

su -l ${USER}

navigate to the lib/ros2_ws/src/dalsa_bioscara_arm directory:

cd lib/ros2_ws/src/dalsa_bioscara_arm

export the arm as an ENV variable:

export MYROBOT_NAME="bioscara_arm"

Create a urdf file from the scene.xacro which will be parsed by the plugin generation script.

ros2 run xacro xacro -o $MYROBOT_NAME.urdf bioscara_arm_description/urdf/scene.xacro

Then create then call the plugin creation script:

ros2 run moveit_kinematics auto_create_ikfast_moveit_plugin.sh --iktype <type> $MYROBOT_NAME.urdf arm base_link tool_flange

On first run this will take a while to pull and build the docker images.

Select one 4-DOF <type> from the following (source):

  • Transform6D - end effector reaches desired 6D transformation

  • Rotation3D - end effector reaches desired 3D rotation

  • Translation3D - end effector origin reaches desired 3D translation

  • Direction3D - direction on end effector coordinate system reaches desired direction

  • Ray4D - ray on end effector coordinate system reaches desired global ray

  • Lookat3D - direction on end effector coordinate system points to desired 3D position

  • TranslationDirection5D - end effector origin and direction reaches desired 3D translation and direction. Can be thought of as Ray IK where the origin of the ray must coincide.

  • TranslationXY2D - end effector origin reaches desired XY translation position, Z is ignored. The coordinate system with relative to the base link.

  • TranslationLocalGlobal6D - local point on end effector origin reaches desired 3D global point. Because both local point and global point can be specified, there are 6 values.

  • TranslationXAxisAngle4D, TranslationYAxisAngle4D, TranslationZAxisAngle4D - end effector origin reaches desired 3D translation, manipulator direction makes a specific angle with x/y/z-axis (defined in the manipulator base link’s coordinate system)

  • TranslationXAxisAngleZNorm4D, TranslationYAxisAngleXNorm4D, TranslationZAxisAngleYNorm4D - end effector origin reaches desired 3D translation, manipulator direction needs to be orthogonal to z, x, or y axis and be rotated at a certain angle starting from the x, y, or z axis (defined in the manipulator base link’s coordinate system)

None of the last 6 types have yielded a successfull result yet.

Build the new Plugin Package

Navigate to the root of the workspace:

cd lib/ros2_ws

and build the new package:

colcon build --symlink-install --mixin release --packages-select bioscara_arm_ikfast_plugin

Change the kinematics.yaml

Almost done, change the lib/ros2_ws/src/moveit_configurations/bioscara_arm_gripper_128_moveit_config/config/kinematics.yaml file to the new IK solver:

arm:
  kinematics_solver: bioscara_arm/IKFastKinematicsPlugin
  ...

Try it out

Start the robot (mock or hardware), move_group and rviz as described in the guide.