Skip to content

4.10 坐标系

说明

CoordinateSystem 模块负责管理机器人用户坐标系(UF)与工具坐标系(TF),提供新增、删除、更新、查询和计算坐标系的统一接口。通过 coordinate_system.UF/TF 可以维护控制器中的坐标系列表或依据示教点快速求解新坐标系,便于多工位调试和工具切换时保持一致的空间参考。

4.10.1 获取用户 / 工具坐标系摘要信息列表

方法名coordinate_system.UF/TF.get_coordinate_list() -> tuple[List[Coordinate], StatusCodeEnum]
描述获取用户 / 工具坐标系的摘要信息列表
请求参数无参数
返回值UserCoordSummaryList:坐标系摘要信息列表
StatusCodeEnum:函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.10.2 添加一个用户 / 工具坐标系

方法名coordinate_system.UF/TF.add( coordinate : Coordinate) -> StatusCodeEnum
描述向当前用户 / 工具坐标系集合中添加一个坐标系
请求参数coordinateCoordinate 要添加的坐标系信息
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.10.3 从当前的用户 / 工具坐标系系统删除一个用户 / 工具坐标系

方法名coordinate_system.UF/TF.delete( index : int) -> StatusCodeEnum
描述从当前的用户 / 工具坐标系集合中删除一个坐标系
请求参数index :int 坐标系编号
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.10.4 从当前的用户 / 工具坐标系系统更新一个用户 / 工具坐标系信息

方法名coordinate_system.UF/TF.update( coordinate : Coordinate) -> StatusCodeEnum
描述在当前的用户 / 工具坐标系集合中更新一个坐标系的信息
请求参数coordinateCoordinate 新的坐标系内容
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.10.5 从当前的用户 / 工具坐标系系统获取一个用户 / 工具坐标系信息

方法名coordinate_system.UF/TF.get( index : int) -> tuple[Coordinate, StatusCodeEnum]
描述从当前的用户 / 工具坐标系集合中获取一个指定的坐标系
请求参数index :int 坐标系编号
返回值Coordinate: 坐标系信息
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.10.6 计算用户 / 工具坐标系信息

方法名coordinate_system.UF/TF.calculate(pose: List[Position]) -> tuple[Position, StatusCodeEnum]
描述根据输入的多组位姿,计算用户 / 工具坐标系,并返回计算得到的位姿结果
请求参数pose :List[Position] 输入的位置信息列表
返回值Position:计算后的位置信息
StatusCodeEnum:函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

coordinate_system.py
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")