Skip to content

3.4 MotionControl 동작 클래스

개요

MotionControl 은 Agilebot 로봇 운동 제어의 핵심 객체이며 다음 주요 기능을 캡슐화합니다:

  • 속도/가속도 파라미터 관리
  • 좌표계 관리
  • 포즈 변환
  • 궤적 운동 제어
  • 위치 제어 모드
  • 드래그 티칭
  • 페이로드 관리

일반 사용 흐름

Arm 연결이 완료된 후 arm.motionControl 을 통해 Motion 인스턴스를 가져오며, 별도 초기화는 필요하지 않습니다.

3.4.1 로봇 파라미터 가져오기

3.4.1.1 OVC 전역 속도 비율 가져오기

cpp
GetOVC() -> std::pair<Float64, STATUS_CODE>
항목설명
설명현재 로봇의 OVC 전역 속도 비율을 가져옵니다. 비율 범위는 0~1 입니다.
요청 파라미터없음
반환값Float64: 속도 비율, 결과 범위는 0~1
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.1.2 OAC 전역 가속도 비율 가져오기

cpp
GetOAC() -> std::pair<Float64, STATUS_CODE>
항목설명
설명현재 로봇의 OAC 전역 가속도 비율을 가져옵니다. 비율 범위는 0~1.2 입니다.
요청 파라미터없음
반환값Float64: 가속도 비율, 결과 범위는 0~1.2
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.1.3 현재 사용하는 TF 툴 좌표계 번호 가져오기

cpp
GetTF() -> std::pair<int32_t, STATUS_CODE>
항목설명
설명현재 로봇이 사용하는 TF 툴 좌표계 번호를 가져옵니다. 번호 범위는 0~50 입니다.
요청 파라미터없음
반환값int32_t: 툴 좌표계 번호
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.1.4 현재 사용하는 UF 사용자 좌표계 번호 가져오기

cpp
GetUF() -> std::pair<int32_t, STATUS_CODE>
항목설명
설명현재 로봇이 사용하는 UF 사용자 좌표계 번호를 가져옵니다. 번호 범위는 0~50 입니다.
요청 파라미터없음
반환값int32_t: 사용자 좌표계 번호
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.1.5 현재 사용하는 TCS 티칭 좌표계 가져오기

cpp
GetTCS() -> std::pair<TCSType, STATUS_CODE>
항목설명
설명현재 로봇이 사용하는 TCS 티칭 좌표계를 가져옵니다.
요청 파라미터없음
반환값TCSType: 티칭 좌표계 타입
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.2 로봇 파라미터 설정

3.4.2.1 OVC 전역 속도 비율 설정

cpp
SetOVC(Float64 value) -> STATUS_CODE
항목설명
설명로봇의 OVC 전역 속도 비율을 설정합니다.
요청 파라미터value : Float64 속도 비율(범위 0~1, 0보다 커야 함)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.2.2 OAC 전역 가속도 비율 설정

cpp
SetOAC(Float64 value) -> STATUS_CODE
항목설명
설명로봇의 OAC 전역 가속도 비율을 설정합니다.
요청 파라미터value : Float64 가속도 비율(범위 0.01~1.2)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.2.3 현재 사용하는 TF 툴 좌표계 설정

cpp
SetTF(int32_t index) -> STATUS_CODE
항목설명
설명로봇이 현재 사용하는 TF 툴 좌표계를 설정합니다.
요청 파라미터index : int32_t 툴 좌표계 번호(범위 0~50)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.2.4 현재 사용하는 UF 사용자 좌표계 설정

cpp
SetUF(int32_t index) -> STATUS_CODE
항목설명
설명로봇이 현재 사용하는 UF 사용자 좌표계를 설정합니다.
요청 파라미터index : int32_t 사용자 좌표계 번호(범위 0~50)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.2.5 현재 사용하는 TCS 티칭 좌표계 설정

cpp
SetTCS(TCSType tcsType) -> STATUS_CODE
항목설명
설명로봇이 현재 사용하는 TCS 티칭 좌표계를 설정합니다.
요청 파라미터tcsType : TCSType TCS 티칭 좌표계 타입
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.3 포즈 및 변환

3.4.3.1 현재 포즈 가져오기

