Class PieperSolver


  • public class PieperSolver
    extends ClosedFormIK
    Calculates the closed form inverse kinematics of
    a device using Piepers method

    To use Piepers method it is required that the device has
    6 DOF revolute joints, and that last three axis intersects.
    In this implementation it will be assumed that the that
    rotation of these last three axis are equivalent to an
    Euler ZYZ or Z(-Y)Z rotation.

    See Introduction to Robotics Mechanics and Control, by
    John J. Craig for further information about the algorithm.
    • Constructor Detail

      • PieperSolver

        public PieperSolver​(long cPtr,
                            boolean cMemoryOwn)
      • PieperSolver

        public PieperSolver​(DHParameterSetVector dhparams,
                            Transform3Dd joint6Tend,
                            Transform3Dd baseTdhRef)
        Constructor

        Parameters:
        dhparams - [in] DH-parameters corresponding to the device
        joint6Tend - [in] transform from the 6th joint to the end of the device
        baseTdhRef - [in] Transformation between the robot base and the reference frame for the DH-parameters.
      • PieperSolver

        public PieperSolver​(DHParameterSetVector dhparams,
                            Transform3Dd joint6Tend)
        Constructor

        Parameters:
        dhparams - [in] DH-parameters corresponding to the device
        joint6Tend - [in] transform from the 6th joint to the end of the device
      • PieperSolver

        public PieperSolver​(SerialDevice dev,
                            Transform3Dd joint6Tend,
                            State state)
        Constructor - the DH parameters is expected to be on each joint
        in the serial device. When specifying the DH params in the workcell file
        this constructor can be used.

        Parameters:
        dev - [in] the device for which to extract the DH parameters.
        joint6Tend - [in] transform from the 6th joint to the end of the device
        state - [in] State using which the transformation between robot base and the DH-parameters reference frame are calculated.

        Note: throws an exception if the device has no DH params
    • Method Detail

      • getCPtr

        public static long getCPtr​(PieperSolver obj)
      • solve

        public VectorQ solve​(Transform3Dd baseTend,
                             State state)
        Calculates the inverse kinematics

        Given a desired transformation
        and the current state, the method solves the inverse kinematics
        problem.

        If the algorithm is able to identify multiple solutions (e.g. elbow
        up and down) it will return all of these. Before returning a solution,
        they may be checked to be within the bounds of the configuration space.
        (See setCheckJointLimits(bool) )

        Overrides:
        solve in class InvKinSolver
        Parameters:
        baseTend - [in] Desired base to end transformation.

        state - [in] State of the device from which to start the
        iterations

        Returns:
        List of solutions. Notice that the list may be empty.

        Note: The targets baseTend must be defined relative to the base of the
        robot/device.
      • setCheckJointLimits

        public void setCheckJointLimits​(boolean check)
        Specifies whether to check joint limits before returning a solution.

        Overrides:
        setCheckJointLimits in class InvKinSolver
        Parameters:
        check - [in] If true the method should perform a check that joints are within bounds.
      • getTCP

        public FrameCPtr getTCP()
        Returns the Tool Center Point (TCP) used when solving the IK problem.

        Overrides:
        getTCP in class InvKinSolver
        Returns:
        The TCP Frame used when solving the IK.