소개
시스템 개요
LabVIEW Toolbox 에는 Indy VI(Virtual Instrument) 인 IndyComm.vi 와 Indy 인터페이스를 위한 DLL 라이브러리가 있습니다. Indy VI 는 Indy Framework와 TCP 소켓 프로토콜로 통신하기 위해 DLL file 을 사용하며, 아래 그림은 Indy 로봇을 위한 LabVIEW Toolbox 의 전체 구조를 나타낸 것입니다.
-
IndyLV Project : Indy 인터페이스의 공유 라이브러리를 위한 C++ 프로젝트
(해당 라이브러리는 소켓 연결을 통해 Indy Framework 와 통신하는 기능을 담당) -
IndyLV.DLL : IndyLV 프로젝트의 컴파일 결과물 (LabVIEW VI 에서 직접 사용)
-
Indy LabVIEW VI : 사용자가 라이브러리의 작동 방식을 알 수 있도록 제공하는 LabVIEW VI 샘플
(이를 참고하여 컴포넌트 추가 또는 새로운 컴포넌트 생성 가능) -
Indy Framework 2.2.2 : Indy 로봇을 작동시키는 바이너리 파일 셋 (Indy 를 구입한 고객에게 제공)
설치
LabVIEW Toolbox는 Github repository 에서 무료로 이용 가능합니다.
Git 도구를 사용하여 저장소를 클론하면 아래 파일과 폴더가 지정한 디렉토리에 저장됩니다.
-
IndyLV : 공유 라이브러리 IndyLV.dll 의 Visual Studio C++ 소스 폴더
-
IndyLV.dll : IndyLV 프로젝트의 컴파일 된 공유 라이브러리 파일 (LabVIEW VI 에서 사용)
-
IndyComm.vi : Indy Framework 와의 통신을 위해 IndyLV.dll 을 사용하는 LabVIEW VI 샘플
구성
LabVIEW Toolbox 는 NI LabVIEW 가 설치된 컴퓨터에서 작동하며 대부분의 LabVIEW 버전과 호환됩니다. 각종 명령과 로봇 상태를 전송하려면 STEP 에 Ethernet 연결이 필요하며, 설치 후 이외 추가 구성 없이 LabVIEW Toolbox 를 바로 사용할 수 있습니다.
사용자 접근 단계
누구나 LabVIEW Toolbox 의 기능을 사용, 수정, 개발할 수 있습니다.
참조 목록
본 메뉴얼의 작성에 있어 참조한 프로젝트이며 중요도 순으로 나열되어 있습니다.
메뉴얼 구성
사용자 메뉴얼 구성은 다음과 같습니다.
-
일반 정보 : 시스템 용어와 목적
-
시스템 요약 : 시스템 개요 요약 (시스템 하드웨어 및 소프트웨어 요구 사항, 구성, 사용자 접근 단계)
-
시작하기 : Indy 패키지의 설치 및 사용 방법
-
시스템 살펴보기 : 시스템 기능과 구성
약어
본 문서에서 사용되는 약어와 그 의미는 다음과 같습니다.
-
Indy : 모든 종류의 Indy 로봇
-
Indy DCP : Indy 전용 TCP/IP Protocol
-
STEP : Indy 의 임베디드 컨트롤러
-
VI : LabVIEW 의 Indy Virtual Instrument
-
UI : 유저 인터페이스
-
q : 로봇의 관절공간 위치 (라디안)
-
qdot : 로봇의 관절공간 속도 (라디안/초)
-
qddot : 로봇의 관절공간 가속도 (라디안/초2)
-
6-D 공간 : 3-D 변위 & 3-D 회전
-
Pos / pos : 로봇의 직교 좌표 상 위치 (미터 + 라디안)
-
Vel / vel : 로봇의 직교 좌표 상 속도 (미터/초 + 라디안/초)
-
Acc / acc : 로봇의 직교 좌표 상 가속도 (미터/초2 + 라디안/초2)
튜토리얼
LabVIEW Toolbox 실행
LabVIEW 설치 후, 링크 에서 DMC UI 모음1을 다운 받습니다. Indy VI 는 위 UI 모음을 사용하여 UI 구성 요소의 외관을 개선할 수 있습니다. 그 다음, IndyComm.vi 를 더블 클릭 하여 LabVIEW 에서 샘플 Indy VI 를 실행시킵니다.
LabVIEW 프론트 패널에서 Indy VI 의 UI 중 아래 그림과 같은 설정 영역에 대해 살펴 보겠습니다.
-
Indy 라이브러리 경로 : IndyLV.dll 의 절대 경로로 열기 버튼을 클릭하고 IndyLV.dll 파일을 선택하면 경로를 얻을 수 있습니다.
-
소켓 정보 : STEP IP 주소, 포트 번호, 로봇 이름을 포함한 Indy DCP 소켓에 대한 필수 정보입니다.
-
연결 생성 : VI를 실행하여 Connect 버튼을 클릭하면 Indy Framework 에 연결할 수 있습니다.
연결이 성공적으로 완료되면, 아래 그림과 같이 로봇 모니터링 영역을 볼 수 있습니다.
-
Ready : 이 LED 는 로봇이 준비 상태임을 나타냅니다.
-
In Motion : 로봇이 움직이고 있으면 해당 LED 가 녹색으로 변합니다.
-
Joint Position : 관절 위치는 왼쪽 부터 수치와 그래프의 두 가지 방식으로 표시됩니다.
-
Joint Velocities : 속도는 하단의 게이지로 표시됩니다.
모니터링 탭 옆의 컨트롤 탭을 아래 그림과 같이 볼 수 있다.
-
Zero : 영 위치로 이동 (모든 관절의 각도가 0인 위치)
-
Home : 홈 위치로 이동 (미리 정의 된 홈 위치)
-
Stop : 타겟 위치로의 관절 이동의 정지
-
Target Position : 각도 단위의 타겟 위치로
Move Joint
함수에서 사용 -
Move Points : 웨이포인트 목록에 따라 로봇 이동
-
List of Waypoints : Nx6 의 2D 배열로 N 은 포인트 개수, 6은 로봇 관절 수를 의미
-
←→↑↓ : 글로벌 좌표계의 X, Y, Z 축에 대한 로봇 TCP의 이동 명령 전송 (↑ 와 ↓ 버튼 사이의 숫자만큼 이동)
예제
Indy 공유 라이브러리
도입부에서 간략히 설명했듯이, 공유 라이브러리 IndyLV 는 비쥬얼 스튜디오 C++ 로 개발되었습니다. 이 장에서는 IndyLV 프로젝트의 소스 코드에 대해 설명하고자 합니다. LabVIEW 를 위한 공유 라이브러리 개발에 대한 자세한 내용은 앞선 장에서 적절한 URL을 참조하기 바랍니다.
Toolbox 의 IndyLV 프로젝트는 아래 Visual Studio 그림과 같습니다. 개발자라면 IndySocket.h 와 IndySocket.cpp 을 유의 있게 살펴봐야 하며, 두 파일은 Indy LabVIEW VI 에 의해 호출 된 API 를 선언하고 실행합니다.
Visual Studio C++ 에서의 IndyLV 프로젝트
IndySocket.h 코드 를 자세히 보면 공유 라이브러리를 위해 구현된 모든 함수의 선언을 볼 수 있습니다. 아래 목록은 각 함수에 대한 간략한 설명이며, 함수 구현을 위해 관련 소스 코드를 좀 더 깊게 파악하실 필요가 있습니다.
-
ConnectIndy : Indy Framework 와의 소켓 연결 (파라미터는 IP 주소, 포트, 로봇 명)
-
DisconnectIndy : Indy Framework 와 소켓 연결 종료 및 모든 스레드 정지
-
CloseAll : DisconnectIndy 와 유사한 기능
-
IsRobotReady : 로봇 준비 여부 요청 (준비 시 1, 그렇지 않으면 0 리턴)
-
IsInMotion : 로봇 동작 상태 요청 (동작 중일 시 1, 그렇지 않으면 0 리턴)
-
MoveHome : 홈 위치로의 로봇 이동 명령
-
MoveZero : 영 위치로의 로봇 이동 명령
-
SlowStop : 로봇 작동 중지 명령
-
MoveJointTo : 절대 좌표로의 로봇 이동 명령으로 입력은 목표 위치 (도) 와 관절 수 (DoF)
-
MoveJointBy : 상대 좌표로의 로봇 이동 명령으로 입력은 목표 위치 (도) 와 관절 수 (DoF)
-
MoveTaskTo : 절대 6D 좌표로의 로봇 이동 명령으로 입력은 6개: X (미터), Y (미터), Z(미터), RotX (도), RotY (도), RotZ (도)
-
MoveTaskBy : 상대 6D 좌표로의 로봇 이동 명령으로 입력은 6개: X (미터), Y (미터), Z (미터), RotX (도), RotY (도), RotZ (도).
-
GetJointPosition : 현재 로봇 관절 위치 요청 명령으로 입력은 관절 수, 출력은 각도
-
GetJointVelocity : 현재 로봇 관절 속도 요청 명령으로 입력은 관절 수, 출력은 속도 (도/초)
-
MoveWaypoints : 웨이포인트 목록에 따른 로봇 이동 명령으로 입력은 웨이포인트 리스트, 포인트 수, 관절 수
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 |
|
Indy VI 블록 다이어그램
이 장에서는 LabVIEW 에서 Indy VI 의 블록 다이어그램 (그래픽 소스 코드) 에 대해 설명합니다. 사용 된 UI 에서 Indy VI 의 블록다이어 그램 객체들은 모니터링 (그림) 과 제어 (그림) 그룹으로 나뉩니다. 객체별 자세한 설명은 아래와 같습니다.
True/False 버튼 :
Indy VI 의 모든 버튼은 릴리즈 시 래치가 기본 설정
Call-Library-Function 노드 : LabVIEW VI 가 호출한 DLL 함수
Switch/Case object : Indy VI 에서의 버튼 값 확인 및 내장 라이브러리 함수 호출
Loop object : 특정 조건이 발생할 때까지 Sub-Diagram 의 코드 반복
Sleep Object : 루프를 밀리세컨드 단위의 일정 시간 (시계 아이콘 옆의 숫자) 만큼 정지
위 객체는 입력 데이터를 받아 waveform chart 형태로 시각화합니다.
Indy VI 에서는 관절 위치 표시에 사용합니다.
위 객체는 단일 입력 데이터를 게이지로 표시합니다.
Indy VI 에서는 속도 값 표시에 사용합니다.
위 내용을 토대로 로봇 모니터링 블록 다이어그램을 좀 더 자세히 알아보겠습니다. 먼저 모니터링 다이어그램은 IsRobotReady, IsInMotion, GetJointsPosition, GetJointsVelocity 4개의 라이브러리를 호출하는 루프로 구성되며, LED, Waveform Chart, 게이지와 같은 적절한 UI 로 피드백 데이터가 시각화됩니다.
동시에 제어 다이어그램은 아래 그림처럼 폴링 방식으로 루프가 작동합니다. 이 루프는 UI 상에 이벤트가 발생하기 전까지 활성화되지 않기 때문에 Sleep Object 가 필요하지 않습니다. 예를 들어, MoveHome 버튼을 클릭하면, 버튼 값이 False 에서 True 로 바뀌고, Switch/Case Object 의 MoveHome 함수를 작동시킵니다. 이는 Indy Framework 에 TCP socket 으로 요청을 보내며 로봇을 홈 위치로 움직입니다.
마지막으로 중요한 것은 Power 버튼 입니다. 이 버튼의 사용은 안전하게 모니터링과 제어 루프를 종료하고 Indy VI 를 끝낼 수 있도록 합니다. 이 때 Tag 채널을 사용하여 Power 버튼의 신호를 루프 종료에 반영합니다.
-
DMC 저작권에 의해 UI 모음을 Neuromeka 의 LabVIEW Toolbox 에 포함시킬 수 없습니다. ↩