坐标系与用户坐标管理接口

头文件:include/tl_interface.h

1. set_user_coordinate_data - 设置用户坐标

方法:set_user_coordinate_data(SOCKETFD socketFd,int userNum, std::vector<double> pos);

功能描述:标定用户坐标。

参数:

  • socketFd:已连接的句柄。
  • userNum:用户坐标系编号。
  • pos:坐标系数据结构体。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
# ----配置用户坐标系----

print("[INFO] **********配置用户坐标系**********")

userNum = 1

user_coord = [10, 20, 30, 0, 0, 0, 0]

ret = set_user_coordinate_data(socket_fd, userNum, user_coord)

if ret != SUCCESS:

    print("[ERROR] 配置用户坐标系失败,程序退出!")

    sys.exit(-1)

print("[INFO] 配置用户坐标系成功")

print()

2. set_user_coord_number - 设置用户坐标编号

方法:set_user_coord_number(SOCKETFD socketFd, int userNum);

参数:

  • socketFd:已连接的句柄。
  • userNum:用户坐标系编号。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

# 设置用户坐标编号

coord_num = 1

# ret = tl.set_user_coord_number(socket_fd, coord_num)

# if ret == 0:

# print(f"用户坐标编号 {coord_num} 设置成功")

# else:

# print(f"用户坐标编号设置失败,错误码:{ret}")

print("设置用户坐标编号接口使用示例")

print(f"目标坐标编号: {coord_num}")

print("请参考具体SDK文档实现用户坐标编号设置")

3. get_user_coord_para - 获取当前使用的用户坐标的参数

方法:get_user_coord_para(SOCKETFD socketFd,int userNum,std::vector<double>& pos);

功能描述:读取当前激活工件坐标系的原点偏移与欧拉旋转姿态参数。

参数:

  • socketFd:已连接的句柄。
  • userNum:用户坐标编号。
  • pos 用户坐标参数。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
def test_get_user_coord_para(arm, ctx):

    """获取用户坐标参数"""

    pos = VectorDouble()

    ret = get_user_coord_para(arm.socket_fd, 0, pos)

    if ret == SUCCESS:

        values = [pos[i] for i in range(min(6, len(pos)))]

        return True, f"用户坐标参数: {print_vector(values)}"

    return True, f"获取返回: {ret}"

4. get_user_coord_number - 获取当前使用的用户坐标编号

方法:get_user_coord_number(SOCKETFD socketFd, int& userNum);

功能描述:读取控制器当前生效的工件坐标系索引号。

参数:

  • socketFd:已连接的句柄。
  • userNum:用户坐标编号。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
def test_get_user_coord_number(arm, ctx):

    """获取当前用户坐标编号"""

    num = -1

    ret, num = get_user_coord_number(arm.socket_fd, num)

    if ret == SUCCESS:

        return True, f"用户坐标编号: {num}"

return True, f"获取返回: {ret}"

5. get_current_coord - 获取当前工作坐标系

方法:get_current_coord(SOCKETFD socketFd, int& coord);

功能描述:获取机器人当前坐标系。

参数:

  • socketFd:已连接的句柄。
  • coord:输出参数,0:关节 1:直角 2:工具 3:用户。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
# ----获取当前工作坐标系----

print("[INFO] **********获取当前工作坐标系**********")

coord = -1

ret, coord = get_current_coord(socket_fd, coord)

if ret != SUCCESS:

    print("[ERROR] 获取当前工作坐标系失败,程序退出!")

    sys.exit(-1)

print("[INFO] 当前坐标系编号为:" + str(coord))

6. set_current_coord - 切换示教运动坐标系

方法:set_current_coord(SOCKETFD socketFd, int coord);

功能描述:设置机器人当前坐标系。

参数:

  • socketFd:已连接的句柄。
  • coord:坐标系类型。
    • 0:关节坐标系。
    • 1:直角坐标系。
    • 2:工具坐标系。
    • 3:用户坐标系。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

# 设置当前坐标系为关节坐标系

coord = 0

ret = tl.set_current_coord(socket_fd, coord)

