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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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): 지원되지 않음 |
예제 코드
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): 지원되지 않음 |
예제 코드
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): 지원되지 않음 |
예제 코드
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): 지원되지 않음 |
예제 코드
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): 지원되지 않음 |
예제 코드
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): 지원되지 않음 |
예제 코드
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 Position | A1-A6 | 6개 관절의 값(도) |
| EIPos: Additional Axis Data | EIPos | 추가 축 데이터 |
| WristBtnState: Wrist Button State | 버튼 상태 | 1 = 버튼이 눌림, 0 = 버튼이 해제됨 |
| 드래그모델 | 드래그 버튼 상태 | |
| 레코드조인트 | 교육 기록 버튼 상태 | |
| 일시중지이력서 | 일시정지/Resume 버튼 상태 | |
| Digout: DO Output | 디그아웃 | 디지털 출력 상태(DO) |
| ProgramStatus: Program Status | ProgId | 프로그램 ID |
| 상태 | 인터프리터 실행 상태: 0 = INTERPRETER_IDLE 1 = INTERPRETER_EXECUTE 2 = INTERPRETER_PAUSED | |
| XPath | program_name:line_number 형식의 프로그램 조각 반환 값 | |
| IPOC: Timestamp | IPOC | 타임스탬프 |
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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+ |
| 메모 | 참고: 현재 활성화된 페이로드는 삭제할 수 없습니다. 활성화된 페이로드를 삭제하려면 먼저 다른 페이로드를 활성화한 후 현재 페이로드를 삭제하세요. |
예제 코드
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+ |
예제 코드
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+ |
예제 코드
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. 페이로드 식별 상태 종료 |
예제 코드
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")