Skip to content

공유메모리

공유메모리 매니저

Indy Shared Memory는 Shared Memory Manager로부터 생성되었습니다.

  • Namespace : NRMKFramework

  • Header : NRMKFramework/shmem/ShmemManager.hpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ShmemManager(shmem_t * shm)
ShmemManager(std::string shmName, unsigned int size)
~ShmemManager()

bool readMemory(uint32_t address, uint32_t size, void * ptrData)
bool write Memory(uint32_t address, uint32_t size, void const * ptrData)
bool readMemoryWait(uint32_t address, uint32_t size, void * ptrData, bool tryWait)
bool writeMemoryWait(uint32_t address, uint32_t size, void * ptrData, bool tryWait)

void * getPtr(uint32_t address)
template <typename T>T * getPtrObjByAddr(uint32_t address)
template <typename T>T & getPtrObjByAddr(uint32_t address)
void resetMemory()

void wait()
bool tryWait()
void post()


std::string getName()
uint32_t getSize()
shmem_t * getMemoryInfo()
unsigned char * getMemoryPtr()

NRMKFramework 2.0에서는 Indy Shared Memory를 통해 로봇 제어나 데이터 읽기, 통신, 직접변수 등 뉴로메카 로봇과 관련된 다양한 API를 제공합니다. Indy Shared Memory에 대한 정보는 아래 표와 같으며, 이 값들로 Shared Memory Manager를 통해서 Indy Shared Memory에 접근 할 수 있습니다.

Shared Memory Name Shared Memory Size
IndySHM 16777216 (0x1000000; 16MB)

공유 데이터 구조체

이 구조체들은 로봇의 실시간 데이터, 제어 데이터, 상태 데이터 등과 같은 정보를 포함하고 있습니다.

  • Namespace : NRMKIndy::SharedData

  • Header : NRMKFramework/Indy/SharedMemory/SharedData.h

RobotRTSharedData

RobotRTSharedData는 로봇의 실시간 데이터와 EtherCAT 정보를 포함합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
struct RobotRTSharedData {
    double time;
    uint64_t taskTime;
    uint64_t taskTimeMax;
    uint64_t computeTime;
    uint64_t computeTimeMax;
    uint64_t ecatTime;
    uint64_t ecatTimeMax;
    uint32_t ecatMasterState;
    uint32_t ecatSlaveNum;
    uint16_t coeStatus[MAX_JOINT_DOF];
}
  • double time : 로봇이 실행된 시간

  • uint64_t taskTime : 로봇을 제어할 때, 한 틱당 걸린 시간

  • uint64_t taskTimeMax : 로봇 실행 중에 가장 높은 taskTime

  • uint64_t computeTime : 한 틱당 로봇 경로 계산, 충돌 감지, Emergency 검출 등 알고리즘과 관련된 총 계산 시간

  • uint64_t computeTimeMax : 로봇 실행 중 가장 높은 computeTime

  • uint64_t ecatTime : 한 틱당 로봇 제어를 위한 EtherCAT 통신 시간

  • uint64_t ecatTimeMax : 로봇 실행 중 가장 높은 ecatTime

  • uint32_t ecatMasterState : EtherCAT Master 상태

  • uint32_t ecatSlaveNum : 연결된 EtherCAT Slave 의 갯수

  • uint16_t coeStatus : 각 Joint의 모터에 대한 coeStatus

Note

Indy7 로봇의 경우, MAX_JOINT_DOF 값은 6이며 배열의 Index는 Joint 번호와 일치합니다 (0에서 5까지 사용).

RobotControlSharedData

RobotControlSharedData는 Joint 각도, Joint 속도, 토크, Task 포지션 등을 포함합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
struct RobotControlSharedData {
    double time;
    int32_t cmode;
    int32_t tCmode;
    double q[MAX_JOINT_DOF];
    double qdot[MAX_JOINT_DOF];
    double qd[MAX_JOINT_DOF];
    double qdotd[MAX_JOINT_DOF];
    double qdotref[MAX_JOINT_DOF];
    double qddot[MAX_JOINT_DOF];
    double qddotd[MAX_JOINT_DOF];
    double qddotref[MAX_JOINT_DOF];
    double p[6];
    double pd[6];
    double pdot[6];
    double pdotd[6];
    double pdotref[6];
    double pddot[6];
    double pddotd[6];
    double pddotref[6];
    double tau[MAX_JOINT_DOF];
    double tauext[MAX_JOINT_DOF];
    double taugrav[MAX_JOINT_DOF];
    double tauidyn[MAX_JOINT_DOF];
    double tauref[MAX_JOINT_DOF];
    double Fext[6];
    int qState[MAX_JOINT_DOF];
    int qBrake[MAX_JOINT_DOF];
}
  • double time : 로봇이 실행된 시간
  • int32_t cmode : 로봇의 제어 모드

