Skip to content

4.4 프로그램 포즈 읽기/Write

개요

ProgramPoses 클래스는 로봇 티칭 프로그램에서 포즈 포인트를 읽고, 쓰고, 변환하는 데 사용됩니다. 이 수업을 통해 다음을 수행할 수 있습니다.

  • 지정된 프로그램 및 포즈 인덱스를 찾습니다.
  • 추가, 삭제, 수정 및 쿼리 작업 수행
  • 데카르트 표현과 결합 표현 간 변환

호스트 측 시나리오에서 프로그램 포인트의 일괄 유지 관리 또는 오프라인 편집에 편리합니다.

4.4.1 프로그램에서 지정된 포즈의 값 가져오기

메서드 이름ProgramPoses.Read(string programName , int index , FileType ft = FileType.UserProgram)
설명지정된 프로그램의 지정된 인덱스에서 포즈 값을 가져옵니다.
요청 매개변수programName : 문자열 프로그램 이름
index : int 포즈 인덱스
ft : FileType 파일 형식 (기본값: FileType.UserProgram)
반환 값ProgramPose: 포즈 정보
StatusCode: 연산 실행 결과
호환 로봇 소프트웨어 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

ProgramPoses/ReadProgramPose.cs
cs
using Agilebot.IR;
using Agilebot.IR.ProgramPoses;
using Agilebot.IR.Types;

