4.4 프로그램 포즈 읽기 및 쓰기
개요
ProgramPose 인터페이스는 로봇 티치 펜던트 프로그램에서 포즈 포인트를 읽고, 쓰고, 변환하는 데 사용됩니다. program_pose 모듈을 통해 다음을 수행할 수 있습니다.
- 특정 프로그램 및 포인트 인덱스 찾기
- CRUD 작업 수행
- 데카르트 표현과 결합 표현 간 전환
이를 통해 호스트 PC 시나리오에서 프로그램 포인트의 일괄 유지 관리 또는 오프라인 편집이 용이해집니다.
4.4.1 프로그램에서 지정된 포즈의 값 가져오기
| 메서드 이름 | program_pose.read( program_name : str, index : int, program_type : str = USER_PROGRAM) -> tuple[ProgramPose, StatusCodeEnum] |
|---|---|
| 설명 | 프로그램에서 지정된 인덱스를 가진 포즈의 값을 가져옵니다. |
| 요청 매개변수 | program_name : str 프로그램 이름. index : int 포즈 인덱스. program_type : str 프로그램 유형(기본값 USER_PROGRAM). |
| 반환 값 | ProgramPose: 포즈 정보. StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.4.2 프로그램에서 지정된 포즈의 값 수정
| 메서드 이름 | program_pose.write( program_name : str, index : int, value : ProgramPose, program_type : str = USER_PROGRAM) -> StatusCodeEnum |
|---|---|
| 설명 | 지정된 프로그램에서 지정된 인덱스로 포즈의 값을 수정합니다. |
| 요청 매개변수 | program_name : str 프로그램 이름. index : int 포즈 인덱스. value : ProgramPose 업데이트할 포즈 값입니다. program_type : str 프로그램 유형(기본값 USER_PROGRAM). |
| 반환 값 | StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.4.3 지정된 프로그램에서 모든 포즈 가져오기
| 메서드 이름 | program_pose.read_all_poses( program_name : str, program_type : str = USER_PROGRAM) -> tuple[list[ProgramPose], StatusCodeEnum] |
|---|---|
| 설명 | 지정된 프로그램에서 모든 포즈 정보를 가져옵니다. |
| 요청 매개변수 | program_name : str 프로그램 이름. program_type : str 프로그램 유형(기본값 USER_PROGRAM). |
| 반환 값 | list[ProgramPose]: 포즈 정보 목록입니다. StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.4.4 프로그램에 포즈 항목 추가
| 메서드 이름 | program_pose.add( program_name : str, index : int, value : ProgramPose, program_type : str = USER_PROGRAM) -> StatusCodeEnum |
|---|---|
| 설명 | 지정된 프로그램의 지정된 인덱스에 새 포즈를 추가합니다. 인덱스가 이미 존재하는 경우 오류를 반환합니다. |
| 요청 매개변수 | program_name : str 프로그램 이름. index : int 포즈 인덱스. value : ProgramPose 추가할 포즈 값입니다. program_type : str 프로그램 유형(기본값 USER_PROGRAM). |
| 반환 값 | StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.4.5 프로그램에 하나 이상의 로봇 자세 값 쓰기
| 메서드 이름 | program_pose.write_poses( program_name : str, poses_to_update : list[ProgramPose]) -> StatusCodeEnum |
|---|---|
| 설명 | 프로그램에 하나 이상의 로봇 포즈 값을 작성합니다. 참고: 기존 포인트만 업데이트할 수 있습니다. new points cannot be added. |
| 요청 매개변수 | program_name : str 프로그램 이름. poses_to_update : list[ProgramPose] 업데이트될 포즈 목록입니다. |
| 반환 값 | StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.4.6 로봇 프로그램 포즈 유형 변환
| 메서드 이름 | ProgramPoses.convert_pose( pose : ProgramPose, from_type : PoseType, to_type : PoseType) -> tuple[ProgramPose, StatusCodeEnum] |
|---|---|
| 설명 | 프로그램에서 관절 좌표와 데카르트 공간 좌표 사이의 로봇 포즈 값을 변환합니다. |
| 요청 매개변수 | pose : ProgramPose 변환할 포즈 값입니다. from_type : PoseType 변환 전 타입입니다. to_type : PoseType 변환 후 원하는 유형입니다. |
| 반환 값 | ProgramPose: 포즈 정보. StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 机器人位姿使用示例 / Example of robot pose usage
"""
from Agilebot import Arm, PoseType, StatusCodeEnum
# [ZH] 初始化捷勃特机器人
# [EN] Initialize the robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the robot
ret = arm.connect("10.27.1.254")
if ret == StatusCodeEnum.OK:
print("机器人连接成功 / Robot connected successfully")
else:
print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
program_name = "test_prog"
# [ZH] 读取所有位姿
# [EN] Read all poses
poses, ret = arm.program_pose.read_all_poses(program_name)
if ret == StatusCodeEnum.OK:
print("读取所有位姿成功 / Read all poses successfully")
# [ZH] 打印位姿信息
# [EN] Print pose information
for p in poses:
print(f"位姿ID / Pose ID:{p.id}\n位姿名称 / Pose name:{p.name}")
else:
print(f"读取所有位姿失败,错误代码 / Read all poses failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 读取单个位姿
# [EN] Read a single pose
pose, ret = arm.program_pose.read(program_name, 1)
if ret == StatusCodeEnum.OK:
print("读取单个位姿成功 / Read single pose successfully")
# [ZH] 打印位姿信息
# [EN] Print pose information
print(
f"位姿ID / Pose ID:{pose.id}\n"
f"位姿名称 / Pose name:{pose.name}\n"
f"位姿类型 / Pose type:{pose.poseData.pt}\n"
f"X:{pose.poseData.cartData.baseCart.position.x}\n"
f"Y:{pose.poseData.cartData.baseCart.position.y}\n"
f"Z:{pose.poseData.cartData.baseCart.position.z}\n"
f"J1:{pose.poseData.joint.j1}\n"
f"J2:{pose.poseData.joint.j2}\n"
f"J3:{pose.poseData.joint.j3}\n"
)
else:
print(f"读取单个位姿失败,错误代码 / Read single pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 修改位姿
# [EN] Modify pose
pose.comment = "SDK_TEST_COMMENT"
ret = arm.program_pose.write(program_name, 1, pose)
if ret == StatusCodeEnum.OK:
print("修改位姿成功 / Modify pose successfully")
else:
print(f"修改位姿失败,错误代码 / Modify pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 转换位姿
# [EN] Convert pose
converted_pose, ret = arm.program_pose.convert_pose(pose, PoseType.CART, PoseType.JOINT)
if ret == StatusCodeEnum.OK:
print("转换位姿成功 / Convert pose successfully")
else:
print(f"转换位姿失败,错误代码 / Convert pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 打印位姿信息
# [EN] Print pose information
print(
f"位姿ID / Pose ID:{converted_pose.id}\n"
f"位姿名称 / Pose name:{converted_pose.name}\n"
f"位姿类型 / Pose type:{converted_pose.poseData.pt}\n"
f"X:{converted_pose.poseData.cartData.baseCart.position.x}\n"
f"Y:{converted_pose.poseData.cartData.baseCart.position.y}\n"
f"Z:{converted_pose.poseData.cartData.baseCart.position.z}\n"
f"J1:{converted_pose.poseData.joint.j1}\n"
f"J2:{converted_pose.poseData.joint.j2}\n"
f"J3:{converted_pose.poseData.joint.j3}\n"
)
# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")