Skip to content

시작하기

개요

Indy Framework 2.0 은 뉴로메카의 로봇 제어에 사용되는 핵심 소프트웨어 프레임워크이며, 뉴로메카에서 자체 개발한 리눅스 기반의 임베디드 제어기 STEP에서 실행됩니다. 본 장에서는 기본적인 인디의 실행방법과 로봇제어 프레임워크의 구조에 대해서 설명합니다. 그리고 Indy Framework가 제공하는 다양한 API의 사용법에 대해 설명합니다. 이를 통해 사용자는 실시간 OS (RTOS)에 대한 전문지식이 없어도 xenomai 기반의 실시간 소프트웨어를 쉽게 만들고 실행, 배치할 수 있습니다.

Indy Framework 구조 및 실행방법

실시간 태스크

실시간 태스크는 정확한 실행시간을 보장하는 태스크를 말합니다. 예를 들어 1000 Hz의 실시간 태스크라면 1초에 1000번이 실행되며, 실행 주기 1ms를 높은 정확도로 보장합니다. Indy Framework은 이벤트구동 방식의 실시간 태스크들로 이루어져 있습니다. Indy Framework을 실행하게 되면 각기 다른 실행주기를 갖는 세 가지 Queue가 생성되며, 가장 높은 실행주기를 갖는 Queue 1은 4000 Hz의 실행주기를 가지고 있습니다.


Timing Event and Realtime Task

실시간성의 보장과 빠른 실행주기는 로봇의 성능에 직접적인 영향을 미치기 때문에 로봇의 제어와 관련된 태스크인 Control Task는 Queue 1에서 실행됩니다. 그 외 다른 실시간 응용 프로그램들은 그 목적에 맞게 각기 다른 Queue로 할당할 수 있습니다.

태스크 매니저와 실행 방법

앞서 언급한 타이밍구동 실시간 태스크들은 TaskManager 에 의해 관리됩니다. TaskManager 는 JSON 설정파일을 통해 실시간 태스크를 불러오고, Queue에 배치하고, 타이밍이벤트를 받아 각 Queue의 태스크들을 실행 시킵니다. TaskManager 는 STEP의 터미널을 통해 다음 명령어로 실행 할 수 있습니다. 윈도우에서 STEP의 터미널 접근하기 위한 방법은 STEP 원격연결 에 설명되어 있습니다.

1
$ sudo TaskManager -j indyDeploy.json

TaskManager 가 실행되면 로봇의 전원이 켜지며 다음과 같은 콘솔 로그 화면이 나타납니다.


이 콘솔로그를 통하여 로봇의 현재 상태를 알 수 있습니다. TaskManager가 실행되고 있는 콘솔에서 키보드 입력 'q' 를 입력하게 되면 TaskManager 와 로봇이 종료됩니다.

Warning

위 방법으로 원격에서 TaskManager을 실행시켰을 경우, 콘솔이 종료되거나, 인터넷 연결이 끊어질 경우 로봇의 전원이 끊어집니다. 이를 원치 않을 경우 nohup 명령어를 사용할 수 있습니다. nohup을 사용할 경우, 콘솔을 종료하여도 TaskManager가 계속 실행됩니다.

1
$ sudo nohup TaskManager -j indyDeploy.json

TaskManager 는 -j 옵션을 통해 앞서 언급한 JSON 설정파일을 입력으로 받아야 합니다. 위 실행방법 예시의 JSON 설정파일인 indyDeploy.json 은 Queue와 태스크에 대한 정보를 가지고 있으며 아래와 같습니다.

indyDeploy.json

 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
30
31
32
33
34
35
36
{
    "TimerRate" : 4000, /*Hz*/
    "HighRate" : 4000, /*Hz*/
    "MediumRate" : 20, /*Hz*/
    "LowRate" : 1, /*Hz*/

    "QueueHigh" :
    [
        {
            "TaskName" : "Indy6DControlTask",
            "SharedLib" : "libIndy6DControlTask.so",
            "Location" : "/home/user/release/TasksDeployment/"
        },
        {
            "TaskName" : "Indy6DLoggingTask",
            "SharedLib" : "libIndy6DLoggingTask.so",
            "Location" : "/home/user/release/TasksDeployment/"
        }
    ],
    "QueueMedium" :
    [
        {
            "TaskName" : "Indy6DCadkitTask",
            "SharedLib" : "libIndy6DCadkitTask.so",
            "Location" : "/home/user/release/TasksDeployment/"
        }
    ],
    "QueueLow" :
    [
      {
        "TaskName" : "Indy6DStateMonitoringTask",
        "SharedLib" : "libIndy6DStateMonitoringTask.so",
        "Location" : "/home/user/release/TasksDeployment/"
      }
    ]
}

2번 줄에는 가장 빠른 Queue의 실행 주기, 3-5는 세 가지 Queue 각각에 대한 실행 주기를 Hz 단위로 설정합니다. 7 - 35 번 줄에서는 각 Queue에서 실행되는 태스크에 대한 정보를 기술합니다.

  • TaskName : 태스크의 이름
  • SharedLib : 태스크 파일 이름
  • Location : 태스크 파일이 위치한 경로