CMode Description
0 현재 위치 고수
1 Joint 제어 (속도 기반)
2 Task 제어 (속도 기반)
3 직접교시 모드
4 임피던스 제어
5 정지
6 안전정지
7 Joint 조깅
8 Task 조깅
9 Joint 제어 (시간 기반)
10 Task 제어 (시간 기반)
11 Joint 복구

  • int32_t tCmode : 로봇의 Task 제어 기준좌표계

    Value Description
    0 Reference Frame (Global) Base
    1 TCP (Tool) Base

  • double q[MAX_JOINT_DOF] : 로봇의 Joint 각도

  • double qdot[MAX_JOINT_DOF] : 로봇의 Joint 속도

  • double qd[MAX_JOINT_DOF] : 로봇의 목표 Joint 각도

  • double qdotd[MAX_JOINT_DOF] : 로봇의 목표 Joint 속도

  • double qdotref[MAX_JOINT_DOF] : 로봇의 Reference Joint 속도 (제어 계산 중간값, 디버깅용 값으로 볼 수 있음)

  • double qddot[MAX_JOINT_DOF] : 로봇의 Joint 가속도

  • double qddotd[MAX_JOINT_DOF] : 로봇의 목표 Joint 가속도

  • double qddotref[MAX_JOINT_DOF] : 로봇의 Reference Joint 가속도

  • double p[6] : 로봇의 Task 좌표 (Reference Frame 기준)

    • Task 값의 순서 : UVWXYZ
  • double pd[6] : 로봇의 Task 목표 위치 좌표

  • double pdot[6] : 로봇의 Task 속도

  • double pdotd[6] : 로봇의 목표 Task 속도

  • double pdotref[6]: 로봇의 Reference Task 속도

  • double pddot[6] : 로봇의 Task 가속도

  • double pddotd[6] : 로봇의 목표 Task 가속도

  • double pddotref[6] : 로봇의 Reference Task 가속도

  • double tau[JOINT_DOF] : 로봇의 모터에 입력되는 관절 토크 (아래 tauext, taugrav, tauidyn, tauref 4개 값의 합산)

  • double tauext[JOINT_DOF] : 로봇의 모터에 인가되는 외부 토크의 추정값

  • double taugrav[JOINT_DOF] : 로봇이 현재 자세를 유지하기 위해서 필요한 중력 토크

  • double tauidyn[JOINT_DOF] : 로봇이 목표 지점으로 이동하기 위하여 필요한 토크

  • double tauref[JOINT_DOF] : 로봇의 모델에 정의되지 않은 요소의 영향을 제거하기 위해 필요한 토크

  • double Fext[6] : 임피던스 제어에 사용되는 F/T 센서로부터 읽어들인 값

    • 단위 : N (X, Y, Z), Nm (U, V, W)
    • 순서 : XYZUVW
  • int qState[JOINT_DOF] : 로봇의 Joint 모터 상태

    Value Description
    0 Motor Off
    1 Motor On
    2 Motor Ready On (On 이 되기위한 대기상태)

  • int qBrake[JOINT_DOF] : 로봇의 Joint 모터의 브레이크 상태

    Value Description
    0 Brake Off (Release, Open)
    1 Brake On (Hold, Close)

Note

  • SharedData 구조체에서 Task Position, Task Velcoity 등 Task와 관련된 데이터의 배열 순서는 UVWXYZ

  • SharedData 구조체에서 단위

    Description Unit
    Distance [m]
    Angular [rad]
    Time [s]
    Force [N]
    Torque [Nm]
    Velocity [m/s], [rad/s]
    Acceleration [m/s^2], [rad/s^2]

RobotStateSharedData

RobotStateSharedData는 로봇 소프트웨어 프로그램의 상태를 나타냅니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
struct RobotStateSharedData {
    bool isTaskRunning;
    bool isCadkitConnected;
    bool isContyConnected;
    bool isSCMConnected;
    bool isToolConnected;
    bool isDebugMode;
    char programMode;
    char programState;
}
  • bool isTaskRunning : Robot의 제어 SW 프로그램 실행 상태

  • bool isCadkitConnected : CadkitViewer 연결 상태

  • bool isContyConnected : Conty 연결 상태

  • bool isSCMConnected : SCM 연결 상태

  • bool isToolConnected : Tool 연결 상태

  • bool isDebugMode : 디버그 모드

  • char programMode : 프로그램 모드

