force Services

AlignAxis1

This service matches the normal vector of the plane consists of points(x1, x2, x3) based on the ref coordinate(refer to get_normal(x1, x2, x3)) and the designated axis of the tool frame. The current position is maintained as the TCP position of the robot.

Request:

float64[6] x1                # task pos(posx)
float64[6] x2                # task pos(posx)
float64[6] x3                # task pos(posx)
float64[3] source_vect       # source vector[3]
int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2)
int8       ref               # DR_BASE(0), DR_WORLD(2), user coord(101~200)
                             # <ref is only available in M2.40 or later>

Response:

bool       success

AlignAxis2

This service matches the given vect direction based on the ref coordinate and the designated axis of the tool frame. The current position is maintained as the TCP position of the robot.

Request:

float64[3] target_vect       # target vector[3]
float64[3] source_vect       # source vector[3]
int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2)
int8       ref               # DR_BASE(0), DR_WORLD(2), user coord(101~200)
                             # <ref is only available in M2.40 or later>

Response:

bool       success

CalcCoord

This service is only available in M2.50 or later.

  • 1 pose: Defined by the position and orientation of x1.

  • 2 poses + mode 0: - X-axis: direction from x1 to x2 - Z-axis: projection of current Tool-Z onto the plane orthogonal to the X-axis - Origin: position of x1

  • 2 poses + mode 1: - X-axis: direction from x1 to x2 - Z-axis: projection of x1’s Z-axis onto the plane orthogonal to the X-axis - Origin: position of x1

  • 3 poses: - X-axis: direction from x1 to x2 - Z-axis: cross product of X-axis and (x1→x3) - Origin: position of x1

  • 4 poses: Same axis definition as with 3 poses, but origin is the position of x4.

Request:

int8       input_pos_cnt     # input_pos_cnt
float64[6] x1                # task pos(posx)
float64[6] x2                # task pos(posx)
float64[6] x3                # task pos(posx)
float64[6] x4                # task pos(posx)
int8       ref               # DR_BASE(0), DR_WORLD(2)
int8       mod               # input mode(only valid when the number of input poses is 2)
                             # 0: defining z-axis based on the current Tool-z direction
                             # 1: defining z-axis based on the z direction of x1

Response:

float64[6] conv_posx         # task pos(posx)
bool       success

CheckForceCondition

This service checks the status of the given force. It disregards the force direction and only compares the sizes. This condition can be repeated with the while or if statement. Measuring the force, axis is based on the ref coordinate and measuring the moment, axis is based on the tool coordinate.

Request:

int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2), DR_AXIS_A(10), DR_AXIS_B(11), DR_AXIS_C(12)
float64    min               # min >=0.0
float64    max               # max >=0.0
int8       ref     #= 0      # DR_BASE(0), DR_TOOL(1), DR_WORLD(2), user coord(101~200)
                             # <DR_WORLD is only available in M2.40 or later>

Response:

bool       success                 # True or False

CheckOrientationCondition1

This service compares the robot end-effector’s current pose with a specified pose and returns the angular difference (in radians) using the AngleAxis method.

  • Returns True if the difference is positive (+), False if the difference is negative (−).

  • Used to check the sign of the difference for orientation limit conditions (e.g., in while or if statements).

Conditions: - Min only: True if the difference is positive (+), False if negative (−). - Min & Max: True if the difference from min is negative (−) and from max is positive (+), False otherwise. - Max only: True if the difference from max is positive (+), False otherwise.

ROS2 Interface

Request:

int8       axis              # DR_AXIS_A(10), DR_AXIS_B(11), DR_AXIS_C(12)
float64[6] min               # task pos(posx)
float64[6] max               # task pos(posx)
int8       ref  #= 0         # DR_BASE(0), DR_TOOL(1), DR_WORLD(2), user_coordinate(101~200)
                             # <DR_WORLD is only available in M2.40 or later>
int8       mode #= 0         # DR_MV_MOD_ABS(0)

Response:

bool success                 # True or False

CheckOrientationCondition2

This service compares the robot end-effector’s current pose with a defined rotation angle range and calculates the difference (in radians) using the AngleAxis method.

Return Value:

  • True if the difference is positive (+)

  • False if the difference is negative (-)

Usage:

This service can be used to determine whether the current pose is within an orientation limit. It can be incorporated into conditional statements such as while or if.

Conditions:

  • Min only: Returns True if the difference is positive (+), otherwise False.

  • Min & Max: Returns True if the difference from min is negative (-) and the difference from max is positive (+), otherwise False.

  • Max only: Returns True if the difference from max is positive (+), otherwise False.