위 예시에서는 4000Hz 실행주기를 갖는 Queue High에는 로봇제어와 관련된 ControlTask와 데이터 저장과 관련된 LoggingTask를 배치하였고, Queue Medium은 20Hz 실행주기를 갖도록 하였으며 뉴로메카의 로봇 시뮬레이션 툴 CadKit을 실행시키도록 하였습니다. 그리고 실행주기가 1Hz인 Queue Low에는 콘솔창에서 로봇의 상태를 지속적으로 확인할 수 있는 StateMonitoringTask를 배치하였습니다.

이와 같이 JSON 설정파일을 구성한 후 TaskManager 를 실행하게 되면 설정파일 대로 각 Queue에 태스크들이 자동으로 배치되어 실행되게 됩니다. 여기서 .so 파일은 Shared library로 빌드된 응용 프로그램입니다. 뉴로메카 컨트롤박스에는 아래에서 설명하는 여러 응용프로그램 파일들이 있습니다. 이 외에도 사용자는 목적에 맞게 실시간 태스크 응용프로그램을 개발하여 로봇제어와 함께 실행할 수 있습니다. 로봇 구동에 필요한 실시간 태스크 파일과 TaskManager 실행 파일은 STEP의 /home/user/release/TasksDeployment 디렉토리에서 확인 할 수 있습니다.

1
2
3
4
5
6
7
8
├── TasksDeployment
    ├── TaskManager
    ├── indyDeploy.json
    ├── libIndy6DControlTask.so
    ├── libIndy6DControlTaskSim.so
    ├── libIndy6DLoggingTask.so
    ├── libIndy6DModbusTCPTask.so
    └──  ...

기본적으로 제공되는 실시간 응용프로그램에 대한 설명은 아래와 같습니다.

  • libIndy6DControlTask.so :
    로봇을 움직이기 위하여 반드시 실행되어야 하는 핵심 태스크 입니다. Conty와 IndyDCP는 본 태스크가 실행중일 때 연결 할 수 있습니다.

  • libIndy6DControlTaskSim.so :
    로봇을 실제 구동하지 않고 시뮬레이션 모드로만 실행하기 위해 필요한 태스크입니다. Conty와 IndyDCP를 사용하여 접속할 수 있으며 모델기반 데이터를 얻을 수 있습니다.

  • libIndy6DLoggingTask.so :
    로봇 데이터를 기록하기 위해 필요한 태스크 입니다. 비상정지 상황이 발생하였을 때 로깅중이던 실시간 데이터 및 로봇의 상태 정보들을 /home/user/release/LogData/ 경로에 저장합니다.

  • libIndy6DModbusTCPTask.so :
    Indy Communication Tool중 하나인 ModbusTCP를 사용하기 위해 필요한 태스크입니다. ModbusTCP에 대한 상세한 사항은 ModbusTCP를 참조하시기 바랍니다.

주의

STEP2에서 실행되는 Control Task는 6자유도 로봇 매니퓰레이터에 대해 4000 Hz로 제어 합니다. 최신 버전 STEP3의 경우 최대 8000 Hz 까지 제어주기를 늘릴수 있습니다. 이는 동역학, 역기구학 계산 등에 소요되는 CPU 연산시간을 고려하여 설정된 제어주기이기 때문에 제어주기를 느리게 수정하면 제어 성능이 떨어지며, 제어주기를 더 높게 설정하면 설정된 제어주기에 연산을 완료하지 못해 오버런 (overrun)이 발생하여 로봇이 비상정지 하게 됩니다. 따라서 Queue High의 실행 주기를 수정하거나, Control Task를 다른 Queue에 배치하지 마시기 바랍니다.

자동실행 끄기

뉴로메카 인디를 구입하여 설치하게 되면 기본적으로 컨트롤박스 부팅 시 로봇이 자동으로 켜지도록 하기 위해 부팅과 함께 TaskManager 가 실행되도록 설정되어 있습니다. 터미널을 통해 TaskManager 를 강제 종료하더라도 다시 자동으로 실행되도록 되어 있습니다. 사용자가 이러한 설정을 끄고 시뮬레이션 모드로 로봇을 실행시키거나, 직접 개발한 응용프로그램을 실행시키고자 할 경우 이러한 자동실행 설정을 꺼야 합니다.

UDEVMonitor 프로세스는 이처럼 STEP 부팅시 자동으로 TaskManager 를 실행하는 프로세스 입니다. 다음 명령어를 실행하면 UDEVMonitor 및 그에 연관된 프로세스들이 종료됩니다. 다시 UDEVMonitor를 사용하고 싶은 경우, STEP 을 재부팅하면 자동으로 다시 시작됩니다.

1
$ killall -g UDEVMonitor

참고로 이미 TaskManager 가 실행중일 경우 새로운 TaskManager를 실행할 수 없으며, 그림과 같은 메세지를 출력합니다.


설치하기

Indy Framework은 로봇 컨트롤박스에 설치된 상태로 납품이 됩니다. API를 사용하여 직접 로봇개발을 하고 싶은 경우 개발환경 설치가 필요하며 설치파일은 인디 구매 고객에게 별도로 제공됩니다. 최신 소프트웨어 버전이 필요한 경우나 기타 문의 사항이 있을 경우 뉴로메카 영업팀에 문의해주십시오.

  • sales@neuromeka.com