Value Description
0 로드 된 프로그램 없음
1 Command 프로그램 (Cadkit 등)
2 Conty에서 작성된 프로그램
3 Script로 작성된 프로그램

  • char programState : 프로그램 상태

Value Description
0 정지
1 실행 중
2 일시정지

RobotControlStatusSharedData

RobotControlStatusSharedData는 로봇의 제어 상태를 포함합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
struct RobotControlStatusSharedData {
    bool isReady;
    bool isEmergencyState;
    bool isCollided;
    bool isErrorState;
    bool isBusy;
    bool isMoveFinished;
    bool isHome;
    bool isZero;
    bool isInResetting;
    bool isInTeaching;
    bool isDirectTeaching;
}
  • bool isReady : 로봇 동작 가능 (모든 Servo On)

  • bool isEmergencyState : 비상 상태 (비상정지, 충돌 및 에러 상항 모두 포함)

  • bool isCollided : 충돌 상태

  • bool isErrorState : 로봇 에러 상태

  • bool isBusy : 로봇이 움직이고 있는 상태

  • bool isMoveFinished : 로봇 Move 명령이 정상적으로 완료된 상태

  • bool isHome : 로봇이 home 포지션에 있는 상태

  • bool isZero : 로봇이 zero 포지션에 있는 상태

  • bool isInResetting : 로봇이 리셋 중인 상태

  • bool isInTeaching : 로봇 교시중인 상태 (직접교시, Jogging, eModi 등)

  • bool isDirectTeaching : 로봇이 직접교시 모드인 상태

RobotConfigSharedData

RobotConfigSharedData는 로봇의 설정값을 나타냅니다. 멤버변수를 통해 현재 로봇의 정보와 설정 상태를 알 수 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
struct RobotConfigSharedData {
    char name[256];
    char buildVersion[128];
    char buildDate[128];
    char robotId[128]
    char stepId[128];
    int numBodies;
    int numJoints;
    int jointDof;
    double wTime;
    double wTimeTask;
    int jointVelBoundaryLevel;
    int jointAccBoundaryLevel;
    int taskVelBoundaryLevel;
    int taskAccBoundaryLevel;
    int collisionLevel;
    int refFrameType;
    double toolProperties[4];
    double defaultTcp[6];
    double compTcp[6];
    double refFrameTRef[6];
    double refFramePoints[3][3];
    double jointHome[JOINT_DOF];
    double taskHome[6]
    double defaultJointBlendRadius
    double defaultTaskBlendRadius
}
  • char name[256] : 로봇 이름 (모델명)

  • char buildVersion[128] : 로봇 빌드 버전

  • char buildDate[128] : 로봇 빌드 날짜

  • char robotId[256] : 로봇 고유 시스템 ID

  • char stepId[128] : STEP 제어기 시스템 ID

  • int numBodies : 로봇의 Body 개수

  • int numJoints : 로봇의 Joint 개수

  • int jointDof : 로봇의 자유도 (일반적으로 Joint 개수와 같음)

  • double wTime : 시간기반 JointMove에서 웨이포인트 사이의 시간 간격 (최소값 0.5)

  • double wTimeTask : 시간기반 TaskMove에서 웨이포인트 사이의 시간 간격 (최소값 0.5)

  • int jointVelBoundaryLevel : 속도기반 JointMove에서 속도 레벨 (1~9)

  • int jointAccBoundaryLevel : 속도기반 JointMove에서 가속도 레벨(1~9)

  • int taskVelBoundaryLevel : 속도기반 TaskMove에서 속도 레벨(1~9)

  • int taskAccBoundaryLevel : 속도기반 TaskMove에서 가속도 레벨(1~9)

  • int collisionLevel : 충돌 감도 레벨 (1~5)

  • int refFrameType : Referece Frmae 설정 타입

    Value Description
    0 기본값 (0번 Body; Base)
    1 Direct (XYZUVW 값)
    2 Planar (3점 평면)
    3 Circular (3점 원)

  • double toolProperties[4] : Tool Property 값 (Mass, X, Y, Z)

  • double defaultTcp[6] : 기본 TCP 설정값

  • double compTcp[6] : TCP 보정값

  • double refFrameTRef[6] : 설정된 Reference Frame값 (Base 기준 XYZUVW좌표로 표현)

  • double refFramePoints[3][3] : 3점을 이용해 ReferenceFrame 을 설정했을 시 3점의 XYZ 좌표

  • double jointHome[JOINT_DOF] : Joint Home 포지션

  • double taskHome[6] : Task Home 포지션 (임피던스 제어 기준점)

  • double defaultJointBlendRadius : JointMove에서 블렌딩 적용 시 기본 반경 거리 [m]

  • double defaultTaskBlendRadius : TaskMove에서 블렌딩 적용 시 기본 반경 각도 [rad]