ROS2 Interface

Request:

int8       axis              # DR_AXIS_A(10), DR_AXIS_B(11), DR_AXIS_C(12)
float64    min               # minimum value
float64    max               # maximum value
int8       ref  #= 0         # DR_BASE(0), DR_TOOL(1), DR_WORLD(2), user_coordinate(101~200)
                             # <DR_WORLD is only available in M2.40 or later>
int8       mode #= 1         # DR_MV_MOD_REL(1)
float64[6] pos               # task pos(pos)

Response:

bool success                 # True or False

Note

Range of rotating angle: This means the relative angle range (min, max) based on the specified axis from a given position based on the ref coordinate.

CheckPositionCondition

This service checks the status of the given position. This condition can be repeated with the while or if statement. Axis and pos of input paramets are based on the ref coordinate.

Request:

int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2)
float64    min               # min
float64    max               # max
int8       ref     #= 0      # DR_BASE(0), DR_TOOL(1), DR_WORLD(2), user_coordinate(101~200)
                             # <DR_WORLD is only available in M2.40 or later>
int8       mode #= 0         # DR_MV_MOD_ABS(0), DR_MV_MOD_REL(1)
float64[6] pos               # task pos(posx)

Response:

bool success                 # True or False

CoordTransform

This service converts a given task position from a source reference coordinate system (ref_in) to a target reference coordinate system (ref_out), and returns the transformed task position.

Supported Transformations:

ref_in

World

World

World

World

Base

Base

Base

Tool

Tool

Tool

Tool

User

User

User

User

ref_out

World

Base

Tool

User

Base

Tool

User

World

Base

Tool

User

World

Base

Tool

User

Request:

float64[6] pos_in            # task pos(posx)
int8       ref_in            # DR_BASE(0), DR_TOOL(1), DR_WORLD(2), user coord(101~200)
                             # <ref is only available in M2.40 or later>
int8       ref_out           # DR_BASE(0), DR_TOOL(1), DR_WORLD(2), user coord(101~200)
                             # <ref is only available in M2.40 or later>

Response:

float64[6] conv_posx         # task pos(posx)
bool       success

GetUserCartCoord

This service is only available in M2.50 or later This service returns the pose and reference coordinate system of the requested user coordinate system [id].

Request:

int8       id                # ID of user coord

Response:

float64[6] conv_posx         # task pos(posx)
int8       ref               # Reference coordinate of the coordinate to get
bool       success

GetWorkpieceWeight

This service measures and returns the weight of the workpiece.

Request: .. code-block:

(None)

Response:

float32       weight               # Measured weight, Negative value if error
bool          success

IsDoneBoltTightening

This service monitors the tightening torque of the tool and returns True if the set torque (m) is reached within the given time and False if the given time has passed.

Request:

float64    m                 # Target torque
float64    timeout           # Monitoring duration [sec]
int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2)

Response:

bool       success

OverwriteUserCartCoord

This service is only available for M2.50 or later versions. It changes the pose and reference coordinate system of the requested user coordinate system [id] with the given pos and ref.

Request:

int8       id                # ID of user coord
float64[6] pos               # task pos(posx)
int8       ref        #= 0   # DR_BASE(0), DR_WORLD(2)

Response:

int8       id                # Successful coordinate setting, Set user coordinate ID (101 - 200)
                             # (-1) Failed coordinate setting
bool       success

ParallelAxis1

This service matches the normal vector of the plane consists of points(x1, x2, x3) based on the ref coordinate(refer to get_normal(x1, x2, x3)) and the designated axis of the tool frame. The current position is maintained as the TCP position of the robot.

Request:

float64[6] x1                # task pos(posx)
float64[6] x2                # task pos(posx)
float64[6] x3                # task pos(posx)
int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2)
int8       ref        #= 0   # DR_BASE(0), DR_WORLD(2), user coord(101~200)
                             # <ref is only available in M2.40 or later>

Response:

bool       success

ParallelAxis2

This service matches the given vect direction based on the ref coordinate and the designated axis of the tool frame. The current position is maintained as the TCP position of the robot.

Request:

float64[3] vect              # vector[3]
int8       axis              # DR_AXIS_X(0), DR_AXIS_Y(1), DR_AXIS_Z(2)
int8       ref        #= 0   # DR_BASE(0), DR_WORLD(2), user coord(101~200)
                             # <ref is only available in M2.40 or later>