public class ReadProgramPose
{
    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] Set program name and pose index
            string progName = "test_prog";
            int index = 1;

            // [ZH] 读取指定程序中指定位姿点值
            // [EN] Read specified pose value in specified program
            ProgramPose pose;
            (pose, code) = controller.ProgramPoses.Read(progName, index);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("读取程序位姿点成功/Read Program Pose Success");
                Console.WriteLine($"位姿信息/Pose Info: {pose}");
            }
            else
            {
                Console.WriteLine($"读取程序位姿点失败/Read Program Pose Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.4.2 프로그램에서 지정된 포즈의 값 수정

메서드 이름ProgramPoses.Write(string programName , int index , ProgramPose value , FileType ft = FileType.UserProgram)
설명지정된 프로그램의 지정된 인덱스에서 포즈 값을 수정합니다.
요청 매개변수programName : 문자열 프로그램 이름
index : int 포즈 인덱스
value : ProgramPose 업데이트할 포즈 값
ft : FileType 파일 형식 (기본값: FileType.UserProgram)
반환 값StatusCode: 작업 실행 결과
호환 로봇 소프트웨어 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

ProgramPoses/WriteProgramPose.cs
cs
using Agilebot.IR;
using Agilebot.IR.ProgramPoses;
using Agilebot.IR.Types;

public class WriteProgramPose
{
    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] Set program name and pose index
            string progName = "test_prog";
            int index = 2;

            // [ZH] 生成随机位姿点
            // [EN] Generate random pose
            ProgramPose rndPose = ProgramPose.GenerateRandomPose(index);

            // [ZH] 修改指定程序中指定位姿点值
            // [EN] Write specified pose value in specified program
            code = controller.ProgramPoses.Write(progName, index, rndPose);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("写入程序位姿点成功/Write Program Pose Success");
            }
            else
            {
                Console.WriteLine($"写入程序位姿点失败/Write Program Pose Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.4.3 지정된 프로그램에 포즈 추가

메서드 이름ProgramPoses.Add(string programName , int index , ProgramPose value , FileType ft = FileType.UserProgram)
설명지정된 프로그램의 지정된 인덱스 위치에 새 포즈를 추가합니다.
요청 매개변수programName : string 프로그램 이름
index : int 포즈 인덱스
value : ProgramPose 추가할 포즈 값
ft : FileType 파일 형식 (기본값: FileType.UserProgram)
반환 값StatusCode: 작업 실행 결과
호환 로봇 소프트웨어 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

ProgramPoses/AddProgramPose.cs
cs
using Agilebot.IR;
using Agilebot.IR.ProgramPoses;
using Agilebot.IR.Types;

public class AddProgramPose
{
    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] Set program name and pose index
            string progName = "test_prog";
            int index = 3;

            // [ZH] 生成随机位姿点
            // [EN] Generate random pose
            ProgramPose rndPose = ProgramPose.GenerateRandomPose(index);

            // [ZH] 添加指定程序中指定位姿点
            // [EN] Add specified pose in specified program
            code = controller.ProgramPoses.Add(progName, index, rndPose);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("添加程序位姿点成功/Add Program Pose Success");
            }
            else
            {
                Console.WriteLine($"添加程序位姿点失败/Add Program Pose Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.4.4 프로그램에서 지정된 포즈 삭제하기

메서드 이름ProgramPoses.Delete(string programName , int index , FileType ft = FileType.UserProgram)
설명지정된 프로그램의 지정된 인덱스에 있는 포즈를 삭제합니다.
요청 매개변수programName : 문자열 프로그램 이름
index : int 포즈 인덱스
ft : FileType 파일 형식 (기본값: FileType.UserProgram)
반환 값StatusCode: 작업 실행 결과
호환 로봇 소프트웨어 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

ProgramPoses/DeleteProgramPose.cs
cs
using Agilebot.IR;
using Agilebot.IR.ProgramPoses;
using Agilebot.IR.Types;

public class DeleteProgramPose
{
    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] Set program name and pose index
            string progName = "test_prog";
            int index = 3;

            // [ZH] 删除指定程序中指定位姿点
            // [EN] Delete specified pose in specified program
            code = controller.ProgramPoses.Delete(progName, index);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("删除程序位姿点成功/Delete Program Pose Success");
            }
            else
            {
                Console.WriteLine($"删除程序位姿点失败/Delete Program Pose Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.4.5 지정된 프로그램에서 모든 포즈 가져오기

메서드 이름ProgramPoses.ReadAllPoses(string programName , FileType ft = FileType.UserProgram)
설명지정된 프로그램에서 모든 포즈 정보를 가져옵니다.
요청 매개변수programName : 문자열 프로그램 이름
ft : FileType 파일 형식(기본값: FileType.UserProgram)
반환 값List<ProgramPose>: 포즈 정보 목록
StatusCode: 연산 실행 결과
호환 로봇 소프트웨어 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

ProgramPoses/ReadAllProgramPoses.cs
cs
using Agilebot.IR;
using Agilebot.IR.ProgramPoses;
using Agilebot.IR.Types;

public class ReadAllProgramPoses
{
    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] Set program name
            string progName = "test_prog";

            // [ZH] 读取指定程序中所有位姿点
            // [EN] Read all poses in specified program
            List<ProgramPose> poses;
            (poses, code) = controller.ProgramPoses.ReadAllPoses(progName);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("读取所有程序位姿点成功/Read All Program Poses Success");
                Console.WriteLine($"位姿点数量/Number of poses: {poses.Count}");

                for (int i = 0; i < poses.Count; i++)
                {
                    Console.WriteLine($"位姿点 {i + 1}/Pose {i + 1}: {poses[i]}");
                }
            }
            else
            {
                Console.WriteLine($"读取所有程序位姿点失败/Read All Program Poses Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.4.6 로봇 프로그램에서 포즈 유형 변환

메서드 이름ProgramPoses.ConvertPose(ProgramPose pose , PoseType toType )
설명관절 좌표와 데카르트 공간 좌표 사이에서 로봇 프로그램 포즈를 변환합니다.
요청 매개변수pose : ProgramPose 변환할 포즈 값
toType : PoseType 변환 후 대상 유형
반환 값ProgramPose: 변환된 포즈 정보
StatusCode: 연산 실행 결과
호환 로봇 소프트웨어 버전협업(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

예제 코드

ProgramPoses/ConvertProgramPose.cs
cs
using Agilebot.IR;
using Agilebot.IR.ProgramPoses;
using Agilebot.IR.Types;

public class ConvertProgramPose
{
    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] Set program name and pose index
            string progName = "test_prog";
            int cartIndex = 1;

            // [ZH] 先读取一个位姿点
            // [EN] First read a pose
            ProgramPose cartPose;
            (cartPose, code) = controller.ProgramPoses.Read(progName, cartIndex);
            if (code != StatusCode.OK)
            {
                Console.WriteLine($"读取位姿点失败/Read Pose Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 转换位姿点类型(从笛卡尔坐标转换为关节坐标)
            // [EN] Convert pose type (from Cartesian to Joint coordinates)
            ProgramPose pose;
            (pose, code) = controller.ProgramPoses.ConvertPose(cartPose, PoseType.Joint);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("转换程序位姿点成功/Convert Program Pose Success");
                Console.WriteLine($"原始位姿/Original Pose: {cartPose}");
                Console.WriteLine($"转换后位姿/Converted Pose: {pose}");
            }
            else
            {
                Console.WriteLine($"转换程序位姿点失败/Convert Program Pose Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}