Skip to content

4.2 로봇 모션 제어 및 상태

개요

Motion 클래스는 Agilebot 로봇의 모션 제어를 위한 핵심 개체로, 다음 핵심 기능을 캡슐화하는 역할을 합니다.

  • Speed/acceleration 매개변수 관리
  • 좌표계 관리
  • 포인트 전환
  • 궤적 모션 제어
  • 끌어서 가르치기
  • 실시간 제어
  • 페이로드 관리

일반적인 작업흐름

Arm 연결이 설정된 후 arm.motion 를 통해 Motion 인스턴스를 얻으면 별도의 초기화가 필요하지 않습니다.

4.2.1 로봇 매개변수 가져오기

4.2.1.1 OVC 전체 속도 계수 가져오기

메서드 이름motion.get_OVC() -> tuple[float, StatusCodeEnum]
설명0에서 1 사이의 로봇의 현재 OVC 전체 속도 계수를 가져옵니다.
요청 매개변수매개변수 없음
반환 값float: 속도 비율(0~1 범위)
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.1.2 OAC 전체 가속 계수 가져오기

메서드 이름motion.get_OAC() -> tuple[float, StatusCodeEnum]
설명0에서 1.2 범위의 로봇의 현재 OAC 전체 가속 계수를 가져옵니다.
요청 매개변수매개변수 없음
반환 값float: 가속 비율(0~1.2 범위)
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.1.3 현재 TF 공구 좌표계 번호 가져오기

메서드 이름motion.get_TF() -> tuple[int, StatusCodeEnum]
설명로봇이 사용하는 현재 TF 도구 좌표계 번호를 가져옵니다. 유효 범위는 0~50입니다.
요청 매개변수매개변수 없음
반환 값int: 공구 좌표계 번호
StatusCodeEnum: 기능 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.1.4 현재 UF 사용자 좌표계 번호 가져오기

메서드 이름motion.get_UF() -> tuple[int, StatusCodeEnum]
설명로봇이 사용하는 현재 UF 사용자 좌표계 번호를 가져옵니다. 유효 범위는 0~50입니다.
요청 매개변수매개변수 없음
반환 값int: 사용자 좌표계 번호
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.1.5 현재 TCS 교육 좌표계 가져오기

메서드 이름motion.get_TCS() -> tuple[TCSType, StatusCodeEnum]
설명로봇이 사용하는 현재 TCS 티칭 좌표계를 가져옵니다. 자세한 내용은 TCSType를 참조하세요.
요청 매개변수매개변수 없음
반환 값TCSType: 티칭 좌표계 번호
StatusCodeEnum: 기능 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/get_param.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 全局参数获取示例 / Example of system parameter acquisition
"""

from Agilebot import Arm, StatusCodeEnum, TCSType

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取机器人各参数并打印
# [EN] Get robot parameters and print
res, ret = arm.motion.get_OVC()
if ret == StatusCodeEnum.OK:
    print("获取全局速度比率成功 / Get global velocity ratio successful")
else:
    print(f"获取全局速度比率失败,错误代码 / Get global velocity ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"全局速度比率 / Global velocity ratio: {res}")

res, ret = arm.motion.get_OAC()
if ret == StatusCodeEnum.OK:
    print("获取全局加速度比率成功 / Get global acceleration ratio successful")
else:
    print(f"获取全局加速度比率失败,错误代码 / Get global acceleration ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"全局加速度比率 / Global acceleration ratio: {res}")

res, ret = arm.motion.get_TCS()
if ret == StatusCodeEnum.OK:
    print("获取示教坐标系类型成功 / Get teaching coordinate system type successful")
else:
    print(f"获取示教坐标系类型失败,错误代码 / Get teaching coordinate system type failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"示教坐标系类型 / Teaching coordinate system type: {TCSType(res).name}")

res, ret = arm.motion.get_UF()
if ret == StatusCodeEnum.OK:
    print("获取用户坐标系成功 / Get user coordinate system successful")
else:
    print(f"获取用户坐标系失败,错误代码 / Get user coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"用户坐标系 / User coordinate system: {res}")

res, ret = arm.motion.get_TF()
if ret == StatusCodeEnum.OK:
    print("获取工具坐标系成功 / Get tool coordinate system successful")
else:
    print(f"获取工具坐标系失败,错误代码 / Get tool coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"工具坐标系 / Tool coordinate system: {res}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.2 로봇 매개변수 설정

4.2.2.1 OVC 전체 속도 계수 설정

메서드 이름motion.set_OVC( value : float) -> StatusCodeEnum
설명로봇의 OVC 전체 속도 계수를 설정합니다.
요청 매개변수value : 부동 속도 비율(범위 0~1, > 0)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.2.2 OAC 전체 가속 계수 설정

메서드 이름motion.set_OAC( value : float) -> StatusCodeEnum
설명로봇의 OAC 전체 가속 계수 설정
요청 매개변수value : 부동 가속도 비율 (범위 0.01~1.2)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.2.3 현재 TF 공구 좌표계 설정

메서드 이름motion.set_TF( value : int) -> StatusCodeEnum
설명로봇이 사용하는 현재 TF 도구 좌표계 설정
요청 매개변수value : int 공구 좌표계 번호 (범위 0~50)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.2.4 현재 UF 사용자 좌표계 설정

메서드 이름motion.set_UF( value : int) -> StatusCodeEnum
설명로봇이 사용하는 현재 UF 사용자 좌표계를 설정합니다.
요청 매개변수value : int 사용자 좌표계 번호 (범위 0~50)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.2.5 현재 TCS 티칭 좌표계 설정

메서드 이름motion.set_TCS( value : TCSType) -> StatusCodeEnum
설명로봇이 사용하는 현재 TCS 티칭 좌표계를 설정합니다. 자세한 내용은 TCSType를 참조하세요.
요청 매개변수value : TCSType TCS 티칭 좌표계
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/set_param.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 全局参数设置示例 / Example of system parameter setting
"""