Response:

bool       success

ReleaseComplianceCtrl

This service releases the current compliance control and restores the robot to normal operation mode.

Request:

(None)

Response:

bool       success

ReleaseForce

This service reduces the force control target value to 0 through the time value and returns the task space to adaptive control.

Request:

float64    time # 0          # Time needed to reduce the force (0 ~ 1.0)

Response:

bool       success

ResetWorkpieceWeight

This service resets the stored workpiece weight data, initializing the algorithm before a new weight measurement.

Request:

(None)

Response:

bool       success

SetDesiredForce

This service defines the target force, direction, translation time, and mode for force control based on the global coordinate.

Request:

float64[6] fd                # Three translational target forces + Three rotational target moments
int8[6]    dir               # Force control in the corresponding direction if 1, Compliance control in the corresponding direction if 0
int8       ref               # Reference coordinate of the coordinate to get
float64    time # 0          # Transition time of target force to take effect (0 ~ 1.0 sec)
int8       mod               # DR_FC_MOD_ABS(0): force control with absolute value,
                             # DR_FC_MOD_REL(1): force control with relative value to initial state (the instance when this function is called)

Response:

bool       success

SetStiffnessx

This service sets the stiffness value based on the global coordinate(refer to set_ref_coord()). The linear transition from the current or default stiffness is performed during the time given as STX. The user-defined ranges of the translational stiffness and rotational stiffness are 0-20000N/m and 0-400Nm/rad, respectively.

Request:

float64[6] stx               # default[500, 500, 500, 100, 100, 100], Three translational stiffnesses + Three rotational stiffnesses
int8       ref               # the preset reference coordinate system.
float64    time              # Stiffness varying time(0 ~ 1.0) [sec], Linear transition during the specified time

Response:

bool       success

SetUserCartCoord1

This service sets a new user Cartesian coordinate system using the given input pose pos and reference coordinate system ref. Up to 20 user coordinate systems can be set, including those created within the Workcell Item. Since the coordinate system set by this function is removed when the program is terminated, it is recommended to set new coordinate systems within the Workcell Item for persistence.

Request:

float64[6] pos                # task pos(posx)
int8       ref                # DR_BASE(0), DR_WORLD(2)
                              # <ref is only available in M2.40 or later>

Response:

int8        id                # set user coord (101~120) or fail(-1)
bool        success

SetUserCartCoord2

This service defines a new rectangular coordinate system using points x1, x2, and x3 based on a given reference coordinate system.

Axis Definition:

  • ux: Unit vector from x1 to x2 - Before M2.0.2: Unit vector from x2 to x1

  • uy: Unit vector representing the shortest distance from the line x1x2 to point x3

  • uz: Derived from the cross product of ux and uy

  • Origin: pos in the reference coordinate system

Limitations:

  • Maximum of 20 coordinate systems can be stored.

  • If more than 20 are created, only the most recent 20 are retained.

Request:

float64[6] x1                 # task pos(posx)
float64[6] x2                 # task pos(posx)
float64[6] x3                 # task pos(posx)
float64[6] pos                # pos(posx)
int8       ref                # DR_BASE(0), DR_WORLD(2)
                              # <ref is only available in M2.40 or later>

Response:

int8    id                    # set user coord (101~200) or fail(-1)
bool        success

SetUserCartCoord3

This service defines a new rectangular coordinate system using vectors u1 and v1 based on a given reference coordinate system.

Definition: - Origin: pos in the reference coordinate system - X-axis: Vector u1 - Y-axis: Vector v1

  • If u1 and v1 are not orthogonal, a corrected vector v1’ is used, which is perpendicular to u1 on the plane defined by u1 and v1

  • Z-axis: Determined by the cross product u1 × v1

Request:

float64[3] u1                # X-axis unit vector
float64[3] v1                # Y-axis unit vector
float64[6] pos               # task pos(posx)
int8       ref               # DR_BASE(0), DR_WORLD(2)
                             # <ref is only available in M2.40 or later>

Response:

int8    id                   # set user coord (101~120) or fail(-1)
bool        success

TaskComplianceCtrl

This service begins task compliance control based on the preset reference coordinate system.

Request:

float64[6] stx               # Three translational stiffnesses + Three rotational stiffnesses
                             # default  [3000, 3000, 3000, 200, 200, 200]
int8       ref               # the preset reference coordinate system.
float64    time              # Stiffness varying time [ 0 ~ 1.0 sec], Linear transition during the specified time

Response:

bool       success