RobotEmergencySharedData

RobotEmergencySharedData는 로봇의 최근 에러 데이터를 포함합니다. 여기서 확인할 수 있는 에러 데이터는 RobotControlStatusSharedData 구조체의 isEmergencyState가 true 일 때 의미가 있습니다.

1
2
3
4
5
6
struct RobotEmergencySharedData {
    int errorCode;
    int argsInt[3];
    double argsDouble[3];
    double time;
}

* int errorCode : Emergency Event 코드

Value Description
0 비상정지 버튼, 비상정지 신호 등으로 인한 로봇의 비상정지
1 충돌 감지
2 Joint 포지션 제한 초과
3 속도/가속도 제한 초과
4 모터 상태 에러
5 토크 제한 초과
6 EtherCAT연결 끊김
7 경로 위치 계산 에러
8 EndTool로부터 비상정지 신호 수신으로 인한 로봇의 비상정지
9 특이점 도달
10 과전류
12 Joint 포지션 제한 근처
13 속도 제한 근처
14 특이점 근처

  • int argsInt[3] : 각 에러 상황에 대한 추가 정보

  • double argsDouble[3] : 각 에러 상황에 대한 추가 정보

UserConfigSharedData

UserConfigSharedData는 로봇에 대해 사용자 정의 설정에 대한 정보를 포함합니다.

1
2
3
struct UserConfigSharedData {
    int registeredDefaultProgramIdx;
}
  • int registeredDefaultProgramIdx : 현재 등록된 기본 프로그램의 목록 (0~9)

SmartDIOSharedData

SmartDIOSharedData는 STEP의 GPIO나 CB의 Digital I/O포트를 매핑한 SmartDIO를 포함하여, SharedMemory를 통해 사용할 수 있게 합니다.

Note

SmartDIO의 매핑 정보나 자세한 사항은 CB 문서를 참조

1
2
3
4
struct SmartDIOSharedData {
    bool smartDI[32];
    bool smartDO[32];
}
  • bool smartDO[32] : 각 Index에 대한 SmartDO 출력 값

  • bool smartDI[32] : 각 Index에 대한 SmartDI 입력 값

SmartAIOSharedData

SmartAIOSharedData는 CB의 Analog I/O포트를 매핑한 SmartAIO를 표현하여, SharedMemory를 통해 사용할 수 있게 합니다.

1
2
3
4
struct SmartAIOSharedData {
    uint16_t smartAI[4];
    uint16_t smartAO[4];
}
  • uint16_t smartAO[32] : 각 Index에 대한 SmartAO 출력 값

  • uint16_t smartAI[32] : 각 Index에 대한 SmartAI 입력 값

ExtraIOData

ExtraIOData는 SmartIO를 활용할 수 있는 DIO, AIO를 제외한, Indy Control Box (CB)에서 지원하는 IO데이터를 표현하기 위한 구조체입니다. 현재로서는 로봇이나 CB의 CAN 포트를 이용한 FTSensor 데이터만 지원합니다.

1
2
3
4
5
6
struct ExtraIOData {
    int16_t ftRobotCanRaw[6];
    double ftRobotCanTr[6];
    int16_t ftCBCanRaw[6];
    double ftCBCanTr[6];
}
  • int16_t ftRobotCanRaw[6]: 로봇 CAN 포트의 FTSensor Raw 데이터

  • double ftRobotCanTr[6] : 로봇 CAN 포트의 FTSensor 처리값

  • int16_t ftCBCanRaw[6]: Control Box CAN 포트의 FTSensor Raw 데이터

  • double ftCBCanTr[6] : Control Box CAN 포트의 FTSensor 처리값

공유 데이터 함수