cpp
GetCurrentPose(PoseType poseType) -> std::pair<MotionPose, STATUS_CODE>
항목설명
설명로봇의 현재 포즈를 가져옵니다. 직교 좌표 공간 또는 관절 좌표계의 포즈 정보를 지원합니다.
요청 파라미터poseType : PoseType 포즈 타입(JOINT 또는 CART)
반환값MotionPose: 로봇 포즈
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.3.2 직교 좌표 포즈를 관절값 포즈로 변환

cpp
ConvertCartToJoint(const MotionPose& pose, int32_t ufIndex = 0, int32_t tfIndex = 0) -> std::pair<MotionPose, STATUS_CODE>
항목설명
설명직교 좌표 포즈를 관절값 포즈로 변환합니다. hasPosture=true 이면 posture 정보가 해석에 참여하고, 그렇지 않으면 6차원 직교 좌표 위치만 사용해 해석합니다.
요청 파라미터pose : MotionPose 로봇의 직교 좌표 포즈(PoseType::CART, posture 를 지정하지 않으면 SDK 가 가능한 posture 를 자동 해석)
ufIndex : int32_t 사용자 좌표계 id(기본값 0)
tfIndex : int32_t 툴 좌표계 id(기본값 0)
반환값MotionPose: 로봇 포즈
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.3.3 관절값 포즈를 직교 좌표 포즈로 변환

cpp
ConvertJointToCart(const MotionPose& pose, int32_t ufIndex = 0, int32_t tfIndex = 0) -> std::pair<MotionPose, STATUS_CODE>
항목설명
설명관절값 포즈를 직교 좌표 포즈로 변환합니다.
요청 파라미터pose : MotionPose 로봇의 관절 포즈
ufIndex : int32_t 사용자 좌표계 id(기본값 0)
tfIndex : int32_t 툴 좌표계 id(기본값 0)
반환값MotionPose: 로봇 포즈
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.3.4 직교 좌표를 관절로 변환(posture 정보 미사용)

cpp
ConvertCartToJointSimple(const MotionPose& pose, int32_t ufIndex = 0, int32_t tfIndex = 0) -> std::pair<MotionPose, STATUS_CODE>
항목설명
설명직교 좌표 포즈를 관절값 포즈로 변환합니다. 이 인터페이스는 입력 posture / hasPosture 를 항상 무시하고 6차원 직교 좌표 위치만 사용합니다.
요청 파라미터pose : MotionPose 로봇의 직교 좌표 포즈
ufIndex : int32_t 사용자 좌표계 id(기본값 0)
tfIndex : int32_t 툴 좌표계 id(기본값 0)
반환값MotionPose: 로봇 포즈
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.3.5 DH 파라미터 가져오기

cpp
GetDHParam() -> std::pair<std::vector<DHParam>, STATUS_CODE>
항목설명
설명로봇의 DH 파라미터를 가져옵니다.
요청 파라미터없음
반환값std::vector<DHParam> : DH 파라미터 목록
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): 지원하지 않음

3.4.3.6 DH 파라미터 설정

cpp
SetDHParam(const std::vector<DHParam>& dhList) -> STATUS_CODE
항목설명
설명로봇의 DH 파라미터를 설정합니다.
요청 파라미터dhList : std::vector<DHParam> DH 파라미터 목록
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): 지원하지 않음

3.4.4 기본 운동

3.4.4.1 관절 공간 운동

cpp
MoveJoint(const MotionPose& pose, Float64 vel, Float64 acc) -> STATUS_CODE
항목설명
설명로봇 말단이 관절 공간의 가장 빠른 경로를 따라 지정 위치로 이동하도록 제어합니다.
요청 파라미터pose : MotionPose 직교 좌표 공간 또는 관절 좌표계 포즈
vel : Float64 속도 비율(범위 0~1)
acc : Float64 가속도 비율(범위 0~1.2)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.4.2 직선 운동

cpp
MoveLine(const MotionPose& pose, Float64 vel, Float64 acc) -> STATUS_CODE
항목설명
설명로봇 말단이 직선을 따라 지정 위치로 이동하도록 제어합니다. 운동 궤적은 두 점 사이의 직선입니다.
요청 파라미터pose : MotionPose 직교 좌표 공간 또는 관절 좌표계 포즈
vel : Float64 말단 속도(범위 1~4000 mm/s)
acc : Float64 가속도 비율(범위 0~1.2)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.4.3 원호 운동

