A MoveIt! kinematics plugin for solving IK with robots mounted on external axes
Several types of robotic manipulators have closed-form kinematic solutions that are computationally faster than more generic Jacobian-based solvers. A number of MoveIt! plugins exist that leverage these fast kinematic solutions (ikfast, moveit_opw_kinematics, ur_kinematics). However, these plugins cannot be used to solve kinematics when the robot is mounted on an external axis because they only provide joint solutions for the manipulator. To obtain a full system kinematic solution, it is possible to discretely sample the joint space of the external axes and then solve the manipulator kinematics at each joint position. This project implements this approach by sampling the joint space of external axes in a planning group and then determining the manipulator joint state using a configurable, manipulator-specific MoveIt! kinematics solver plugin.
This plugin requires two planning groups to be defined in the SRDF
- A planning group for the manipulator alone (i.e. does not include the external axis joints)
- A planning group which includes the manipulator and external axis joints
This plugin requires specific parameters in the MoveIt! kinematics.yaml
:
kinematics_solver_search_resolution
: The resolution at which the joint range of the external axis should be discretized when solving IKrobot_group
: The name of the planning group that represents only the manipulator jointsweights
: (Optional) A vector of joint weights. These weights are applied to joints individually to influence the overall cost of the joint pose solution. The size of this vector must match the number of joints in the planning group
An example configuration is shown below.
ext_axis_manipulator:
kinematics_solver: sampling_kinematics_plugin/ExternalAxisSamplingKinematicsPlugin
kinematics_solver_search_resolution: 0.1
robot_group: manipulator
weights: [0.1, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
manipulator:
kinematics_solver: ur_kinematics/UR5KinematicsPlugin
kinematics_solver_search_resolution: 0.1
kinematics_solver_timeout: 0.005
kinematics_solver_attempts: 1
Note: The sampling kinematics plugin does not currently utilize the
kinematics_solver_timeout
orkinematics_solver_attempts
parameters