Quick Start

Minimal connection

from ur.ur_ctrl import UrCtrl

ROBOT_IP = "10.170.10.56"

with UrCtrl(ROBOT_IP) as robot:
    print(robot.current_position)

URCtrl starts connecting in its constructor. Using a with statement calls disconnect() on exit.

Current position and joint angles

with URCtrl(ROBOT_IP) as robot:
    p = robot.current_position
    j = robot.current_angle

    print("P =", p)
    print("J =", j)

current_position returns P coordinates in mm / degree rotation-vector representation.

current_angle returns J coordinates in degrees.

Move Z +10 mm from the current position

from ur.ur_ctrl import UrCtrl, MotionMode

with UrCtrl(ROBOT_IP) as robot:
    current = robot.current_position

    if current is not False:
        target = list(current)
        target[2] += 10.0

        robot.move(
            target,
            motion_mode=MotionMode.LINE,
            speed=20,
            accel=20,
            is_async=False,
        )

Create taught point P1

with URCtrl(ROBOT_IP) as robot:
    robot.teach("P1")
    print(robot.P1)

P1 is not stored inside the UR Controller. RobotVarManager saves it to JSON.

Move to P1

with URCtrl(ROBOT_IP) as robot:
    robot.move("P1", motion_mode=MotionMode.PTP, speed=30, accel=30)

When moving to a P pose using PTP, moveJ_IK() is used internally.

Move to P1 using LINE

with URCtrl(ROBOT_IP) as robot:
    robot.move("P1", motion_mode=MotionMode.LINE, speed=20, accel=20)

moveL() is used internally.

Set IO outputs

with URCtrl(ROBOT_IP) as robot:
    robot.set_IO(0, True)
    robot.set_IO(0, False)

Inspect errors

with URCtrl(ROBOT_IP) as robot:
    ok = robot.move("P999")

    if not ok:
        print(robot.error_code)
        print(robot.error_description)
        print(robot.get_current_error_info())