cpp
MoveCircle(const MotionPose& viaPose, const MotionPose& endPose, Float64 vel, Float64 acc) -> STATUS_CODE
항목설명
설명로봇 말단이 원호 궤적을 따라 지정 위치로 이동하도록 제어합니다. 원호는 경유점과 끝점으로 결정됩니다.
요청 파라미터viaPose : MotionPose 경유점 포즈
endPose : MotionPose 끝점 포즈
vel : Float64 말단 속도(범위 1~4000 mm/s)
acc : Float64 가속도 비율(범위 0~1.2)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.4.4 위치 제어 모드 진입

cpp
EnterPositionControl() -> STATUS_CODE
항목설명
설명컨트롤러에 위치 제어 모드 진입을 요청합니다.
요청 파라미터없음
반환값STATUS_CODE: 함수 실행 결과
비고컨트롤러 축 그룹 1 을 고정으로 사용합니다.
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.4.5 위치 제어 궤적 파라미터 설정

cpp
SetPositionTrajectoryParams(int32_t maxTimeoutCount, int32_t timeout, int32_t filterLayer, Float64 wristElbowThreshold, Float64 shoulderThreshold) -> STATUS_CODE
항목설명
설명위치 제어 모드에서 사용하는 궤적 파라미터를 설정합니다.
요청 파라미터maxTimeoutCount : int32_t 최대 타임아웃 횟수, 범위 [1, 100]
timeout : int32_t 타임아웃 시간 또는 전송 간격, 범위 [1, 100] , 단위 ms
filterLayer : int32_t 필터 계층, 범위 [1, 100]
wristElbowThreshold : Float64 손목/팔꿈치 특이점 접근 임계값, 범위 [10, 100]
shoulderThreshold : Float64 어깨 특이점 접근 임계값, 범위 [100, 300]
반환값STATUS_CODE: 함수 실행 결과
비고범위를 벗어난 파라미터는 요청 전 INVALID_PARAMETER 를 반환합니다.
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.4.6 위치 제어 모드 종료

cpp
ExitPositionControl() -> STATUS_CODE
항목설명
설명컨트롤러에 위치 제어 모드 종료를 요청합니다.
요청 파라미터없음
반환값STATUS_CODE: 함수 실행 결과
비고컨트롤러 축 그룹 1 을 고정으로 사용합니다.
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.5 드래그 티칭

3.4.5.1 현재 로봇의 드래그 시작 여부 설정

cpp
EnableDrag(bool dragState) -> STATUS_CODE
항목설명
설명현재 로봇의 드래그 시작 여부를 설정합니다.
요청 파라미터dragState : bool 로봇 드래그 스위치(true 드래그 상태 진입, false 드래그 상태 종료)
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): 지원하지 않음

3.4.5.2 축 잠금 상태 가져오기

cpp
GetDragStatus() -> std::pair<DragStatus, STATUS_CODE>
항목설명
설명현재 로봇의 축 잠금 상태를 가져옵니다. 축 잠금은 티칭 운동에만 적용됩니다.
요청 파라미터없음
반환값DragStatus: 축 잠금 상태, true 는 해당 축이 이동 가능한 상태임을 의미하고 false 는 잠김을 의미합니다.
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): 지원하지 않음

3.4.5.3 로봇 축 잠금 상태 설정

cpp
SetDragStatus(const DragStatus& dragStatus) -> STATUS_CODE
항목설명
설명현재 로봇의 축 잠금 상태를 설정합니다. 축 잠금은 티칭 운동에만 적용됩니다.
요청 파라미터dragStatus : DragStatus 각 축 잠금 상태(기본값은 모두 true: 잠금 해제)
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): 지원하지 않음

3.4.6 기타 인터페이스

3.4.6.1 로봇 소프트 리밋 가져오기

cpp
GetUserSoftLimit() -> std::pair<std::vector<SoftLimit>, STATUS_CODE>
항목설명
설명현재 로봇의 소프트 리밋 정보를 가져옵니다.
요청 파라미터없음
반환값std::vector<SoftLimit> : 로봇 소프트 리밋 정보. 목록의 첫 번째 계층은 각 축을 나타내고, 두 번째 계층은 각 축의 하한 및 상한 리밋 값을 나타냅니다.
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.6.2 UDP 피드백 파라미터 설정

