Skip to content

MATLAB IndyDCP 클라이언트

개요

Indy Toolbox 는 MATLAB 함수들의 집합으로, 사용자가 Indy Framework 2.0 을 활용하여 Indy 로봇을 제어할 수 있도록 합니다. 최상위 경로에는 다음과 같은 하위 경로 및 파일들이 있습니다.

  • core : Indy Framework 과의 통신을 위한 함수와 스크립트

  • simplecommand : Indy Framework 에 Simple Command 를 보내는 함수
    (매개변수 입력 맟 복잡한 피드백 필요 없음)

  • mediumcommand : Indy Framework 에 Medium Command 를 보내는 함수
    (매개변수 입력 필요, 복잡한 피드백은 필요 없음)

  • extendedcommand : Indy Framework 에 Extended Command 를 보내는 함수
    (웨이포인트 또는 궤적과 같은 매개변수 필요)

  • getcommand : Indy Framework 에 데이터 요청 명령을 보내는 함수
    (관절 위치와 속도 등 로봇 현재 상태 획득 가능)

  • example : Extended Command 에 대한 예제 스크립트

  • startup_toolbox.m : 위 모두를 MATLAB 검색 경로에 추가하는 스크립트

설치

Indy ToolboxGithub 저장소에서 받으실 수 있습니다. 설치는 다음과 같은 단계로 진행하십시오.

  • Git tool 로 저장소 클론

  • 최상위 경로에 있는 startup_toolbox.m 스크립트 실행 후 MATLAB 경로에 toolbox 추가

구성

Indy Toolbox 는 MATLAB 이 설치된 컴퓨터에서 작동하며, 대부분의 MATLAB 버전과 호환됩니다. 각종 명령어와 로봇 상태를 주고 받기 위해, Toolbox 는 IndyCB (Indy 의 컨트롤 박스) 와 Ethernet 연결이 되어있어야 합니다. 또한, 설치 후 추가 설정 없이 Indy Toolbox 를 바로 사용할 수 있습니다.

소켓 연결

Indy Toolkit 은 Indy-DCP 기반의 소켓 연결을 통해 Indy Framework 와 통신하므로 소켓 구성 정보가 필요합니다. 또한, 이 정보는 Core 폴더의 SetupConnection.m 스크립트에 설정되어야 합니다. 스크립트를 실행하기 전, 아래 코드에 나와있는 자세한 내용을 살펴봅시다.

  • RobotName : Indy 모델명 (Indy7 의 경우 NRMK-Indy7)
  • IPAddress : STEP (컨트롤 박스) 의 IP 주소
  • Port : TCP 포트 번호
  • Connection : 이 전역 객체는 스크립트 실행 후 Indy Framework 와의 소켓 연결을 담당
  • IndyDCPConnect : STEP 과 IndyDCP 서버의 연결 시작

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
RobotName = "NRMK-Indy7"
IPAddress = "192.168.10.108"
Port = 6066

global Connection;
Connection.robotName = RobotName;
Connection.sock = 0;
Connection.invokeID = 0;

IndyDCPConnect(IPAddress, Port)

소켓 연결 해제

core 폴더에는 연결을 종료하고 내부 변수를 지우기 위한 CleanupConnection.m 라는 스크립트가 있습니다. 시스템 종료 전, 이 스크립트를 실행하여야 합니다.

Toolkit 함수 호출

이전 장에서 설명한 것처럼, 모든 Indy Toolkit 의 기능들은 simplecommand, mediumcommand, extendedcommand, getcommand 로 나뉩니다. 소켓 연결 후, 이 기능들이 호출되어야 합니다. 각각의 기능들은 동일한 이름의 파일로 저장되어있으며, 사용자는 함수의 내용을 자유롭게 보고 수정할 수 있습니다.

예제 실행


Indy Toolkit을 사용하기 전, Indy Framework 가 STEP 에서 작동하고 있는지 확인하십시오.

앞서 기술한 코드와 같이, 모델명은 Indy7, IP주소는 192.168.10.108 이라고 가정하고, 워크스페이스와 소켓을 다음과 같이 설정합니다.

1
2
3
startup_toolbox; % Setup current directory to MATLAB path

SetupConnection; % Make a connection to Indy DCP server    

simplecommand 를 호출합니다. 예) 홈 위치로 이동

1
MoveHome(); % Send a move-home command to Indy Framework

mediumcommand 를 호출합니다. 예) 관절의 절대 타겟 위치로의 이동

1
2
3
qTar = [0, 10, 50, 0, 70, 0]; % DEGREE

MoveJointTo(qTar);          

getcommand 로 로봇의 관절 위치와 속도를 구합니다.

1
2
3
position = GetJointPosition();

velocity = GetJointVelocity();

extendedcommand 로 웨이포인트를 따라 움직입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
q1 = [0, 0, 0, 0, 0, 0];

q2 = [0, 0, -45, 0, 0, 0];

q3 = [0, -30, -45, 0, 0, 0];

q4 = [0, -30, -45, 0, 20, 0];

waypoints = [q1; q2; q3; q4];

MoveJointWaypoints(waypoints);            

소켓 연결을 종료합니다.

1
CleanupConnection();