print(f"设置当前坐标系返回值(ret) = {ret}")

7. calibration_oxy - 三点法自动设置用户坐标系

方法:calibration_oxy(SOCKETFD socketFd, int userNum, std::string xyo);

功能描述:通过输入原点、X 轴点、Y 轴点三组坐标,以三点法计算生成工件用户坐标系。

参数:

  • socketFd:已连接的句柄。
  • userNum:用户坐标编号。
  • xyo:值 'X' 'Y' 'O'。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
# ----三点法自动设置用户坐标系----

print("[INFO] **********三点法自动设置用户坐标系**********")

print("[INFO] 请将机械臂移动到用户坐标系原点O后按Enter键继续...")

input()

ret = calibration_oxy(socket_fd, 1, "O")

if ret != SUCCESS:

    print("[ERROR] 标定原点O失败,错误码: " + str(ret))

    sys.exit(-1)

print("[INFO] 请将机械臂移动到X轴正方向上一点后按Enter键继续...")

input()

ret = calibration_oxy(socket_fd, 1, "X")

if ret != SUCCESS:

    print("[ERROR] 标定X轴方向点失败,错误码: " + str(ret))

    sys.exit(-1)

print("[INFO] 请将机械臂移动到XY平面内Y轴正方向上一点后按Enter键继续...")

input()

ret = calibration_oxy(socket_fd, 1, "Y")

if ret != SUCCESS:

    print("[ERROR] 标定Y轴方向点失败,错误码: " + str(ret))

    sys.exit(-1)

ret = calculate_user_coordinate(socket_fd, 1)

if ret != SUCCESS:

    print("[ERROR] 计算用户坐标系失败,错误码: " + str(ret))

    sys.exit(-1)

print("[INFO] 三点法标定用户坐标系成功")

8. calculate_user_coordinate - 计算用户坐标

方法:calculate_user_coordinate(socketFd, userNumber);

功能描述:计算用户坐标。

参数:

  • socketFd:已连接的句柄。
  • userNumber:用户坐标编号。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

socket_fd = tl.connect_robot("192.168.1.13", "6001")

ret = tl.calculate_user_coordinate(socket_fd, 1)

9. get_target_coord_pos_value - 获取指定坐标下的位置

方法:get_target_coord_pos_value(socketFd, name, targetCoord, targetPos);

功能描述:获取指定点位在目标坐标系下的位置。

参数:

  • socketFd:已连接的句柄。
  • name:点位名(P 点、GP 点、E 点、GE 点),如 "GP0001"。
  • targetCoord:目标坐标系,0 关节、1 基坐标、2 工具、3 用户。
  • targetPos:输出参数,14 位点位数组。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

socket_fd = tl.connect_robot("192.168.1.13", "6001")

target_pos = VectorDouble()

ret = tl.get_target_coord_pos_value(socket_fd, "GP0001", 0, target_pos)

10. get_local_pos_p_value - 获取本地位置变量 P 值

方法:get_local_pos_p_value(socketFd, name, pos);

功能描述:获取局部 P 点。

参数:

  • socketFd:已连接的句柄。
  • name:点位名,范围 P0001 - P9999。
  • pos:输出参数,14 位点位数组。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

socket_fd = tl.connect_robot("192.168.1.13", "6001")

pos = VectorDouble()

ret = tl.get_local_pos_p_value(socket_fd, "P0001", pos)

11. set_default_cartesian_params - 设置笛卡尔参数为默认值

方法:set_default_cartesian_params(SOCKETFD socketFd);

功能描述:设置机械臂末端的笛卡尔参数为默认值。

参数:

  • socketFd:已连接的句柄。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
# ----设置机械臂末端参数为默认值----

print("[INFO] **********设置机械臂末端参数为默认值**********")

ret = set_default_cartesian_params(socket_fd)

if ret != SUCCESS:

    print("[ERROR] 设置机械臂末端参数为默认值失败,错误码: " + str(ret))

    sys.exit(-1)

print("[INFO] 设置机械臂末端参数为默认值成功")