4.10 좌표계
개요
CoordinateSystem 모듈은 로봇의 사용자 프레임(UF) 및 도구 프레임(TF)을 관리하여 프레임을 추가, 삭제, 업데이트, 쿼리 및 계산할 수 있는 통합 API를 제공합니다.
핵심 기능
- user/tool 좌표계 요약 정보 목록 획득 지원
- user/tool 좌표계 추가, 삭제, 업데이트 및 쿼리 지원
- 여러 입력 포즈를 기반으로 user/tool 좌표계 계산 지원
- 컨트롤러의 프레임 목록을 유지하기 위한 통합 좌표계 관리 인터페이스 제공
- 학습된 점으로부터 새로운 좌표계를 신속하게 해결하기 위한 지원
사용 사례
- 다중 스테이션 설정을 디버깅할 때 일관된 공간 참조 유지
- 도구 전환 시 다양한 도구에 대한 좌표계 관리
- 로봇 좌표계 일괄 관리 및 쿼리
- 학습된 점으로부터 새로운 좌표계를 자동으로 계산
- 복잡한 작업에 좌표계 전환 구현
4.10.1 User/Tool 좌표 목록 가져오기
| 메서드 이름 | coordinate_system.UF/TF.get_coordinate_list() -> tuple[List[Coordinate], StatusCodeEnum] |
|---|---|
| 설명 | user/tool 좌표계의 요약 목록을 가져옵니다. |
| 요청 매개변수 | 없음 |
| 반환 값 | UserCoordSummaryList: 좌표계 요약 정보 목록입니다. StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.10.2 User/Tool 좌표계 추가
| 메서드 이름 | coordinate_system.UF/TF.add( coordinate : Coordinate) -> StatusCodeEnum |
|---|---|
| 설명 | 현재 user/tool 좌표 세트에 좌표계를 추가합니다. |
| 요청 매개변수 | coordinate : Coordinate 추가할 좌표계 정보입니다. |
| 반환 값 | StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.10.3 User/Tool 좌표계 삭제
| 메서드 이름 | coordinate_system.UF/TF.delete( index : int) -> StatusCodeEnum |
|---|---|
| 설명 | 현재 user/tool 좌표 세트에서 좌표계를 삭제합니다. |
| 요청 매개변수 | index : int 좌표계 인덱스입니다. |
| 반환 값 | StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.10.4 User/Tool 좌표계 업데이트
| 메서드 이름 | coordinate_system.UF/TF.update( coordinate : Coordinate) -> StatusCodeEnum |
|---|---|
| 설명 | 현재 user/tool 좌표 세트의 좌표계를 업데이트합니다. |
| 요청 매개변수 | coordinate : Coordinate 업데이트된 좌표계 정보입니다. |
| 반환 값 | StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.10.5 User/Tool 좌표계 가져오기
| 메서드 이름 | coordinate_system.UF/TF.get( index : int) -> tuple[Coordinate, StatusCodeEnum] |
|---|---|
| 설명 | 현재 user/tool 좌표 세트에서 지정된 좌표계를 가져옵니다. |
| 요청 매개변수 | index : int 좌표계 인덱스입니다. |
| 반환 값 | Coordinate: 좌표계 정보. StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.10.6 User/Tool 좌표계 계산
| 메서드 이름 | coordinate_system.UF/TF.calculate(pose: List[Position]) -> tuple[Position, StatusCodeEnum] |
|---|---|
| 설명 | 입력된 포즈를 기반으로 user/tool 좌표 정보를 계산하고, 계산된 포즈를 반환합니다. |
| 요청 매개변수 | pose : List[Position] 입력 포즈 목록입니다. |
| 반환 값 | Position: 계산된 포즈 정보. StatusCodeEnum: 함수 실행 결과. |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 坐标系系统使用示例 / Example of coordinate system usage
"""
from Agilebot import Arm, Coordinate, Position, 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(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("机器人连接成功 / Robot connected successfully")
# [ZH] 定义位姿数据用于计算工具坐标系
# [EN] Define pose data for calculating tool coordinate system
pose_data = [
Position(341.6861424047297, -33.70972073115479, 430.1721970894897, 0.001, 6.745, -180.000),
Position(365.4597874970455, 77.95089759481547, 441.39040857936857, -7.343, 12.620, 138.857),
Position(410.64702354574865, 10.394172666192766, 468.26089261578807, 18.719, 29.151, 155.585),
Position(483.2519847999948, 112.71925218513972, 448.39071038067624, 33.947, 69.714, 133.597),
]
# [ZH] 根据位姿数据计算工具坐标系
# [EN] Calculate tool coordinate system based on pose data
pose, ret = arm.coordinate_system.TF.calculate(pose_data)
if ret != StatusCodeEnum.OK:
print(f"计算工具坐标系失败,错误代码 / Calculate tool coordinate system failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("计算工具坐标系成功 / Calculate tool coordinate system successfully")
print(f"计算得到的位姿 / Calculated pose:X={pose.x}, Y={pose.y}, Z={pose.z}, A={pose.a}, B={pose.b}, C={pose.c}")
# [ZH] 创建工具坐标系对象
# [EN] Create tool coordinate system object
tf = Coordinate(5, "test_tf", "测试工具坐标系", pose)
# [ZH] 删除可能存在的ID为5的坐标系(避免冲突)
# [EN] Delete coordinate system with ID 5 if exists (avoid conflict)
arm.coordinate_system.TF.delete(5)
# [ZH] 添加工具坐标系名字 / Add tool coordinate system
ret = arm.coordinate_system.TF.add(tf)
if ret != StatusCodeEnum.OK:
print(f"添加工具坐标系失败,错误代码 / Add tool coordinate system failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("添加工具坐标系成功 / Add tool coordinate system successfully")
# [ZH] 获取工具坐标系列表
# [EN] Get tool coordinate system list
tf_list, ret = arm.coordinate_system.TF.get_coordinate_list()
if ret != StatusCodeEnum.OK:
print(f"获取工具坐标系列表失败,错误代码 / Get tool coordinate system list failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("获取工具坐标系列表成功 / Get tool coordinate system list successfully")
print(f"工具坐标系列表 / Tool coordinate system list: {tf_list}")
# [ZH] 获取指定的工具坐标系
# [EN] Get a specific tool coordinate system
tf, ret = arm.coordinate_system.TF.get(5)
if ret != StatusCodeEnum.OK:
print(f"获取工具坐标系失败,错误代码 / Get tool coordinate system failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("获取工具坐标系成功 / Get tool coordinate system successfully")
print(f" TF ID: {tf.id}")
print(f" TF Name: {tf.name}")
print(f" TF Comment: {tf.comment}")
print(f" X: {tf.data.x}, Y: {tf.data.y}, Z: {tf.data.z}")
print(f" A: {tf.data.a}, B: {tf.data.b}, C: {tf.data.c}")
# [ZH] 更新工具坐标系的名称
# [EN] Update tool coordinate system name
tf.name = "updated_test_tf"
ret = arm.coordinate_system.TF.update(tf)
if ret != StatusCodeEnum.OK:
print(f"更新工具坐标系失败,错误代码 / Update tool coordinate system failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("更新工具坐标系成功 / Update tool coordinate system successfully")
# [ZH] 删除工具坐标系
# [EN] Delete tool coordinate system
ret = arm.coordinate_system.TF.delete(5)
if ret != StatusCodeEnum.OK:
print(f"删除工具坐标系失败,错误代码 / Delete tool coordinate system failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print("删除工具坐标系成功 / Delete tool coordinate system successfully")
# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")