cpp
SetUdpFeedbackParams(bool flag, const std::string& ip, int32_t interval, int32_t feedbackType, const std::vector<int32_t>& doList = {}) -> STATUS_CODE
항목설명
설명로봇이 지정 IP 주소로 데이터를 푸시하도록 UDP 피드백 파라미터를 구성합니다.
요청 파라미터flag : bool UDP 데이터 푸시 활성화 여부
ip : std::string 수신 측 IP 주소
interval : int32_t 전송 간격(밀리초)
feedbackType : int32_t 피드백 데이터 형식(0: XML, 1: JSON, 2: PROTO)
doList : std::vector<int32_t> DO 신호 목록(최대 10개, 선택 사항)
반환값STATUS_CODE: 함수 실행 결과
비고파라미터 설정은 UDP 데이터 푸시 기능이 활성화된 경우에만 유효합니다.
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음

3.4.7 Payload 하위 객체

페이로드 관련 기능은 모두 arm.motionControl.payload 아래에 있습니다.

3.4.7.1 현재 활성화된 페이로드 번호 가져오기

cpp
payload.GetCurrentId() -> std::pair<int32_t, STATUS_CODE>
항목설명
설명현재 활성화된 페이로드 번호를 가져오며, 해당 ID 번호를 반환합니다.
요청 파라미터없음
반환값int32_t: 페이로드 번호
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.7.2 ID 로 페이로드 정보 가져오기

cpp
payload.GetById(int32_t payloadId) -> std::pair<PayloadInfo, STATUS_CODE>
항목설명
설명지정 ID 의 페이로드 정보를 가져옵니다.
요청 파라미터payloadId : int32_t 페이로드 ID 번호
반환값PayloadInfo: 페이로드 정보
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.7.3 지정 페이로드 활성화

cpp
payload.SetCurrentId(int32_t payloadId) -> STATUS_CODE
항목설명
설명ID 로 지정 페이로드를 활성화합니다.
요청 파라미터payloadId : int32_t 페이로드 ID 번호
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.7.4 사용자 정의 페이로드 추가

cpp
payload.Add(const PayloadInfo& payloadInfo) -> STATUS_CODE
항목설명
설명로봇 제어 캐비닛에 사용자 정의 페이로드 정보를 추가합니다.
요청 파라미터payloadInfo : PayloadInfo 사용자 정의 페이로드 정보
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.7.5 페이로드 삭제

cpp
payload.Delete(int32_t payloadId) -> STATUS_CODE
항목설명
설명컨트롤러에서 지정 ID 의 사용자 정의 페이로드를 삭제합니다.
요청 파라미터payloadId : int32_t 페이로드 ID 번호
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+
비고현재 활성화된 페이로드는 삭제할 수 없습니다. 활성 페이로드를 삭제하려면 먼저 다른 페이로드를 활성화한 후 현재 페이로드를 삭제하십시오.

3.4.7.6 페이로드 업데이트

cpp
payload.Update(const PayloadInfo& payloadInfo) -> STATUS_CODE
항목설명
설명로봇에 이미 존재하는 사용자 정의 페이로드 정보를 업데이트합니다.
요청 파라미터payloadInfo : PayloadInfo 업데이트 정보를 포함한 페이로드 객체
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.7.7 모든 페이로드 가져오기

cpp
payload.GetAll() -> std::pair<std::vector<PayloadSummary>, STATUS_CODE>
항목설명
설명모든 페이로드 정보 목록을 가져옵니다.
요청 파라미터없음
반환값std::vector<PayloadSummary> : 모든 페이로드 요약 목록(id 와 comment 만 포함)
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.4.7.8 3축 수평도 검사

cpp
payload.CheckAxisThreeHorizontal() -> std::pair<Float64, STATUS_CODE>
항목설명
설명로봇 3축이 수평인지 검사합니다.
요청 파라미터없음
반환값Float64: 3축의 수평 각도를 반환하며 단위는 도입니다.
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음
비고페이로드 측정을 수행하려면 수평 각도가 -1~1도 사이여야 합니다.

3.4.7.9 페이로드 측정 상태 가져오기

cpp
payload.GetIdentifyState() -> std::pair<PayloadIdentifyState, STATUS_CODE>
항목설명
설명페이로드 측정 상태를 가져옵니다.
요청 파라미터없음
반환값PayloadIdentifyState: 페이로드 측정 상태
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음

3.4.7.10 페이로드 측정 시작

