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] , 단위 msfilterLayer : 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); // 전체 페이로드 측정은 전체 흐름을 실행하므로 확인 후 실행예제 코드
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();
}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();
}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();
}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();
}