이 함수들은 Wrapping 함수로써, Shared Memory Manager를 이용하여 Shared Memory로부터 원하는 데이터를 얻을 수 있습니다.

  • Namespace : NRMKIndy::SharedData
  • Header : NRMKFramework/Indy/SharedMemory/SharedData.h

RobotRTSharedData

  • Getting as Reference
1
2
3
4
void getRTData (
    NRMKFramework::ShmemManager & indyShm,
    RobotRTSharedData & rtData
)
  • Getting as Copy
1
2
3
RobotRTSharedData getRTData (
    NRMKFramework::ShmemManager & indyShm
)
  • NRMKFramework::ShmemManager & indyShm : Indy Shared Memory와 연결된 Shared Memory Manager

Note

이처럼 SharedData 구조체를 받아오는 함수들은 모두 NRMKFramework::ShmemManager & indyShm 파라미터를 가지고 있습니다. 이 indyShm파라미터는 반드시 Indy Shared Memory와 연결된 Shared Memory Manager여야만 합니다.

RobotControlSharedData

  • Getting as Reference
1
2
3
4
void getControlData (
    NRMKFramework::ShmemManager & indyShm,
    RobotControlSharedData & ctrlDa3ta
)
  • Getting as Copy
1
2
3
RobotControlSharedData getControlData (
    NRMKFramework::ShmemManager & indyShm
)

RobotStateSharedData

  • Getting as Reference
1
2
3
4
void getRobotStateData (
    NRMKFramework::ShmemManager & indyShm,
    RobotStateSharedData & stateData
)
  • Getting as Copy
1
2
3
RobotStateSharedData getRobotStateData (
    NRMKFramework::ShmemManager & indyShm
)

RobotControlStatusSharedData

  • Getting as Reference
1
2
3
4
void getControlStatusData (
    NRMKFramework::ShmemManager & indyShm,
    RobotControlStatusSharedData & ctrlStatusData
)
  • Getting as Copy
1
2
3
RobotControlStatusSharedData getControlStatusData (
    NRMKFramework::ShmemManager & indyShm
)

RobotConfigSharedData

  • Getting as Reference
1
2
3
4
void getRobotConfigData (
    NRMKFramework::ShmemManager & indyShm,
    RobotConfigSharedData & configData
)
  • Getting as Copy
1
2
3
RobotConfigSharedData getRobotConfigData (
    NRMKFramework::ShmemManager & indyShm
)

RobotEmergencySharedData

  • Getting as Reference
1
2
3
4
void getEmergencyData (
    NRMKFramework::ShmemManager & indyShm,
    RobotEmergencySharedData & emgData
)
  • Getting as Copy
1
2
3
RobotErrorSharedData getEmergencyData (
    NRMKFramework::ShmemManager & indyShm
)
  • Reset the Data
1
2
3
4
void resetEmergencyData (
    NRMKFramework::ShmemManager & indyShm,
    RobotErrorSharedData & emgData
)

UserConfigSharedData

  • Getting as Reference
1
2
3
4
void getUserConfigData (
    NRMKFramework::ShmemManager & indyShm,
    UserConfigSharedData & userConfigData
)
  • Getting as Copy
1
2
3
UserConfigSharedData getUserConfigData (
    NRMKFramework::ShmemManager & indyShm
)

SmartDIOSharedData

  • Getting as Reference
1
2
3
4
void getSmartDIO (
    NRMKFramework::ShmemManager & indyShm,
    SmartDIOSharedData & dio
)
  • Getting as Copy
1
2
3
SmartDIOSharedData getSmartDIO (
    NRMKFramework::ShmemManager & indyShm
)
  • Getting as Pointer
1
2
3
4
void getPtrSmartDIO (
    NRMKFramework::ShmemManager & indyShm,
    SmartDIOSharedData ** ptrDio
)
  • Getting one by one through index
1
2
3
4
bool getSmartDI (
    NRMKFramework::ShmemManager & indyShm,
int diNum
)
  • Getting as array
1
2
3
4
void getSmartDI (
    NRMKFramework::ShmemManager & indyShm,
    bool * smartDI
)
  • Getting one by one through index
1
2
3
4
bool getSmartDO (
    NRMKFramework::ShmemManager & indyShm,
    int doNum
)
  • Setting one by one through index
1
2
3
4
5
void setSmartDO (
    NRMKFramework::ShmemManager & indyShm,
    int doNum,
    bool doVal
)
  • Setting with array
1
2
3
4
void setSmartDO (
    NRMKFramework::ShmemManager & indyShm,
    const bool * smartDO
)

