Source code for forcedimension_core.drd.direct

from ctypes import c_byte, c_double, c_int

import forcedimension_core.runtime as _runtime
from forcedimension_core.typing import (
    SupportsPtr, SupportsPtrs3, c_int_ptr
)


[docs]def getPositionAndOrientation( p_out: SupportsPtrs3[c_double], o_out: SupportsPtrs3[c_double], pg_out: c_double, matrix_out: SupportsPtr[c_double], ID: int = -1, ) -> int: """ Retrieve the position (in [m]) about the X, Y, and Z axes, the angle of each joint (in [rad]), (if applicable) the gripper position (in [m]), and orientation frame matrix of the end-effector. Please refer to your device user manual for more information on your device coordinate system. Note ---- Unlike :func:`forcedimension_core.dhd.getPositionAndOrientation()`, this function returns immediately. It loads from an internal buffer that is refreshed by the robotic control loop. For more information about regulation see :ref:`regulation`. :param SupportsPtrs3[ctypes.c_double] p_out: Output buffer to store the end-effector position (in [m]). :param SupportsPtrs3[ctypes.c_double] o_out: Output buffer to store the angle of each joint (in [rad]). :param ctypes.c_double pg_out: Output buffer to store the gripper opening gap (in [m]). :param MutableFloatMatrixLike matrix_out: Output buffer to store the orientation matrix. :param int ID: Device ID (see :ref:`multiple_devices` section for details) :raises AttributeError: If ``p_out.ptrs`` is not a valid attribute of ``p_out`` :raises AttributeError: If ``o_out.ptrs`` is not a valid attribute of ``o_out`` :raises AttributeError: If ``matrix_out.ptrs`` is not a valid attribute of ``matrix_out`` :raises TypeError: If ``p_out.ptrs`` is not iterable. :raises TypeError: If ``o_out.ptrs`` is not iterable. :raises ctypes.ArgumentError: If ``p_out.ptrs`` does not expand into a tuple of 3 ``Pointer[c_double]`` types. :raises ctypes.ArgumentError: If ``o_out.ptrs`` does not expand into a tuple of 3 ``Pointer[c_double]`` types. :raises ctypes.ArgumentError: If ``matrix_out.ptr`` is not a Pointer[c_double] type :raises ctypes.ArgumentError: If ``pg_out`` is not a c_double type. :raises ctypes.ArgumentError: If ``ID`` is not implicitly convertible to a C int. :returns: 0 or :data:`forcedimension_core.constants.TIMEGUARD` on success, -1 otherwise. See Also -------- | :class:`forcedimension_core.containers.Vec3` | :class:`forcedimension_core.containers.Mat3x3` | :class:`forcedimension_core.containers.numpy.Vec3` | :class:`forcedimension_core.containers.numpy.Mat3x3` """ return _runtime._libdrd.drdGetPositionAndOrientation( *p_out.ptrs, *o_out.ptrs, pg_out, matrix_out.ptr, ID )
[docs]def getVelocity( v_out: SupportsPtrs3[c_double], w_out: SupportsPtrs3[c_double], vg_out: c_double, ID: int = -1 ) -> int: """ Retrieve the linear velocity of the end-effector (in [m/s]) as well as the angular velocity (in [rad/s]) about the X, Y, and Z axes. Please refer to your device user manual for more information on your device coordinate system. Note ---- Unlike :func:`forcedimension_core.dhd.getLinearVelocity()`, :func:`forcedimension_core.dhd.getAngularVelocityRad()`, and :func:`forcedimension_core.dhd.getAngularVelocityDeg()` this function returns immediately. It loads from an internal buffer that is refreshed by the robotic control loop. For more information about regulation see :ref:`regulation`. :param int ID: Device ID (see :ref:`multiple_devices` section for details) :param SupportsPtrs3[ctypes.c_double] v_out: Output buffer for the linear velocity (in [m/s]). :param SupportsPtrs3[ctypes.c_double] w_out: Output buffer for the angular velocity (in [rad/s]). :param SupportsPtrs3[ctypes.c_double] vg_out: Output buffer for the gripper linear velocity (in [m/s]). :raises AttributeError: If ``v_out.ptrs`` is not a valid attribute of ``v_out`` :raises AttributeError: If ``w_out.ptrs`` is not a valid attribute of ``w_out`` :raises TypeError: If ``p_out.ptrs`` is not iterable. :raises TypeError: If ``o_out.ptrs`` is not iterable. :raises ctypes.ArgumentError: If ``p_out.ptrs`` does not expand into a tuple of 3 ``Pointer[c_double]`` types. :raises ctypes.ArgumentError: If ``o_out.ptrs`` does not expand into a tuple of 3 ``Pointer[c_double]`` types. :raises ctypes.ArgumentError: If ``pg_out`` is not a c_double type. :raises ctypes.ArgumentError: If ``ID`` is not implicitly convertible to a C int. :returns: 0 on success and -1 otherwise. See Also -------- | :class:`forcedimension_core.containers.Vec3` | :class:`forcedimension_core.containers.numpy.Vec3` """ return _runtime._libdrd.drdGetVelocity(*v_out.ptrs, *w_out.ptrs, vg_out, ID)
[docs]def moveTo(pos: SupportsPtr[c_double], block: bool, ID: int = -1): """ Send the robot end-effector to a desired Cartesian 7-DOF configuration. The motion uses smooth acceleration/deceleration. The acceleration and velocity profiles can be controlled by adjusting the trajectory generation parameters. Note ---- The paths generated by this function are not guarunteed to be continuous if a command is interrupted by another call to this function while still in the process of being executed. If you want to guaruntee continuity use :func:`forcedimension_core.drd.track()`. For more information see :ref:`regulation`. :param SupportsPtr[ctypes.c_double] pos: Buffer of target positions/orientations for each DOF. DOFs 0-2 correspond to position about the X, Y, and Z axes (in [m]). DOFs 3-6 correspond to the target orientation about the first, second and third joints (in [rad]). DOF 7 corresponds to the gripper gap (in [m]). :param bool block: If ``True``, the call blocks until the destination is reached. If ``False``, the call returns immediately. :param int ID: Device ID (see :ref:`multiple_devices` section for details). :raises AttributeError: If ``pos.ptr`` is not a valid attribute of ``pos`` :raises ctypes.ArgumentError: If ``pos.ptr`` is not a ``Pointer[c_double]`` type. :raises ctypes.ArgumentError: If ``ID`` is not convertible to a C char.' :returns: 0 on success, and -1 otherwise. See Also -------- | :class:`forcedimension_core.containers.DOFFloat` | :class:`forcedimension_core.containers.numpy.DOFFloat` | :func:`forcedimension_core.drd.moveToAllEnc()` """ return _runtime._libdrd.drdMoveTo(pos.ptr, block, ID)
[docs]def moveToAllEnc(enc: SupportsPtr[c_int], block: bool, ID: int = -1): """ Send the robot end-effector to a desired encoder position. The motion follows a straight line in the encoder space, with smooth acceleration/deceleration. The acceleration and velocity profiles can be controlled by adjusting the trajectory generation parameters. Note ---- The paths generated by this function are not guarunteed to be continuous if a command is interrupted by another call to this function while still in the process of being executed. If you want to guaruntee continuity use :func:`forcedimension_core.drd.trackAllEnc()`. For more information see :ref:`regulation`. :param SupportsPtr[ctypes.c_int] enc: Target encoder positions. :param int ID: Device ID (see :ref:`multiple_devices` section for details). :param bool block: If ``True``, the call blocks until the destination is reached. If ``False``, the call returns immediately. :raises AttributeError: If ``enc.ptr`` is not a valid attribute of ``enc`` :raises ValueError: If ``enc.ptr`` is not a ``Pointer[c_int]`` type. :raises ctypes.ArgumentError: If ``ID`` is not implicitly convertible to C char. :returns: 0 on success, and -1 otherwise. See Also -------- | :class:`forcedimension_core.containers.DOFInt` | :class:`forcedimension_core.containers.numpy.DOFInt` | :func:`forcedimension_core.drd.direct.moveTo()` """ return _runtime._libdrd.drdMoveToAllEnc(enc.ptr, block, ID)
[docs]def track(pos: SupportsPtr[c_double], ID: int = -1): """ Send the robot end-effector to a desired Cartesian 7-DOF configuration. If motion filters are enabled, the motion follows a smooth acceleration/deceleration. The acceleration and velocity profiles can be controlled by adjusting the trajectory generation parameters. Note ---- For more information see :ref:`regulation`. :param SupportsPtr[ctypes.c_double] pos: Buffer of target positions/orientations for each DOF. DOFs 0-2 correspond to position about the X, Y, and Z axes (in [m]). DOFs 3-6 correspond to the target orientation about the first, second and third joints (in [rad]). DOF 7 corresponds to the gripper gap (in [m]). :param int ID: Device ID (see :ref:`multiple_devices` section for details). :raises AttributeError: If ``pos.ptr`` is not a valid attribute of ``pos``. :raises ctypes.ArgumentError: If ``pos.ptr`` is not a ``Pointer[c_double]`` type. :raises ctypes.ArgumentError: If ``ID`` is not convertible to a C char.' :returns: 0 on success, and -1 otherwise. See Also -------- | :class:`forcedimension_core.containers.DOFFloat` | :class:`forcedimension_core.containers.numpy.DOFFloat` | :func:`forcedimension_core.drd.direct.trackAllEnc()` """ return _runtime._libdrd.drdTrack(pos.ptr, ID)
_runtime._libdrd.drdTrackAllEnc.argtypes = [c_int_ptr, c_byte] _runtime._libdrd.drdTrackAllEnc.restype = c_int
[docs]def trackAllEnc(enc: SupportsPtr[c_int], ID: int = -1): """ Send the robot end-effector to a desired encoder position. If motion filters are enabled, th emotion follows a smooth acceleration/deceleration constraint on each encoder axis. The acceleration and velocity profiles can be controlled by adjusting the trajectory generation parameters. Note ---- For more information see :ref:`regulation`. :param SupportsPtr[ctypes.c_int] enc: Target encoder positions. :param int ID: Device ID (see :ref:`multiple_devices` section for details) :raises AttributeError: If ``enc.ptr`` is not a valid attribute of ``enc`` :raises ctypes.ArgumentError: If ``enc.ptr`` is not a ``Pointer[c_int]`` type. :raises ctypes.ArgumentError: If ``ID`` is not implicitly convertible to C char. :returns: 0 on success, and -1 otherwise. See Also -------- | :class:`forcedimension_core.containers.DOFInt` | :class:`forcedimension_core.containers.numpy.DOFInt` | :func:`forcedimension_core.drd.direct.track()` """ return _runtime._libdrd.drdTrackAllEnc(enc.ptr, ID)