from Agilebot import Arm, StatusCodeEnum, TCSType

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置机器人各参数
# [EN] Set robot parameters
ret = arm.motion.set_OVC(0.7)
if ret == StatusCodeEnum.OK:
    print("设置全局速度比率成功 / Set global velocity ratio successful")
else:
    print(f"设置全局速度比率失败,错误代码 / Set global velocity ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_OAC(0.7)
if ret == StatusCodeEnum.OK:
    print("设置全局加速度比率成功 / Set global acceleration ratio successful")
else:
    print(f"设置全局加速度比率失败,错误代码 / Set global acceleration ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_TCS(TCSType.TOOL)
if ret == StatusCodeEnum.OK:
    print("设置示教坐标系类型成功 / Set teaching coordinate system type successful")
else:
    print(f"设置示教坐标系类型失败,错误代码 / Set teaching coordinate system type failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_UF(0)
if ret == StatusCodeEnum.OK:
    print("设置用户坐标系成功 / Set user coordinate system successful")
else:
    print(f"设置用户坐标系失败,错误代码 / Set user coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_TF(0)
if ret == StatusCodeEnum.OK:
    print("设置工具坐标系成功 / Set tool coordinate system successful")
else:
    print(f"设置工具坐标系失败,错误代码 / Set tool coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.3 데카르트 자세를 Joint 자세로 변환

메서드 이름motion.convert_cart_to_joint( pose : MotionPose, uf_index : int = 0, tf_index : int = 0) -> tuple[MotionPose, StatusCodeEnum]
설명포즈 데이터를 데카르트 좌표에서 관절 좌표로 변환
요청 매개변수pose : MotionPose 데카르트 포즈 (PoseType.CART; 자세가 생략되면 SDK가 가능한 자세를 자동으로 해결합니다.)
uf_index : int 사용자 좌표계 ID (기본값 0)
tf_index : int 공구 좌표계 ID (기본값 0)
반환 값MotionPose: 로봇 포즈
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

4.2.4 Joint 포즈를 데카르트 포즈로 변환

메서드 이름motion.convert_joint_to_cart( pose : MotionPose, uf_index : int = 0, tf_index : int = 0) -> tuple[MotionPose, StatusCodeEnum]
설명관절 좌표를 데카르트 좌표로 변환
요청 매개변수pose : MotionPose Joint 포즈
uf_index : int 사용자 좌표계 ID(기본값 0)
tf_index : int 공구 좌표계 ID(기본값 0)
반환 값MotionPose: 로봇 포즈
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/convert_pose.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 转换关节值坐标使用示例 / Example of converting joint coordinates
"""

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.CART
motion_pose.cartData.position.x = 221.5
motion_pose.cartData.position.y = -494.1
motion_pose.cartData.position.z = 752.0
motion_pose.cartData.position.a = -89.1
motion_pose.cartData.position.b = 31.6
motion_pose.cartData.position.c = -149.3

# [ZH] 转换关节值坐标
# [EN] Convert to joint coordinates
joint_pose, ret = arm.motion.convert_cart_to_joint(motion_pose)
if ret == StatusCodeEnum.OK:
    print("转换关节值坐标成功 / Convert to joint coordinates successful")
else:
    print(f"转换关节值坐标失败,错误代码 / Convert to joint coordinates failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {joint_pose.pt}")
print(
    f"轴位置 / Axis position: \n"
    f"J1:{joint_pose.joint.j1}\n"
    f"J2:{joint_pose.joint.j2}\n"
    f"J3:{joint_pose.joint.j3}\n"
    f"J4:{joint_pose.joint.j4}\n"
    f"J5:{joint_pose.joint.j5}\n"
    f"J6:{joint_pose.joint.j6}"
)

# [ZH] 转换笛卡尔坐标
# [EN] Convert to Cartesian coordinates
cart_pose, ret = arm.motion.convert_joint_to_cart(joint_pose)
if ret == StatusCodeEnum.OK:
    print("转换笛卡尔坐标成功 / Convert to Cartesian coordinates successful")
else:
    print(f"转换笛卡尔坐标失败,错误代码 / Convert to Cartesian coordinates failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {cart_pose.pt}")
print(
    f"笛卡尔位置 / Cartesian position: \n"
    f"X:{cart_pose.cartData.position.x}\n"
    f"Y:{cart_pose.cartData.position.y}\n"
    f"Z:{cart_pose.cartData.position.z}\n"
    f"A:{cart_pose.cartData.position.a}\n"
    f"B:{cart_pose.cartData.position.b}\n"
    f"C:{cart_pose.cartData.position.c}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.5 Joint 스페이스 모션

메서드 이름motion.move_joint( pose : MotionPose, vel : float = 1, acc : float = 1) -> StatusCodeEnum
설명관절 공간에서 가장 빠른 경로를 이용하여 로봇 엔드 이펙터가 지정된 위치로 이동하도록 제어
요청 매개변수pose : MotionPose 데카르트 또는 조인트 공간의 점
vel : 부동 속도 비율(범위 0~1)
acc : 부동 가속 비율(범위 0~1.2)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/move_joint.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 关节运动使用示例 / Example of joint movement usage
"""

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum, Posture

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.CART
motion_pose.cartData.position.x = 121.3
motion_pose.cartData.position.y = 416.386
motion_pose.cartData.position.z = 74.104
motion_pose.cartData.position.a = -180
motion_pose.cartData.position.b = 0
motion_pose.cartData.position.c = 0
motion_pose.cartData.posture = Posture()
motion_pose.cartData.posture.arm_back_front = -1
motion_pose.cartData.posture.arm_left_right = -1
motion_pose.cartData.posture.arm_up_down = -1
motion_pose.cartData.posture.wrist_flip = -1


# [ZH] 发送运动请求
# [EN] Send motion request
ret = arm.motion.move_joint(motion_pose, vel=1, acc=1)
if ret == StatusCodeEnum.OK:
    print("运动指令下发成功 / Joint motion command issued successfully")
else:
    print(f"运动指令下发失败,错误代码 / Joint motion command issued failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.6 선형 운동

메서드 이름motion.move_line( pose : MotionPose, vel : float = 100, acc : float = 1) -> StatusCodeEnum
설명지정된 위치까지 직선으로 이동하도록 로봇 엔드 이펙터를 제어합니다.
요청 매개변수pose : MotionPose 데카르트 또는 조인트 공간의 점
vel : 부동 TCP 속도(범위 1~4000mm/s)
acc : 부동 가속 비율(범위 0~1.2)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/move_line.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 直线运动使用示例 / Example of linear motion usage
"""

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化Arm类
# [EN] Initialize the Arm class
arm = Arm()
# [ZH] 连接控制器
# [EN] Connect to the controller
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.JOINT
motion_pose.joint.j1 = 0
motion_pose.joint.j2 = 0
motion_pose.joint.j3 = 60
motion_pose.joint.j4 = 60
motion_pose.joint.j5 = 0
motion_pose.joint.j6 = 0

# [ZH] 发送运动请求
# [EN] Send motion request
ret = arm.motion.move_line(motion_pose, vel=100, acc=0.5)
if ret == StatusCodeEnum.OK:
    print("直线运动指令下发成功 / Line motion command issued successfully")
else:
    print(f"直线运动指令下发失败,错误代码 / Line motion command issued failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 结束后断开机器人连接
# [EN] Disconnect from the robot after completion
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.7 원형 운동

메서드 이름motion.move_circle( pose1 : MotionPose, pose2 : MotionPose, vel : float = 100, acc : float = 1.0) -> StatusCodeEnum
설명로봇 엔드 이펙터를 제어하여 원형 궤적을 따라 지정된 위치로 이동합니다.
요청 매개변수pose1 : MotionPose 중간 포즈
pose2 : MotionPose 대상 포즈
vel : 부동 TCP 속도 (범위 1~4000 mm/s)
acc : 부동 가속 비율 (범위 0~1.2)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/move_circle.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 圆弧运动使用示例 / Example of circular arc motion usage
"""

import time

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.CART
motion_pose.cartData.position.x = 377.000
motion_pose.cartData.position.y = 202.820
motion_pose.cartData.position.z = 507.155
motion_pose.cartData.position.c = 0
motion_pose.cartData.position.b = 0
motion_pose.cartData.position.a = 0

# [ZH] 运动到初始点
# [EN] Move to initial position
ret = arm.motion.move_joint(motion_pose)
if ret == StatusCodeEnum.OK:
    print("运动到初始点指令下发成功 / Move to initial position command issued successfully")
else:
    print(
        f"运动到初始点指令下发失败,错误代码 / Move to initial position command issued failed, error code: {ret.errmsg}"
    )
    arm.disconnect()
    exit(1)

# [ZH] 修改为运动中间点
# [EN] Modify to intermediate motion point
motion_pose.cartData.position.x = 488.300
motion_pose.cartData.position.y = 359.120
motion_pose.cartData.position.z = 507.155

# [ZH] 运动终点
# [EN] End position
motion_pose2 = MotionPose()
motion_pose2.pt = PoseType.CART
motion_pose2.cartData.position.x = 629.600
motion_pose2.cartData.position.y = 509.270
motion_pose2.cartData.position.z = 507.155
motion_pose2.cartData.position.c = 0
motion_pose2.cartData.position.b = 0
motion_pose2.cartData.position.a = 0

# [ZH] 等待运动结束
# [EN] Wait for motion to complete
time.sleep(10)

# [ZH] 开始运动
# [EN] Start motion
ret_code = arm.motion.move_circle(motion_pose, motion_pose2, vel=100)
if ret_code == StatusCodeEnum.OK:
    print("圆弧运动指令下发成功 / Circle motion command issued successfully")
else:
    print(f"圆弧运动指令下发失败,错误代码 / Circle motion command issued failed, error code: {ret_code.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.8 현재 포즈 가져오기

메서드 이름motion.get_current_pose( pose_type : PoseType, uf_index : int = 0, tf_index : int = 0) -> tuple[MotionPose, StatusCodeEnum]
설명직교 좌표계 또는 관절 좌표계에 있을 수 있는 로봇의 현재 자세를 가져옵니다.
요청 매개변수pose_type :PoseType 포즈 유형
uf_index : int 사용자 좌표계 ID(PoseType.CART에만 해당, 기본값 0)
tf_index : int 도구 좌표계 ID(PoseType.CART에만 해당, 기본값 0)
반환 값MotionPose: 로봇 포즈
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/get_current_pose.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 当前关节位姿获取示例 / Example of current joint pose acquisition
"""

from Agilebot import Arm, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前位姿
# [EN] Get current pose
motion_pose, ret = arm.motion.get_current_pose(PoseType.JOINT)
if ret == StatusCodeEnum.OK:
    print("获取关节位姿成功 / Get joint pose successful")
else:
    print(f"获取关节位姿失败,错误代码 / Get joint pose failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {motion_pose.pt}")
print(
    f"轴位置 / Axis position:\n"
    f"J1:{motion_pose.joint.j1}\n"
    f"J2:{motion_pose.joint.j2}\n"
    f"J3:{motion_pose.joint.j3}\n"
    f"J4:{motion_pose.joint.j4}\n"
    f"J5:{motion_pose.joint.j5}\n"
    f"J6:{motion_pose.joint.j6}"
)

# [ZH] 获取当前位姿
# [EN] Get current pose
motion_pose, ret = arm.motion.get_current_pose(PoseType.CART, 0, 0)
if ret == StatusCodeEnum.OK:
    print("获取笛卡尔位姿成功 / Get Cartesian pose successful")
else:
    print(f"获取笛卡尔位姿失败,错误代码 / Get Cartesian pose failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {motion_pose.pt}")
print(
    f"坐标位置 / Coordinate position:\n"
    f"X:{motion_pose.cartData.position.x}\n"
    f"Y:{motion_pose.cartData.position.y}\n"
    f"Z:{motion_pose.cartData.position.z}\n"
    f"A:{motion_pose.cartData.position.a}\n"
    f"B:{motion_pose.cartData.position.b}\n"
    f"C:{motion_pose.cartData.position.c}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.9 DH 매개변수 가져오기

메서드 이름motion.get_DH_param() -> tuple[list[DHparam], StatusCodeEnum]
설명로봇의 DH 매개변수 가져오기
요청 매개변수매개변수 없음
반환 값list(DHparam): List of DH parameters
StatusCodeEnum: Function execution result
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): 지원되지 않음

4.2.10 DH 매개변수 설정

메서드 이름motion.set_DH_param( dh_list : list[DHparam]) -> StatusCodeEnum
설명로봇의 DH 매개변수 설정
요청 매개변수dh_list : list(DHparam) DH parameter list
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): 지원되지 않음

예제 코드

motion/DH_param.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: DH参数设置使用示例 / Example of DH parameter setting usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取DH参数
# [EN] Get DH parameters
res, ret = arm.motion.get_DH_param()
if ret == StatusCodeEnum.OK:
    print("获取DH参数成功 / Get DH parameters successful")
else:
    print(f"获取DH参数失败,错误代码 / Get DH parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置DH参数
# [EN] Set DH parameters
ret = arm.motion.set_DH_param(res)
if ret == StatusCodeEnum.OK:
    print("设置DH参数成功 / Set DH parameters successful")
else:
    print(f"设置DH参数失败,错误代码 / Set DH parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
for param in res:
    print(
        f"DH参数的ID / DH parameter ID: {param.id}\n"
        f"杆件长度 / Link length: {param.a}\n"
        f"杆件扭角 / Link twist angle: {param.alpha}\n"
        f"关节距离 / Joint distance: {param.d}\n"
        f"关节转角 / Joint angle: {param.offset}"
    )

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.11 축 잠금 상태 가져오기

메서드 이름motion.get_drag_set() -> tuple[DragStatus, StatusCodeEnum]
설명동작 티칭에만 적용되는 현재 로봇 축 잠금 상태를 가져옵니다.
요청 매개변수매개변수 없음
반환 값DragStatus: 축 잠금 상태, True는 축이 이동 가능함을 나타내고, False는 잠겨 있음을 나타냅니다.
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): 지원되지 않음

예제 코드

motion/get_drag_set.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 拖动设置使用示例 / Example of drag Settings usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前轴锁定状态
# [EN] Get current axis lock status
drag_status, ret = arm.motion.get_drag_set()
if ret == StatusCodeEnum.OK:
    print("获取拖动设置成功 / Get drag set successful")
else:
    print(f"获取拖动设置失败,错误代码 / Get drag set failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"当前X轴拖动状态 / Current X axis drag status: {drag_status.cart_status.x}\n"
    f"当前Y轴拖动状态 / Current Y axis drag status: {drag_status.cart_status.y}\n"
    f"当前Z轴拖动状态 / Current Z axis drag status: {drag_status.cart_status.z}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.12 로봇 축 잠금 상태 설정

메서드 이름motion.set_drag_set( drag_status : DragStatus) -> StatusCodeEnum
설명티칭 동작에만 적용되는 현재 로봇 축 잠금 상태를 설정합니다.
요청 매개변수drag_status : DragStatus 축 잠금 상태(기본값 모두 True: 잠금 해제)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): 지원되지 않음

예제 코드

motion/set_drag_set.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 拖动状态设置实例 / Example of dragging status setting
"""

from Agilebot import Arm, DragStatus, StatusCodeEnum, TCSType

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置示教坐标系
# [EN] Set teaching coordinate system
arm.motion.set_TCS(TCSType.BASE)
if ret == StatusCodeEnum.OK:
    print("操作成功 / Operation successful")
else:
    print(f"操作失败,错误代码 / Operation failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置要锁定的轴
# [EN] Set axes to be locked
drag_status = DragStatus()
drag_status.cart_status.x = False
drag_status.cart_status.y = False
# [ZH] 设置连续拖动开关
# [EN] Set continuous drag switch
drag_status.is_continuous_drag = True

# [ZH] 设置轴锁定状态
# [EN] Set axis lock status
ret = arm.motion.set_drag_set(drag_status)
if ret == StatusCodeEnum.OK:
    print("设置拖动状态成功 / Set drag status successful")
else:
    print(f"设置拖动状态失败,错误代码 / Set drag status failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"当前X轴拖动状态 / Current X axis drag status: {drag_status.cart_status.x}\n"
    f"当前Y轴拖动状态 / Current Y axis drag status: {drag_status.cart_status.y}\n"
    f"当前Z轴拖动状态 / Current Z axis drag status: {drag_status.cart_status.z}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.13 로봇 드래그 활성화

메서드 이름motion.enable_drag( drag_state : bool) -> StatusCodeEnum
설명로봇 끌기 활성화 또는 비활성화
요청 매개변수drag_state : bool 드래그 모드 스위치(True 드래그 모드 입력, False 드래그 모드 종료)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): 지원되지 않음

예제 코드

motion/enable_drag.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 拖动示教使用示例 / example of drag teaching usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 进入拖动示教
# [EN] Enter drag teaching mode
ret = arm.motion.enable_drag(True)
if ret == StatusCodeEnum.OK:
    print("进入拖动示教成功 / Enter drag teaching successful")
else:
    print(f"进入拖动示教失败,错误代码 / Enter drag teaching failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 退出拖动示教
# [EN] Exit drag teaching mode
ret = arm.motion.enable_drag(False)
if ret == StatusCodeEnum.OK:
    print("退出拖动示教成功 / Exit drag teaching successful")
else:
    print(f"退出拖动示教失败,错误代码 / Exit drag teaching failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.14 실시간 Position 제어 모드 진입

메서드 이름motion.enter_position_control() -> StatusCodeEnum
설명실시간 위치 제어 모드로 진입하여 로봇의 정밀한 위치 제어가 가능합니다.
요청 매개변수없음
반환 값StatusCodeEnum: 함수 실행 결과
메모실시간 제어 모드로 진입한 후 UDP를 통해 제어 명령을 전송해야 합니다.
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

4.2.15 실시간 Position 제어 모드 종료

메서드 이름motion.exit_position_control() -> StatusCodeEnum
설명실시간 위치 제어 모드를 종료하고 기본 로봇 제어 상태로 복귀합니다.
요청 매개변수없음
반환 값StatusCodeEnum: 함수 실행 결과
메모종료 후 로봇은 더 이상 실시간 제어 명령을 수락하지 않습니다.
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

예제 코드

motion/position_control.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 实时位置控制模式使用示例 / Example of the real-time location control mode usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 进入实时位置控制模式
# [EN] Enter real-time position control mode
ret = arm.motion.enter_position_control()
if ret == StatusCodeEnum.OK:
    print("进入实时位置控制模式成功 / Enter real-time position control mode successful")
else:
    print(
        f"进入实时位置控制模式失败,错误代码 / Enter real-time position control mode failed, error code: {ret.errmsg}"
    )
    arm.disconnect()
    exit(1)

# [ZH] 在此插入发送UDP数据控制机器人代码
# [EN] Insert UDP data sending code to control robot here

# [ZH] 退出实时位置控制模式
# [EN] Exit real-time position control mode
ret = arm.motion.exit_position_control()
if ret == StatusCodeEnum.OK:
    print("退出实时位置控制模式成功 / Exit real-time position control mode successful")
else:
    print(f"退出实时位置控制模式失败,错误代码 / Exit real-time position control mode failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.16 UDP 피드백 매개변수 설정

메서드 이름motion.set_udp_feedback_params( flag : bool, ip : str, interval : int, feedback_type : int, DO_list : list[int] = None) -> StatusCodeEnum
설명지정된 IP 주소로 데이터를 푸시하기 위한 UDP 피드백 매개변수 구성
요청 매개변수flag : bool UDP 데이터 푸시를 활성화합니다.
ip : str 수신기 IP 주소;
interval : int 전송 간격(ms);
feedback_type : int 피드백 형식(0: XML, 1: JSON, 2: PROTO);
DO_list : list[int] DO 신호 목록(최대 10개, 선택 사항)
반환 값StatusCodeEnum: 함수 실행 결과
메모매개변수 설정은 UDP 데이터 푸시 기능이 활성화된 경우에만 유효합니다.
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

예제 코드

motion/UDP_pose_feedback.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: UDP位置反馈示例 / Example of using UDP to receive robot pose feedback
"""

import json
import socket

from Agilebot.IR.A.arm import Arm
from Agilebot.IR.A.status_code import StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置udp反馈参数
# [EN] Set UDP feedback parameters
udp_local_ip = "10.27.1.225"
udp_feedback_interval = 4
udp_feedback_type = 1  # 0: xml, 1: json, 2: proto
udp_do_list = []
ret = arm.motion.set_udp_feedback_params(True, udp_local_ip, udp_feedback_interval, udp_feedback_type, udp_do_list)
if ret == StatusCodeEnum.OK:
    print("设置UDP反馈参数成功 / Set UDP feedback parameters successful")
else:
    print(f"设置UDP反馈参数失败,错误代码 / Set UDP feedback parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 使用UDP连接机器人并接收反馈数据
# [EN] Use UDP to connect to the robot and receive feedback data
udp_feedback_port = 5605  # 按控制器UDP反馈端口配置修改 / Update to match controller UDP feedback port
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_sock.settimeout(2.0)
udp_sock.bind((udp_local_ip, udp_feedback_port))


# [ZH] 接收UDP反馈数据示例
# [EN] Example of receiving UDP feedback data
for _ in range(50):
    try:
        data, addr = udp_sock.recvfrom(2048)
    except socket.timeout:
        print("UDP接收超时 / UDP receive timeout")
        continue
    if udp_feedback_type == 1:
        try:
            payload = json.loads(data.decode("utf-8", errors="ignore"))
            print(f"UDP反馈 / UDP feedback from {addr}\n")
            print(f"关节坐标 / AIPos: {payload.get('AIPos')}\n")
            print(f"笛卡尔坐标 / RIst: {payload.get('RIst')}\n")
        except json.JSONDecodeError:
            print(f"UDP反馈解析失败 / Failed to parse UDP feedback: {data}")
    else:
        print(f"UDP反馈原始数据 / UDP raw feedback from {addr}: {data}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
udp_sock.close()
ret = arm.motion.set_udp_feedback_params(False, udp_local_ip, udp_feedback_interval, udp_feedback_type, udp_do_list)
if ret == StatusCodeEnum.OK:
    print("设置UDP反馈参数成功 / Set UDP feedback parameters successful")
else:
    print(f"设置UDP反馈参数失败,错误代码 / Set UDP feedback parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

데이터 푸시 설명

이름필드설명
RIst: Cartesian Position엑스공구 좌표계의 X 방향 값(밀리미터)
와이공구 좌표계의 Y 방향 값(밀리미터)
공구 좌표계의 Z 방향 값(밀리미터)
에이공구 좌표계에서 X축을 중심으로 한 회전(도)
공구 좌표계에서 Y축을 중심으로 한 회전(도)
기음공구 좌표계에서 Z축을 중심으로 한 회전(도)
AIPos: Joint PositionA1-A66개 관절의 값(도)
EIPos: Additional Axis DataEIPos추가 축 데이터
WristBtnState: Wrist Button State버튼 상태1 = 버튼이 눌림, 0 = 버튼이 해제됨
드래그모델드래그 버튼 상태
레코드조인트교육 기록 버튼 상태
일시중지이력서일시정지/Resume 버튼 상태
Digout: DO Output디그아웃디지털 출력 상태(DO)
ProgramStatus: Program StatusProgId프로그램 ID
상태인터프리터 실행 상태:
0 = INTERPRETER_IDLE
1 = INTERPRETER_EXECUTE
2 = INTERPRETER_PAUSED
XPathprogram_name:line_number 형식의 프로그램 조각 반환 값
IPOC: TimestampIPOC타임스탬프

4.2.17 로봇 소프트 제한 가져오기

메서드 이름motion.get_user_soft_limit() -> tuple[list[list[float]], StatusCodeEnum]
설명로봇의 현재 소프트 제한을 가져옵니다.
요청 매개변수없음
반환 값List(List(float)): Robot soft limits information, the first layer of the list represents each axis, and the second layer represents the lower and upper limits of each axis
StatusCodeEnum: Function execution result
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/get_user_soft_limit.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 用户软限位设置获取示例 / Example of obtaining the user's soft limit setting
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前机器人软限位信息
# [EN] Get current robot soft limit information
res, ret = arm.motion.get_user_soft_limit()
if ret == StatusCodeEnum.OK:
    print("获取用户软限位成功 / Get user soft limit successful")
else:
    print(f"获取用户软限位失败,错误代码 / Get user soft limit failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(f"当前机器人软限位信息 / Current robot soft limit information: {res}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18 페이로드 관련 인터페이스

4.2.18.1 현재 활성화된 페이로드 ID 가져오기

메서드 이름motion.payload.get_current_payload() -> tuple[int, StatusCodeEnum]
설명현재 활성화된 페이로드 ID 가져오기
요청 매개변수없음
반환 값int: 페이로드 ID
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/get_current_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 获取当前负载示例 / Example of get the current load
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前激活负载
# [EN] Get current active payload
current_payload_id, ret = arm.motion.payload.get_current_payload()
if ret == StatusCodeEnum.OK:
    print("获取当前负载成功 / Get current payload successful")
else:
    print(f"获取当前负载失败,错误代码 / Get current payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(f"当前激活负载ID为 / Current active payload ID: {current_payload_id}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.2 ID로 페이로드 정보 얻기

메서드 이름motion.payload.get_payload_by_id( payload_id : int) -> tuple[PayloadInfo, StatusCodeEnum]
설명지정된 ID로 페이로드 정보 가져오기
요청 매개변수payload_id : 정수 페이로드 ID
반환 값PayloadInfo: 페이로드 정보
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/get_payload_by_id.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 根据ID获取负载参数示例 / Example of obtaining load parameters based on ID
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取负载
# [EN] Get payload
res, ret = arm.motion.payload.get_payload_by_id(6)
if ret == StatusCodeEnum.OK:
    print("获取负载成功 / Get payload successful")
else:
    print(f"获取负载失败,错误代码 / Get payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"负载ID / Payload ID: {res.id}\n"
    f"负载质量 / Payload mass: {res.weight}\n"
    f"负载注释 / Payload comment: {res.comment}\n"
    f"负载质心 / Payload mass center: {res.mass_center.x}, {res.mass_center.y}, {res.mass_center.z}\n"
    f"负载转动惯量 / Payload inertia moment: {res.inertia_moment.lx}, {res.inertia_moment.ly}, {res.inertia_moment.lz}\n"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.3 지정된 페이로드 활성화

메서드 이름motion.payload.set_current_payload( payload_id : int) -> StatusCodeEnum
설명지정된 ID로 페이로드 활성화
요청 매개변수payload_id : 정수 페이로드 ID
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/set_current_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 当前负载设置示例 / Example of the current load settings
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 指定编号激活负载
# [EN] Activate payload by specified ID
ret = arm.motion.payload.set_current_payload(1)
if ret == StatusCodeEnum.OK:
    print("设置当前负载成功 / Set current payload successful")
else:
    print(f"设置当前负载失败,错误代码 / Set current payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.4 사용자 정의 페이로드 추가

메서드 이름motion.payload.add_payload( payload_info : PayloadInfo) -> StatusCodeEnum
설명로봇 컨트롤러에 사용자 정의 페이로드 추가
요청 매개변수payload_info : PayloadInfo 사용자 정의 페이로드 정보
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/add_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 添加负载使用示例 / Example of Add load usage
"""

from Agilebot import Arm, PayloadInfo, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化负载
# [EN] Initialize payload
new_payload = PayloadInfo()
new_payload.id = 6
new_payload.comment = "Test"
new_payload.weight = 5
new_payload.mass_center.x = -151
new_payload.mass_center.y = 1.0
new_payload.mass_center.z = 75
new_payload.inertia_moment.lx = 0.11
new_payload.inertia_moment.ly = 0.61
new_payload.inertia_moment.lz = 0.54

# [ZH] 添加负载
# [EN] Add payload
ret = arm.motion.payload.add_payload(new_payload)
if ret == StatusCodeEnum.OK:
    print("添加负载成功 / Add payload successful")
else:
    print(f"添加负载失败,错误代码 / Add payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.5 페이로드 삭제

메서드 이름motion.payload.delete_payload( payload_id : int) -> StatusCodeEnum
설명컨트롤러에서 사용자 정의 페이로드 삭제
요청 매개변수payload_id : 정수 페이로드 ID
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+
메모참고: 현재 활성화된 페이로드는 삭제할 수 없습니다. 활성화된 페이로드를 삭제하려면 먼저 다른 페이로드를 활성화한 후 현재 페이로드를 삭제하세요.

예제 코드

motion/delete_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 删除负载使用示例 / Example of delete the load usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 删除指定ID负载
# [EN] Delete payload with specified ID
ret = arm.motion.payload.delete_payload(6)
if ret == StatusCodeEnum.OK:
    print("删除负载成功 / Delete payload successful")
else:
    print(f"删除负载失败,错误代码 / Delete payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print("删除负载6成功 / Delete payload 6 successful")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.6 페이로드 업데이트

메서드 이름motion.payload.update_payload( payload_info : PayloadInfo) -> StatusCodeEnum
설명기존 사용자 정의 페이로드 정보 업데이트
요청 매개변수payload_info : PayloadInfo 사용자 정의 업데이트 페이로드 정보
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/update_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 更新负载使用示例 / Example of updating the load
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取负载
# [EN] Get payload
payload_info, ret_code = arm.motion.payload.get_payload_by_id(6)
payload_info.comment = "Test"
payload_info.weight = 10
payload_info.mass_center.x = -100
payload_info.mass_center.y = 10
payload_info.mass_center.z = 10
payload_info.inertia_moment.lx = 10
payload_info.inertia_moment.ly = 10
payload_info.inertia_moment.lz = 10

# [ZH] 更新负载
# [EN] Update payload
ret = arm.motion.payload.update_payload(payload_info)
if ret == StatusCodeEnum.OK:
    print("更新负载成功 / Update payload successful")
else:
    print(f"更新负载失败,错误代码 / Update payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"负载ID / Payload ID: {payload_info.id}\n"
    f"负载质量 / Payload mass: {payload_info.weight}\n"
    f"负载质心 / Payload mass center: {payload_info.mass_center.x}, {payload_info.mass_center.y}, {payload_info.mass_center.z}\n"
    f"负载转动惯量 / Payload inertia moment: {payload_info.inertia_moment.lx}, {payload_info.inertia_moment.ly}, {payload_info.inertia_moment.lz}\n"
    f"负载注释 / Payload comment: {payload_info.comment}\n"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.7 모든 페이로드 가져오기

메서드 이름motion.payload.get_all_payload() -> tuple[list, StatusCodeEnum]
설명모든 페이로드 정보 가져오기
요청 매개변수없음
반환 값list : 모든 페이로드 정보 목록
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

motion/get_all_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 所有负载获取示例 / Example of all load acquisition
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化Arm类
# [EN] Initialize Arm class
arm = Arm()
# [ZH] 连接控制器
# [EN] Connect to controller
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取所有负载
# [EN] Get all payloads
res, ret = arm.motion.payload.get_all_payload()
if ret == StatusCodeEnum.OK:
    print("获取所有负载成功 / Get all payloads successful")
else:
    print(f"获取所有负载失败,错误代码 / Get all payloads failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
for payload in res:
    print(f"负载ID / Payload ID: {payload[0]}\n负载注释 / Payload comment: {payload[1]}\n")

# [ZH] 结束后断开机器人连接
# [EN] Disconnect from robot after completion
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.8 축 3 수평 레벨 확인

메서드 이름motion.payload.check_axis_three_horizontal() -> tuple[float, StatusCodeEnum]
설명축 3이 수평인지 확인
요청 매개변수없음
반환 값float: 축 3의 수평 각도(도)
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음
메모페이로드 식별을 진행하려면 수평 각도가 -1과 1 사이여야 합니다.

4.2.18.9 페이로드 식별 상태 가져오기

메서드 이름motion.payload.get_payload_identify_state() -> tuple[PayloadIdentifyState, StatusCodeEnum]
설명페이로드 식별 상태 가져오기
요청 매개변수없음
반환 값PayloadIdentifyState 페이로드 식별 상태
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

4.2.18.10 페이로드 식별 시작

메서드 이름motion.payload.start_payload_identify( weight : float, angle : float) -> StatusCodeEnum
설명페이로드 식별 프로세스 시작
요청 매개변수weight : 부동 페이로드 가중치(알 수 없는 경우 -1 사용);
angle : 플로트 축 6 허용 회전 각도(30~90도)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음
메모로봇은 페이로드 식별을 시작하기 전에 페이로드 식별 상태로 들어가야 합니다.

4.2.18.11 페이로드 식별 결과 얻기

메서드 이름motion.payload.payload_identify_result() -> tuple[PayloadInfo, StatusCodeEnum]
설명페이로드 식별 결과 얻기
요청 매개변수없음
반환 값PayloadInfo: 페이로드 식별 결과
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

4.2.18.12 간섭 확인 시작

메서드 이름motion.payload.interference_check_for_payload_identify( weight : float, angle : float) -> StatusCodeEnum
설명페이로드 식별을 위한 간섭 검사 시작
요청 매개변수weight : 부동 페이로드 무게;
angle : 플로트 6축 회전 각도(30~90도)
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

4.2.18.13 페이로드 식별 상태 입력

메서드 이름motion.payload.payload_identify_start() -> StatusCodeEnum
설명페이로드 식별 상태 입력
요청 매개변수없음
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

4.2.18.14 페이로드 식별 상태 종료

메서드 이름motion.payload.payload_identify_done() -> StatusCodeEnum
설명페이로드 식별 상태 종료
요청 매개변수없음
반환 값StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음

4.2.18.15 페이로드 식별 프로세스 완료

메서드 이름motion.payload.payload_identify( weight : float, angle : float) -> tuple[PayloadInfo, StatusCodeEnum]
설명위에 언급된 모든 인터페이스를 포함하여 페이로드 식별 프로세스를 완료합니다. 특별한 요구 사항이 없는 일반 페이로드 식별의 경우 이 인터페이스로 충분합니다.
요청 매개변수weight : 부동 페이로드 가중치(알 수 없는 경우 -1 사용);
angle : 플로트 6축 회전 각도(30~90도)
반환 값PayloadInfo: 페이로드 식별 결과
StatusCodeEnum: 함수 실행 결과
호환 버전협업(Copper): v7.5.2.0+
산업용(Bronze): 지원되지 않음
메모반환된 페이로드는 로봇에 추가되거나 로봇의 기존 페이로드에 기록될 수 있습니다.
전체 프로세스 단계는 다음과 같습니다.
1. 지정된 수평 위치로 이동하여 수평인지 확인
2. 페이로드 식별 상태 입력
3. 페이로드 식별 시작
4. 페이로드 식별 결과 가져오기
5. 페이로드 식별 상태 종료

예제 코드

motion/payload_identify.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 负载识别使用示例 / Example of load identification usage
"""

import time

from Agilebot import Arm, MotionPose, PoseType, ServoStatusEnum, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

motion_pose = MotionPose()
motion_pose.pt = PoseType.JOINT

motion_pose.joint.j1 = 0
motion_pose.joint.j2 = 0
motion_pose.joint.j3 = 0
motion_pose.joint.j4 = 0
motion_pose.joint.j5 = 0
motion_pose.joint.j6 = 0

# [ZH] 运动到指定点
# [EN] Move to specified position
code = arm.motion.move_joint(motion_pose)
if ret == StatusCodeEnum.OK:
    print("运动到指定点成功 / Move to specified position successful")
else:
    print(f"运动到指定点失败,错误代码 / Move to specified position failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

while True:
    # [ZH] 获取伺服状态
    # [EN] Get servo status
    state, ret = arm.get_servo_status()
    if ret == StatusCodeEnum.OK:
        print("获取伺服状态成功 / Get servo status successful")
    else:
        print(f"获取伺服状态失败,错误代码 / Get servo status failed, error code: {ret.errmsg}")
        arm.disconnect()
        exit(1)

    if state == ServoStatusEnum.SERVO_IDLE:
        break
    else:
        time.sleep(1)

# [ZH] 开始负载测定并获取结果
# [EN] Start payload identification and get result
res, ret = arm.motion.payload.payload_identify(-1, 90)
if ret == StatusCodeEnum.OK:
    print("负载识别成功 / Payload identification successful")
else:
    print(f"负载识别失败,错误代码 / Payload identification failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")