SmartAIOSharedData

  • Getting as Reference
1
2
3
4
void getSmartAIO (
    NRMKFramework::ShmemManager & indyShm,
    SmartAIOSharedData & aio
)
  • Getting as Copy
1
2
3
SmartAIOSharedData getSmartAIO (
    NRMKFramework::ShmemManager & indyShm
)
  • Getting as Pointer
1
2
3
4
void getPtrSmartAIO (
    NRMKFramework::ShmemManager & indyShm,
    SmartAIOSharedData ** ptrAio
)
  • Getting one by one through index
1
2
3
4
uint16_t getSmartAI (
    NRMKFramework::ShmemManager & indyShm,
    int aiNum
)
  • Getting one by one through index
1
2
3
4
uint16_t getSmartaO (
    NRMKFramework::ShmemManager & indyShm,
    int aoNum
)
  • Setting one by one through index
1
2
3
4
5
void setSmartAO (
NRMKFramework::ShmemManager & indyShm,
    int aoNum,
    uint16_t doVal
)

ExtraIOData

  • Getting as Reference
1
2
3
4
void getExtraIOData (
    NRMKFramework::ShmemManager & indyShm,
    ExtraIOData & extIOData
)
  • Getting as Copy
1
2
3
ExtraIOData getExtraIOData (
    NRMKFramework::ShmemManager & indyShm
)
  • Getting as Pointer
1
2
3
4
void getPtrExtraIOData (
    NRMKFramework::ShmemManager & indyShm,
    ExtraIOData ** ptrExtIOData
)

공유 명령

공유 명령은 SharedMemory를 이용하여 로봇에게 명령을 내리거나 설정을 변경 할 수 있는 기능을 지원합니다.

  • Namespace : NRMKIndy::SharedData
  • Header : NRMKFramework/Indy/SharedMemory/SharedCommand.h

  • Commander
1
2
3
4
Commander (
    NRMKFramework::ShmemManager & indyShm,
    int jointDof
)
  • NRMKFramework::ShmemManager & indyShm : Indy Shared Memory와 연결된 Shared Memory Manager

  • int jointDof : Commander로 제어할 로봇의 JOINT_DOF 값 (반드시 현재 실행중인 로봇과 일치해야함)


동작


  • stopMove

로봇의 현재 모션을 중지합니다.

1
void stopMove ()

  • jointMoveHome

Joint 제어를 통해 로봇을 Home 포지션으로 이동합니다.

비동기 모드일 경우, 로봇에게 명령을 내리고 즉시 true를 반환합니다. 만약 로봇이 명령을 실행할 수 없는 상태라면 즉시 false를 반환합니다. 동기 모드에서는 로봇이 이동이 끝날 때 까지 대기 후 true가 반환되며, 이동을 할 수 없는 상태거나 명령 실행 중에 이동에 이상이 생겼을 경우 false가 반환됩니다. (이하 모든 Move 함수 동일)

1
bool jointMoveHome ()
  • Return Value : bool : 로봇의 명령 성공 수행 여부

  • jointMoveZero

Joint 제어를 통해 로봇을 Zero 포지션으로 이동합니다.

1
bool jointMoveZero ()

  • jointMoveTo

Joint 제어를 통해 로봇을 목표 Joint 포지션으로 이동합니다.

1
bool jointMoveTo (const double * q)
  • const double * q : 각 Joint의 포지션를 나타내는 JOINT_DOF 길이의 double 배열

Note

Commander 클래스에서 파라미터의 각도 단위는 Randian입니다.


  • jointMoveBy

Joint 제어를 통해 로봇을 현재 Joint 포지션으로부터 상대좌표값만큼 이동합니다.

1
bool jointMoveBy (const double * q)
  • const double * q : 현재 Joint 포지션으로부터 목표 Joint 포지션의 상대좌표를 나타내는 JOINT_DOF 길이의 double 배열

  • taskMoveTo

Task Space 제어를 통해 로봇을 목표 Task 포지션로 이동시킵니다. (Reference Frame 기준 Task좌표값)

Caution

로봇의 Task Space제어나 Task 위치에 대하여 잘 인지하고 있을 때만 이 함수를 사용합니다. Task Space 제어에 대하여 잘 이해하지 못한 상태에서 사용하면 로봇을 잘못된 위치로 이동하여 위험할 수 있습니다.