Indy 전용 TCP/IP 프로토콜

Indy 전용 TCP/IP 프로토콜 (Indy DCP) 은 Indy Toolkit 이 Indy Framework 와 통신하기 위한 주요 프로토콜입니다. 일반적으로, IndyDCP 는 연결을 위해 다음의 정보가 필요합니다. 프로토콜에 대한 자세한 내용은 IndyDCP Protocol 링크를 참고해주십시오.

  • IPAddress : STEP 의 IP 주소

  • Port : Indy DCP 소켓의 포트 넘버

  • Robot Name : Indy 모델명 (IndyRP 의 경우 "NRMK-IndyRP" , Indy7"NRMK-Indy7" )

  • Invoke ID : 요청을 보내기 위한 ID

사용자의 편리를 위해, 연결 중에는 위 설정들이 유지되도록 하는 전역 연결 변수가 있습니다. 그러므로 사용자가 SetupConnection.m 스크립트 정보만 설정하면, 나머지는 시스템 상에서 자동적으로 진행합니다.

Simple, Medium, and Get Commands

Simple, Medium, Get Command 는 Indy Toolkit 에 익숙해진 후 사용자가 가장 먼저 시도할 수 있는 API 입니다. 이 명령어들은 다른 MATLAB 함수와 동일한 방식으로 호출되며, 각 API 의 자세한 설명은 다음과 같습니다.

  • MoveHome.m : 미리 정의된 홈 위치로 이동

  • MoveZero.m : 영 위치 (모든 관절 위치가 0 인 위치) 로 이동

  • StopSlow.m : 짧은 시간 내로 로봇 정지

  • StopEmergency.m : 즉시 로봇 정지

  • ResetRobot.m : 긴급 정지 상황 이후 로봇 재시작

  • SetDirectTeaching.m : 직접 교시 모드로 전환

  • FinishDirectTeaching.m : 직접 교시 모드 해제

  • MoveJointTo.m : 절대 좌표 기준 로봇 이동 (degree)

  • MoveJointBy.m : 상대 좌표 기준 로봇 이동 (degree)

  • MoveTaskTo.m : 6D 공간 상 절대 위치로 이동 (meter, degree)

  • MoveTaskBy.m : 6D 공간 상 상대 위치로 이동 (meter, degree)

  • IsRobotReady.m : 로봇의 작동 준비 여부 반환

  • GetJointPosition.m : 현재 관절 각도 반환 (deg)

  • GetJointVelocity.m : 현재 관절 속도 반환 (deg/s)

  • GetTooltipPosition.m : 전역 좌표계의 Tool Center Point (TCP) 반환 (meter, deg)

Extended Commands

현재 Indy Toolkit 은 관절 공간에서 사용되는 API 를 제공합니다. 이 중, MoveJointWaypoints 는 웨이포인트 간의 이동 모션에 관한 것이고, MoveExtendedTrajectory 는 보간법을 통한 궤적에 따른 이동 모션을 위한 것입니다. MoveJointWaypoints 의 사용 방법은 이전 장에서 다뤘으며, 아래는 MoveExtendedTrajectory 예시입니다.

아래 코드는 Indy 로봇을 이용하여 어떻게 MATLAB 에서 경로 보간법 알고리즘을 적용하는 지 나타냅니다. 아래 예시에서 vel_profile_interpolation 는 새로 개발된 속도 프로파일 보간법입니다. 이것은 시작 위치, 속도, 목표 속도, 가속도를 포함한 시작점과 끝점의 상태를 입력받습니다. 그리고 vel_profile_interpolation 함수는 매 사이클마다 목표 위치, 속도, 가속도를 계산하고, 계산값을 pd, vd, ad 배열에 각각 저장합니다. 마지막으로, MoveExtendedTrajectory 함수가 호출되며 이 배열들을 Indy Framework 로 보냅니다.

 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
% Check robot status
if (IsRobotReady() ~= 1)
    disp("Robot is not ready!\n");
end

% Start State
DOF = 6;
DELT = 250e-6;
start.t = 0;
start.pos = GetJointPosition();
start.vel = GetJointVelocity();

% Goal State
goal.t = 2;
goal.vel = [70, 60, 50, 20, 25, 30]; % deg/s
goal.acc = [15, 15, 15, 15, 15, 15]; % deg/s^2

[pd, vd, ad] = vel_profile_interpolation(DELT, start, goal);

% Plotting Data
t = start.t:DELT:(goal.t+2);
plot_data(t, pd, vd)

% Send to Indy
MoveExtendedTrajectory(DELT, pd, vd, ad);

아래 그림은 Indy 로봇에서 extended trajectory 보간의 실험적 결과를 나타냅니다. 첫 번째 그림vel_profile_interpolation 에서 계산한 경로 (위치와 속도) 입니다. 나머지 그림MoveExtendedTrajectory 함수가 호출된 후 Indy 의 경로를 기록한 것입니다. 두 사진을 비교해보면, MATLAB 기반의 경로 함수가 Indy 로봇에서 정상적으로 실행되었음을 알 수 있습니다.


Extended trajectory 데이터


Extended trajectory 실행 후 저장 된 관절 모션