cpp
payload.StartIdentify(Float64 weight, Float64 angle) -> STATUS_CODE
항목설명
설명페이로드 측정 과정을 시작합니다.
요청 파라미터weight : Float64 페이로드 무게(알 수 없으면 -1 입력)
angle : Float64 6축 허용 회전 각도(30~90도)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음
비고페이로드 측정을 시작하기 전에 반드시 페이로드 측정 상태로 진입해야 합니다.

3.4.7.11 페이로드 측정 결과 가져오기

cpp
payload.GetIdentifyResult() -> std::pair<PayloadInfo, STATUS_CODE>
항목설명
설명페이로드 측정 결과를 가져옵니다.
요청 파라미터없음
반환값PayloadInfo: 페이로드 측정 결과
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음

3.4.7.12 간섭 검사 시작

cpp
payload.InterferenceCheckForPayloadIdentify(Float64 weight, Float64 angle) -> STATUS_CODE
항목설명
설명페이로드 측정의 간섭 검사를 시작합니다.
요청 파라미터weight : Float64 페이로드 무게
angle : Float64 6축 회전 각도(30~90도)
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음

3.4.7.13 페이로드 측정 상태로 진입

cpp
payload.IdentifyStart() -> STATUS_CODE
항목설명
설명페이로드 측정 준비 상태로 진입합니다.
요청 파라미터없음
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음

3.4.7.14 페이로드 측정 상태 종료

cpp
payload.IdentifyDone() -> STATUS_CODE
항목설명
설명페이로드 측정 준비 상태를 종료합니다.
요청 파라미터없음
반환값STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음

3.4.7.15 전체 페이로드 측정 흐름

cpp
payload.Identify(Float64 weight, Float64 angle) -> std::pair<PayloadInfo, STATUS_CODE>
항목설명
설명페이로드 측정의 모든 단계를 포함하는 전체 페이로드 측정 흐름입니다. 특별한 요구가 없으면 이 인터페이스만 사용하면 됩니다.
요청 파라미터weight : Float64 페이로드 무게(알 수 없으면 -1 입력)
angle : Float64 6축 회전 각도(30~90도)
반환값PayloadInfo: 페이로드 측정 결과
STATUS_CODE: 함수 실행 결과
호환 버전협동(Copper): v7.5.2.0+
산업용(Bronze): 지원하지 않음
비고반환된 페이로드는 로봇에 새로 추가하거나 로봇에 이미 존재하는 특정 페이로드에 쓸 수 있습니다.
전체 흐름 단계:
1. 지정 수평 위치로 이동하고 수평 여부 검사
2. 페이로드 측정 상태로 진입
3. 페이로드 측정 시작
4. 페이로드 측정 결과 가져오기
5. 페이로드 측정 상태 종료

최소 호출 예제

cpp
#include <iostream>  // 운동 조회 결과를 출력하기 위한 표준 출력 스트림 포함
#include "arm_api.h"  // Arm 메인 진입점을 포함하며, 연결 후 arm.motionControl 으로 운동 인터페이스에 접근
#include "status_code.h"  // SDK 호출 결과를 확인하기 위한 STATUS_CODE 포함
int main()  // 예제 프로그램 진입점
{  // 예제 main 함수 시작
    Arm arm;  // 로봇 세션 객체 생성
    STATUS_CODE connectRet = arm.Connect("192.168.110.2", "");  // 컨트롤러에 연결, 티치 펜던트 주소를 비워 기본 규칙 사용
    if (connectRet != STATUS_CODE::OK) {  // 연결 실패 여부 확인
        return 1;  // 연결 실패 시 바로 종료
    }  // 연결 결과 판단 종료
    auto [ovc, ovcRet] = arm.motionControl.GetOVC();  // 현재 전역 속도 비율 OVC 읽기
    auto [jointPose, poseRet] = arm.motionControl.GetCurrentPose(PoseType::JOINT);  // 현재 관절 포즈 읽기
    if (ovcRet != STATUS_CODE::OK || poseRet != STATUS_CODE::OK) {  // OVC 또는 포즈 읽기 실패 여부 확인
        return 1;  // 읽기 중 하나라도 실패하면 오류 코드 반환
    }  // 읽기 결과 판단 종료
    auto [cartPose, convertRet] = arm.motionControl.ConvertJointToCart(jointPose);  // 관절 포즈를 직교 좌표 포즈로 변환
    if (convertRet != STATUS_CODE::OK) {  // 포즈 변환 실패 여부 확인
        return 1;  // 변환 실패 시 오류 코드 반환
    }  // 포즈 변환 판단 종료
    std::cout << "ovc=" << ovc << "\n";  // 현재 전역 속도 비율 출력
    std::cout << "joint_count=" << jointPose.joint.size() << "\n";  // 관절 배열 길이 출력
    std::cout << "cartesian_count=" << cartPose.cartesian.size() << "\n";  // 직교 좌표 배열 길이 출력
    return 0;  // 예제 정상 종료
}  // 예제 main 함수 종료