1
bool taskMoveTo (const double * p)
  • const double * p : Referece Frame기준의 Task 포지션, XYZUVW 순서.

  • taskMoveBy

Task Space제어를 통해 현재 Task 포지션로부터 로봇을 상대좌표값만큼 이동시킵니다.

1
bool taskMoveBy (const double * p)
  • const double * p : Referece Frame기준의 Task 포지션, XYZUVW 순서. XYZ 좌표 이동은 Task Control Base 에 따라서 Reference 기준 XYZ좌표계인지, TCP 기준 XYZ좌표계인지 결정. UVW는 항상 TCP 기준 좌표

참고

  • Task Position의 XYZ 등 Move나 Configration 함수에서 거리의 단위는 [m]

  • Task Position, Task Velcoity 등 Task와 관련된 함수의 파라미터 값 데이터의 배열 순서는 XYZUVW


  • jointMoveWaypoint

Joint 제어를 통해 로봇을 목표 waypoint의 Joint 포지션로 이동시킵니다. Conty를 통해 티칭한 후 설정된 프로그램에 해당 waypoint 이름이 등록되어 있어야 합니다.

1
bool jointMoveWaypoint (const char * waypointName)
  • const char * waypointName : 목표 waypoint 이름

  • taskMoveWaypoint

Task Space 제어를 통해 로봇을 목표 waypoint의 Task 포지션으로 이동시킵니다.

1
bool taskMoveWaypoint (const char * waypointName)
  • const char * waypointName : 목표 waypoint 이름

  • executeMoveCmd

Move Command 를 실행합니다. Move Command는 한 개 이상의 waypoint를 포함하며, Conty를 통해 설정한 기본 프로그램에 해당 Move Command가 등록되어 있어야합니다.

1
bool executeMoveCmd (const char * cmdMoveName)
  • const char * cmdMoveName : 실행할 Move Command의 이름

설정

본 절에서는 Robot의 Configuration 함수들을 소개합니다. 모든 함수들의 반환값은 bool 타입이며, Configuration 이 완료 된 경우 true를 반환합니다.

비동기 모드의 경우 최종적으로 configuration이 제대로 반영되었는지는 알 수 없으며, 동기모드일 경우 configuration 완료 후 성공/실패 여부를 반환합니다.


  • setCollisionSensitivityLevel

충돌 감도 변경

1
bool setCollisionSensitivityLevel(int level)
  • int level : 충돌 감도 레벨 (1~5, 5가 가장 둔감, Conty와 동일).

  • setTaskControlBaseMode

Task Space 제어에서, Task Control Base 변경

1
bool setTaskControlBaseMode(int taskCtrlMode)
  • int taskCtrlMode : Task Control Base 기준좌표계 (0: Reference Frame, 1: TCP), UVW는 항상 TCP 기준

  • setJointHome

Joint Home 포지션을 설정

1
bool setJointHome(const double *q)
  • const double * q : Home 포지션의 joint 각도, JOINT_DOF 길이의 doube 배열

  • setJointHomeCurrPos

현재 로봇 위치로 Joint Home 포지션을 설정

1
bool setJointHomeCurrPos()

  • setDefaultTcp

기본 TCP 좌표를 설정, 기본 TCP 좌표 변경시 TCP 보정값은 리셋

1
bool setDefaultTcp(const double * defaultTcp)
  • const double * defaultTcp : 기본 Tcp 좌표 설정 (XYZUVW 순서)

  • applyTcpCompensation

TCP 보정값 적용. 최종 TCP값은 기본TCP좌표 + TCP 보정값

1
bool applyTcpCompensation(const double * compTcp)
  • const double * compTcp : TCP 보정값

  • revokeTcpCompensation

TCP 보정값 적용 해제 (기본 TCP값으로 돌아감)

1
bool revokeTcpCompensation()

  • setRefFrameDirect

XYZUVW 좌표값을 통한 Reference Frame 설정. 0번 Body base를 기준으로 XYZ 좌표값만큼, UVW 회전각만큼 축을 이동하여 Reference Frame을 설정

1
bool setRefFrameDirect(double * tref)
  • const double * tref : Refence Frame 설정 값 (XYZUVW 순서)

  • setJointMoveWaypointTime

시간기반 JointMove의 기본 Waypoint 사이 시간 간격 변경

1
bool setJointMoveWaypointTime(double wTime)
  • double wTime : Waypoint 시간 (단위: 초)

  • setJointMoveVelocityLevel

속도기반 JointMove의 속도 레벨 설정

