4.11 좌표계 클래스
개요
CoordinateSystem 클래스는 로봇 사용자 프레임(UF) 및 툴 프레임(TF)을 관리하는 데 사용되며 좌표계 추가, 삭제, 업데이트, 쿼리 및 계산을 위한 통합 인터페이스를 제공합니다.
핵심 기능
- user/tool 좌표계 요약 정보 목록 가져오기 지원
- user/tool 좌표계 추가, 삭제, 업데이트 및 쿼리 지원
- 여러 입력 포즈를 기반으로 user/tool 좌표계 계산 지원
- 컨트롤러에서 좌표계 목록을 쉽게 유지 관리할 수 있도록 통합 좌표계 관리 인터페이스를 제공합니다.
사용 사례
- 도구 전환 중 다양한 도구 좌표계 관리
- 다중 스테이션 디버깅 중에 일관된 공간 참조 유지
- 로봇 좌표계 일괄 관리 및 조회
- 학습된 점에서 새로운 사용자 /tool 좌표계를 빠르게 계산합니다.
4.11.1 User/Tool 좌표계 목록 가져오기
| 메서드 이름 | CoordinateSystem.GetCoordinateList(CoordinateType type ) |
|---|---|
| 설명 | 지정된 좌표 유형에 대한 모든 좌표계 요약 정보 목록을 가져옵니다. |
| 요청 매개변수 | type : CoordinateType 좌표 유형(UF 또는 TF) |
| 반환 값 | List<CoordSummary>: 좌표 요약 목록 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
4.11.2 User/Tool 좌표계 추가
| 메서드 이름 | 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 User/Tool 좌표계 삭제
| 메서드 이름 | 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 User/Tool 좌표계 업데이트
| 메서드 이름 | 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 User/Tool 좌표계 정보 가져오기
| 메서드 이름 | 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 User/Tool 좌표계 계산
| 메서드 이름 | CoordinateSystem.Calculate(CoordinateType type , List<Position> pose ) |
|---|---|
| 설명 | 입력 포즈 포인트에서 user/tool 좌표계를 계산합니다. |
| 요청 매개변수 | type : CoordinateType 좌표 유형(UF 또는 TF) pose : 목록<Position> 입력 포즈 목록입니다. 4점 또는 7점 방법을 지원합니다. 4점 방식에서는 도구가 동일한 목표점을 가리키는 4가지 포즈를 제공합니다. 7-point 방식에서는 원점, X방향 포인트, Y방향 포인트를 추가로 제공합니다. 각도 단위: 도(°). |
| 반환 값 | Position: 계산된 좌표 포즈 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
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;
}
}