시나리오 예제

아래 여러 코드 조각은 "파라미터 읽기/쓰기, 포즈 변환, 기본 운동, 드래그/UDP, 페이로드 관리, 페이로드 측정" 관점에서 이 페이지의 API 를 교차로 다룹니다. 코드 조각은 최소 호출 예제에서 이미 연결에 성공한 arm 객체를 이어받는다고 가정합니다. 로봇을 구동하거나 설정을 변경하는 호출은 주석으로 유지했으며, 현장을 확인한 뒤 실행하십시오.

운동 파라미터 읽기 및 설정

cpp
auto [ovc, ovcRet] = arm.motionControl.GetOVC();  // 현재 전역 속도 비율 읽기
auto [oac, oacRet] = arm.motionControl.GetOAC();  // 현재 전역 가속도 비율 읽기
auto [tf, tfRet] = arm.motionControl.GetTF();  // 현재 툴 좌표계 번호 읽기
auto [uf, ufRet] = arm.motionControl.GetUF();  // 현재 사용자 좌표계 번호 읽기
auto [tcs, tcsRet] = arm.motionControl.GetTCS();  // 현재 티칭 좌표계 읽기
if (ovcRet == STATUS_CODE::OK && oacRet == STATUS_CODE::OK && tfRet == STATUS_CODE::OK && ufRet == STATUS_CODE::OK && tcsRet == STATUS_CODE::OK) {  // 기본 파라미터 읽기가 모두 성공했는지 확인
    std::cout << "ovc=" << ovc << " oac=" << oac << " tf=" << tf << " uf=" << uf << " tcs=" << static_cast<int>(tcs) << "\n";  // 기본 파라미터 조회 결과 출력
}  // 기본 파라미터 읽기 판단 종료
// STATUS_CODE setOvcRet = arm.motionControl.SetOVC(0.5);  // 전역 속도 비율 설정은 컨트롤러 파라미터를 변경하므로 확인 후 실행
// STATUS_CODE setOacRet = arm.motionControl.SetOAC(0.5);  // 전역 가속도 비율 설정은 컨트롤러 파라미터를 변경하므로 확인 후 실행
// STATUS_CODE setTfRet = arm.motionControl.SetTF(tf);  // 현재 툴 좌표계 전환은 이후 운동에 영향을 주므로 확인 후 실행
// STATUS_CODE setUfRet = arm.motionControl.SetUF(uf);  // 현재 사용자 좌표계 전환은 이후 운동에 영향을 주므로 확인 후 실행
// STATUS_CODE setTcsRet = arm.motionControl.SetTCS(tcs);  // 티칭 좌표계 전환은 티칭 동작에 영향을 주므로 확인 후 실행

포즈 읽기 및 좌표 변환

cpp
auto [jointPose, jointRet] = arm.motionControl.GetCurrentPose(PoseType::JOINT);  // 현재 관절 포즈 읽기
if (jointRet != STATUS_CODE::OK) {  // 관절 포즈 읽기 실패 여부 확인
    return;  // 읽기 실패 시 현재 흐름 종료
}  // 관절 포즈 읽기 판단 종료
auto [cartPose, cartRet] = arm.motionControl.ConvertJointToCart(jointPose);  // 관절 포즈를 직교 좌표 포즈로 변환
auto [jointFromCart, cartToJointRet] = arm.motionControl.ConvertCartToJoint(cartPose);  // 직교 좌표 포즈를 관절 포즈로 변환
auto [jointSimple, simpleRet] = arm.motionControl.ConvertCartToJointSimple(cartPose);  // posture 정보를 사용하지 않고 관절 해 구하기
if (cartRet == STATUS_CODE::OK && cartToJointRet == STATUS_CODE::OK && simpleRet == STATUS_CODE::OK) {  // 포즈 변환이 모두 성공했는지 확인
    std::cout << "joint_count=" << jointPose.joint.size() << " cart_count=" << cartPose.cartesian.size() << "\n";  // 포즈 배열 길이 출력
}  // 포즈 변환 결과 판단 종료

