Skip to content

4.11 坐标系类

概述

CoordinateSystem 类用于管理机器人用户坐标系(UF)与工具坐标系(TF),提供新增、删除、更新、查询和计算坐标系的统一接口。

核心功能

  • 支持获取用户 / 工具坐标系摘要信息列表
  • 支持添加、删除、更新和查询用户 / 工具坐标系
  • 支持根据输入的多组位姿计算用户 / 工具坐标系
  • 提供统一的坐标系管理接口,便于维护控制器中的坐标系列表

使用场景

  • 工具切换时管理不同工具坐标系
  • 多工位调试时保持一致的空间参考
  • 批量管理和查询机器人坐标系
  • 根据示教点快速计算新的用户 / 工具坐标系

4.11.1 获取用户 / 工具坐标系列表

方法名CoordinateSystem.GetCoordinateList(CoordinateType type )
描述根据指定的坐标系类型,获取所有坐标系摘要信息列表
请求参数type : CoordinateType 坐标系类型(UF 或 TF)
返回值List<CoordSummary>: 坐标系摘要信息列表
StatusCode: 获取操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.11.2 添加用户 / 工具坐标系

方法名CoordinateSystem.Add(CoordinateType type , Coordinate coordinate )
描述根据指定的坐标系类型,添加一个新的坐标系
请求参数type : CoordinateType 坐标系类型(UF 或 TF)
coordinate : Coordinate 要添加的坐标系信息
返回值StatusCode: 添加操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.11.3 删除用户 / 工具坐标系

方法名CoordinateSystem.Delete(CoordinateType type , int index )
描述根据指定的坐标系类型和索引,删除对应坐标系
请求参数type : CoordinateType 坐标系类型(UF 或 TF)
index : int 坐标系索引
返回值StatusCode: 删除操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.11.4 更新用户 / 工具坐标系

方法名CoordinateSystem.Update(CoordinateType type , Coordinate coordinate )
描述根据指定的坐标系类型和坐标系信息,更新对应坐标系
请求参数type : CoordinateType 坐标系类型(UF 或 TF)
coordinate : Coordinate 要更新的坐标系信息
返回值StatusCode: 更新操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.11.5 获取用户 / 工具坐标系信息

方法名CoordinateSystem.Get(CoordinateType type , int index )
描述根据指定的坐标系类型和索引,获取对应坐标系信息
请求参数type : CoordinateType 坐标系类型(UF 或 TF)
index : int 坐标系索引
返回值Coordinate: 坐标系信息数据
StatusCode: 获取操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.11.6 计算用户 / 工具坐标系

方法名CoordinateSystem.Calculate(CoordinateType type , List<Position> pose )
描述根据输入的位姿点集,计算用户 / 工具坐标系
请求参数type : CoordinateType 坐标系类型(UF 或 TF)
pose : List<Position> 输入位姿列表,支持 4 点法或 7 点法。4 点法为 4 组工具指向同一点的位姿;7 点法在此基础上增加坐标原点、X 方向点和 Y 方向点。角度单位为度(°)
返回值Position: 计算后的坐标系位姿
StatusCode: 计算操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

CoordinateSystem/TFCoordinateTest.cs
cs
using Agilebot.IR;
using Agilebot.IR.CoordinateSystem;
using Agilebot.IR.Types;

public class TFCoordinateTest
{
    /// <summary>
    /// 测试 TF 坐标系的计算、添加、获取列表、获取单个坐标系、更新和删除操作
    /// </summary>
    public static StatusCode Run(string controllerIP, bool useLocalProxy = true)
    {
        // [ZH] 初始化捷勃特机器人
        // [EN] Initialize the Agilebot robot
        Arm controller = new Arm(controllerIP, useLocalProxy);

        // [ZH] 连接捷勃特机器人
        // [EN] Connect to the Agilebot robot
        StatusCode code = controller.ConnectSync();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "连接成功/Successfully connected.");

        if (code != StatusCode.OK)
        {
            return code;
        }

