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,
                            Transform3D joint6Tend,
                            Transform3D 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,
                            Transform3D 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,
                            Transform3D 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​(Transform3D baseTend,
                             State state)
        Description copied from class: InvKinSolver
        Calculates the inverse kinematics

        Given a desired \robabx{}{desired}{\mathbf{T}}
        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 \robabx{}{desired}{\mathbf{T}}

        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)
        Description copied from class: InvKinSolver
        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()
        Description copied from class: InvKinSolver
        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.