기본 운동 실행

cpp
auto [jointPose, jointRet] = arm.motionControl.GetCurrentPose(PoseType::JOINT);  // 운동 대상 예제로 현재 관절 포즈 읽기
auto [cartPose, cartRet] = arm.motionControl.ConvertJointToCart(jointPose);  // 현재 관절 포즈를 직교 좌표 대상 예제로 변환
if (jointRet != STATUS_CODE::OK || cartRet != STATUS_CODE::OK) {  // 운동 대상 준비 실패 여부 확인
    return;  // 대상 준비 실패 시 현재 흐름 종료
}  // 운동 대상 준비 판단 종료
// STATUS_CODE moveJointRet = arm.motionControl.MoveJoint(jointPose, 0.1, 0.1);  // 관절 운동은 로봇을 구동하므로 안전 확인 후 실행
// STATUS_CODE moveLineRet = arm.motionControl.MoveLine(cartPose, 50.0, 0.1);  // 직선 운동은 로봇을 구동하므로 안전 확인 후 실행
// STATUS_CODE moveCircleRet = arm.motionControl.MoveCircle(cartPose, cartPose, 50.0, 0.1);  // 원호 운동은 로봇을 구동하므로 안전 확인 후 실행

DH, 드래그 및 UDP 푸시

cpp
auto [dhList, dhRet] = arm.motionControl.GetDHParam();  // DH 파라미터 목록 읽기
auto [dragStatus, dragRet] = arm.motionControl.GetDragStatus();  // 드래그 티칭 축 잠금 상태 읽기
auto [softLimits, limitRet] = arm.motionControl.GetUserSoftLimit();  // 사용자 소프트 리밋 읽기
if (dhRet == STATUS_CODE::OK || dragRet == STATUS_CODE::OK || limitRet == STATUS_CODE::OK) {  // 확장 조회 중 하나 이상 성공했는지 확인
    std::cout << "dh_count=" << dhList.size() << " soft_limit_count=" << softLimits.size() << "\n";  // DH 및 소프트 리밋 개수 출력
}  // 확장 조회 결과 판단 종료
// STATUS_CODE setDhRet = arm.motionControl.SetDHParam(dhList);  // DH 파라미터 쓰기는 로봇 모델 파라미터를 변경하므로 확인 후 실행
// STATUS_CODE enableDragRet = arm.motionControl.EnableDrag(true);  // 드래그 상태 진입은 로봇 제어 상태를 변경하므로 확인 후 실행
// STATUS_CODE setDragRet = arm.motionControl.SetDragStatus(dragStatus);  // 축 잠금 상태 변경은 드래그 티칭에 영향을 주므로 확인 후 실행
// STATUS_CODE udpRet = arm.motionControl.SetUdpFeedbackParams(true, "192.168.110.10", 100, 1, std::vector<int32_t>{0, 1});  // UDP 푸시 구성은 피드백 설정을 변경하므로 확인 후 실행

페이로드 조회 및 유지 관리

cpp
auto [payloadId, payloadIdRet] = arm.motionControl.payload.GetCurrentId();  // 현재 페이로드 번호 읽기
auto [payloads, payloadsRet] = arm.motionControl.payload.GetAll();  // 모든 페이로드 요약 읽기
if (payloadIdRet != STATUS_CODE::OK) {  // 현재 페이로드 번호 읽기 실패 여부 확인
    return;  // 읽기 실패 시 현재 흐름 종료
}  // 페이로드 번호 읽기 판단 종료
auto [payloadInfo, payloadRet] = arm.motionControl.payload.GetById(payloadId);  // 페이로드 번호로 페이로드 상세 정보 읽기
if (payloadRet == STATUS_CODE::OK || payloadsRet == STATUS_CODE::OK) {  // 페이로드 조회 중 하나 이상 성공했는지 확인
    std::cout << "payload_id=" << payloadId << " payload_count=" << payloads.size() << "\n";  // 페이로드 조회 요약 출력
}  // 페이로드 조회 결과 판단 종료
// STATUS_CODE setPayloadRet = arm.motionControl.payload.SetCurrentId(payloadId);  // 현재 페이로드 전환은 동역학 파라미터에 영향을 주므로 확인 후 실행
// STATUS_CODE addPayloadRet = arm.motionControl.payload.Add(payloadInfo);  // 페이로드 추가는 컨트롤러 설정을 수정하므로 확인 후 실행
// STATUS_CODE updatePayloadRet = arm.motionControl.payload.Update(payloadInfo);  // 페이로드 업데이트는 컨트롤러 설정을 수정하므로 확인 후 실행
// STATUS_CODE deletePayloadRet = arm.motionControl.payload.Delete(payloadId);  // 페이로드 삭제는 컨트롤러 설정을 수정하므로 확인 후 실행