1
bool setJointMoveVelocityLevel(int level)
  • int level : 속도 Level (1~9, 9가 가장 빠름)

  • setJointMoveBlendingRadiusLevel

JointMove에 블렌딩 적용 시 블렌딩의 반경 레벨 설정

1
bool setJointMoveBlendingRadiusLevel(int level)
  • int level : 블렌딩 반경 레벨 설정 (1~9, 9가 가장 반경이 커 매끄러움)

  • setTaskMoveWaypointTime

시간기반 TaskMove의 기본 Waypoint 사이 시간 간격 변경

1
bool setTaskMoveWaypointTime(double wTimeTask)
  • double wTimeTask : Waypoint 시간 (단위: 초)

  • setTaskMoveVelocityLevel

속도기반 TaskMove의 속도 레벨 설정

1
bool setTaskMoveVelocityLevel(int level)
  • int level : 속도 Level (1~9)

  • setTaskMoveBlendingRadiusLevel

TaskMove에 블렌딩 적용 시 블렌딩의 반경 설정

1
bool setTaskMoveBlendingRadiusLevel(int level)
  • int level : 블렌딩 반경 레벨 (1~9)

직접교시 모드


  • switchDirectTeachingMode

로봇을 직접교시 모드로 설정 (로봇이 정지상태여야 가능)

1
bool switchDirectTeachingMode()

  • finishDirectTeachingMode

로봇을 직접교시 모드에서 기본 모드(자세유지)로 설정 (로봇이 직접교시모드일때만 가능)

1
bool finishDirectTeachingMode()

로봇 프로그램 제어

본 함수들은 Conty에서 로드한 프로그램이나 기본 프로그램으로 설정한 프로그램을 실행/일시정지/정지시킬 때 사용합니다.


  • startCurrProgram

현재 로드되어있는 프로그램 실행 (Conty를 통해 로딩 가능)

1
bool startCurrProgram()

  • stopCurrProgram

현재 실행중인 프로그램 중지

1
bool stopCurrProgram()

  • pauseCurrProgram

현재 실행중인 프로그램 일시중지

1
bool pauseCurrProgram ()

  • resumeCurrProgram

현재 일시중지중인 프로그램 재개

1
bool resumeCurrProgram ()

  • startRegisteredDefaultProgram

현재 등록된 기본 프로그램 실행 (Conty를 통해 등록 또는 아래 함수 이용)

1
bool startRegisteredDefaultProgram ()

  • registerDefaultProgramIdx

Conty에서 저장한 기본 프로그램 #1~10을 기본 프로그램으로 등록. 등록 후 startRegisteredDefaultProgram으로 해당 프로그램 로딩 및 실행 가능.

1
bool registerDefaultProgramIdx (int idx)
  • int idx : Conty에서 저장한 기본 프로그램 (Conty Index: 1~10 / 파라미터 Index: 0~9)

기타


  • setSyncMode

현재 Commander 객체의 동작 모드를 동기 또는 비동기로 설정하는 함수입니다. 객체가 생성될 때 기본값은 비동기 모드입니다.

비동기 모드로 로봇 제어 명령을 할 경우, 명령을 보내고 즉시 반환되며, 명령이 실행되었는지 등은 파악할 수 없고, SharedData의 로봇의 상태를 통해 일부 정보만 파악 할 수 있습니다.

동기 모드일 경우엔, 제어 명령이 끝나야 반환이 되며 반환값을 통해 성공여부를 알 수 있습니다.

1
2
3
void setSyncMode (
    bool bSyncMode=true
)
  • bool bSyncMode : 동기 모드 또는 비동기 모드

  • reset

로봇의 상태를 리셋 (로봇의 비상정지, 에러, 충돌 등의 리셋)하는 함수입니다. 기본적으로 일반적인 리셋 (Soft reset)을 수행하며, 재부팅 리셋 (Hard reset)은 필요시 자동으로 수행됩니다. 사용자가 Hard reset을 원할 경우 파라미터를 통해 실행 가능합니다.

1
2
3
void reset (
    bool isHardReset=false
)
  • bool isHardReset : 로봇 Hard Reset

  • stopEmergency

로봇의 현재 모션을 즉시 중지합니다. 로봇의 모든 모터는 꺼지며, 브레이크가 작동합니다. 이 함수가 호출 된 후에는 로봇이 비상정지 에러 상태가 되며, reset 함수를 호출해주어야 정상 상태로 돌아옵니다.

1
void stopEmergency ()