        try
        {
            // [ZH] 准备测试数据
            // [EN] Prepare test data
            var poseData = new List<Position>
            {
                new Position(847.0999429718556, 166.7999999999656, 276.8195498896624, 90, 0, -70),
                new Position(809.0227439212846, 166.79999999994843, 459.80354972094295, 90, 0, -45),
                new Position(717.1223240422377, 166.79999999993265, 654.0891675073312, 90, 0, -30),
                new Position(572.917828754028, 166.79999999992168, 825.1862002007621, 90, 0, -40),
            };

            Console.WriteLine("开始TF坐标系测试/Starting TF Coordinate Test");

            // [ZH] 计算坐标系
            // [EN] Calculate coordinate system
            Coordinate calculatedCoord = new Coordinate();
            (Position coord, StatusCode calculateCode) = controller.CoordinateSystem.Calculate(
                CoordinateType.ToolCoordinate,
                poseData
            );

            if (code == StatusCode.OK)
            {
                Console.WriteLine("计算TF坐标系成功/Calculate TF Coordinate Success");
            }
            else
            {
                Console.WriteLine($"计算TF坐标系失败/Calculate TF Coordinate Failed: {code.GetDescription()}");
                return code;
            }
            calculatedCoord.Id = 5;
            calculatedCoord.Data = coord;

            // [ZH] 删除可能存在的坐标系
            // [EN] Delete existing coordinate if exists
            StatusCode deleteCode = controller.CoordinateSystem.Delete(
                CoordinateType.ToolCoordinate,
                calculatedCoord.Id
            );
            Console.WriteLine($"删除现有坐标系/Delete Existing Coordinate: {deleteCode.GetDescription()}");

            // [ZH] 添加坐标系
            // [EN] Add coordinate system
            StatusCode addCode = controller.CoordinateSystem.Add(CoordinateType.ToolCoordinate, calculatedCoord);
            if (addCode == StatusCode.OK)
            {
                Console.WriteLine("添加TF坐标系成功/Add TF Coordinate Success");
            }
            else
            {
                Console.WriteLine($"添加TF坐标系失败/Add TF Coordinate Failed: {addCode.GetDescription()}");
                return addCode;
            }

            // [ZH] 获取坐标系列表
            // [EN] Get coordinate list
            List<CoordSummary> listRes;
            (listRes, code) = controller.CoordinateSystem.GetCoordinateList(CoordinateType.ToolCoordinate);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("获取TF坐标系列表成功/Get TF Coordinate List Success");
                Console.WriteLine($"坐标系列表数量/Coordinate List Count: {listRes.Count}");
            }
            else
            {
                Console.WriteLine($"获取TF坐标系列表失败/Get TF Coordinate List Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 获取单个坐标系
            // [EN] Get single coordinate
            Coordinate getCoord;
            (getCoord, code) = controller.CoordinateSystem.Get(CoordinateType.ToolCoordinate, calculatedCoord.Id);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("获取TF坐标系成功/Get TF Coordinate Success");
                Console.WriteLine($"坐标系名称/Coordinate Name: {getCoord.Name}");
            }
            else
            {
                Console.WriteLine($"获取TF坐标系失败/Get TF Coordinate Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 更新坐标系
            // [EN] Update coordinate system
            getCoord.Name = "test";
            StatusCode updateCode = controller.CoordinateSystem.Update(CoordinateType.ToolCoordinate, getCoord);
            if (updateCode == StatusCode.OK)
            {
                Console.WriteLine("更新TF坐标系成功/Update TF Coordinate Success");
            }
            else
            {
                Console.WriteLine($"更新TF坐标系失败/Update TF Coordinate Failed: {updateCode.GetDescription()}");
                return updateCode;
            }

            // [ZH] 删除坐标系
            // [EN] Delete coordinate system
            deleteCode = controller.CoordinateSystem.Delete(CoordinateType.ToolCoordinate, calculatedCoord.Id);
            if (deleteCode == StatusCode.OK)
            {
                Console.WriteLine("删除TF坐标系成功/Delete TF Coordinate Success");
            }
            else
            {
                Console.WriteLine($"删除TF坐标系失败/Delete TF Coordinate Failed: {deleteCode.GetDescription()}");
                return deleteCode;
            }

            Console.WriteLine("TF坐标系测试完成/TF Coordinate Test Completed");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"执行过程中发生异常/Exception occurred during execution: {ex.Message}");
            code = StatusCode.OtherReason;
        }
        finally
        {
            // [ZH] 关闭连接
            // [EN] Close the connection
            StatusCode disconnectCode = controller.Disconnect();
            if (disconnectCode != StatusCode.OK)
            {
                Console.WriteLine(disconnectCode.GetDescription());
                if (code == StatusCode.OK)
                    code = disconnectCode;
            }
        }

        return code;
    }
}