페이로드 측정 흐름

cpp
auto [axisAngle, axisRet] = arm.motionControl.payload.CheckAxisThreeHorizontal();  // 3축 수평 각도 검사
auto [identifyState, stateRet] = arm.motionControl.payload.GetIdentifyState();  // 페이로드 측정 상태 읽기
auto [identifyResult, resultRet] = arm.motionControl.payload.GetIdentifyResult();  // 페이로드 측정 결과 읽기
if (axisRet == STATUS_CODE::OK || stateRet == STATUS_CODE::OK || resultRet == STATUS_CODE::OK) {  // 페이로드 측정 조회 중 하나 이상 성공했는지 확인
    std::cout << "axis_angle=" << axisAngle << " identify_state=" << static_cast<int>(identifyState) << "\n";  // 페이로드 측정 조회 요약 출력
}  // 페이로드 측정 조회 판단 종료
// STATUS_CODE interferenceRet = arm.motionControl.payload.InterferenceCheckForPayloadIdentify(-1.0, 45.0);  // 간섭 검사는 페이로드 측정 흐름에 접근하므로 확인 후 실행
// STATUS_CODE identifyStartRet = arm.motionControl.payload.IdentifyStart();  // 페이로드 측정 상태 진입은 로봇 상태를 변경하므로 확인 후 실행
// STATUS_CODE startIdentifyRet = arm.motionControl.payload.StartIdentify(-1.0, 45.0);  // 페이로드 측정 시작은 측정 흐름을 구동하므로 확인 후 실행
// STATUS_CODE identifyDoneRet = arm.motionControl.payload.IdentifyDone();  // 페이로드 측정 상태 종료는 로봇 상태를 변경하므로 확인 후 실행
// auto [identifiedPayload, identifyRet] = arm.motionControl.payload.Identify(-1.0, 45.0);  // 전체 페이로드 측정은 전체 흐름을 실행하므로 확인 후 실행

예제 코드

cpp17/motion_basic/src/main.cpp
cpp
#include "query_motion_state/run.h"
#include "query_current_pose/run.h"
#include "convert_pose/run.h"
#include "query_limits/run.h"
#include "write_motion_config/run.h"
#include "run_motion_apis/run.h"

int main(void)
{
    // [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
    // [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
    return RunMotionBasicQueryMotionState();
    // return RunMotionBasicQueryCurrentPose();
    // return RunMotionBasicConvertPose();
    // return RunMotionBasicQueryLimits();
    // return RunMotionBasicWriteMotionConfig();
    // return RunMotionBasicRunMotionApis();
}
cpp17/motion_pose/src/main.cpp
cpp
#include "query_current_pose/run.h"
#include "convert_joint_to_cart/run.h"
#include "convert_cart_to_joint/run.h"

int main(void)
{
    // [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
    // [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
    return RunMotionPoseQueryCurrentPose();
    // return RunMotionPoseConvertJointToCart();
    // return RunMotionPoseConvertCartToJoint();
}
cpp17/motion_drag/src/main.cpp
cpp
#include "query_drag_status/run.h"
#include "enable_drag/run.h"
#include "set_drag_status/run.h"

int main(void)
{
    // [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
    // [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
    return RunMotionDragQueryDragStatus();
    // return RunMotionDragEnableDrag();
    // return RunMotionDragSetDragStatus();
}
cpp17/motion_payload/src/main.cpp
cpp
#include "query_payload_info/run.h"
#include "manage_payloads/run.h"
#include "identify_payload/run.h"

int main(void)
{
    // [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
    // [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
    return RunMotionPayloadQueryPayloadInfo();
    // return RunMotionPayloadManagePayloads();
    // return RunMotionPayloadIdentifyPayload();
}