본문 바로 가기

Doosan Robotics

Log In
Log In Form

튜토리얼

문서
소켓(socket)을 이용한 프로그래밍 방법
필수
60 분
이 과정에서는 두산 로봇에서 제공하는 소켓 통신을 사용하는 방법을 소개합니다.

1. 시작하기

로봇을 사용할 때, 그리퍼나 센서뿐만 아니라 비전 카메라와 같이 다양한 정보를 주고 받아야 할 외부 장치와 함께 사용할 경우도 있습니다. 이럴 경우, GPIO나 Modbus-TCP와 같은 필드버스가 아닌 TCP/IP 소켓 통신(클라이언트, 서버)을 사용할 수 있습니다. 이를 통해, 외부 장치에서 전달되는 정보나 로봇의 작동 데이터(위치나 속도 정보 등)을 주고 받을 수 있어요.

이 과정에서는 두산로봇에서 제공하는 소켓 통신을 사용하는 방법을 알아보겠습니다.

2. 소켓 통신이란

소켓 통신은 컴퓨터 네트워크 상에서 데이터를 주고 받는 방법 중 하나입니다. 70년대에 개발되어 아주 오랜 역사를 가지고 있어요. 그래서 컴퓨팅 장치에서는 다양한 운영제제(유닉스, 윈도우, 리눅스 등)에서 사용이 가능하며, 두산 로봇에서도 이러한 소켓 통신을 지원합니다.

소켓 통신에 사용되는 소켓이란 기술은 다른 소켓에 접속해서 데이터를 주고 받을 수 있는 기능을 갖습니다. 실제로 사용될 때는 서버와 클라이언트로 나눠집니다. 서브는 클라이언트의 접속을 기다리면서 클라이언트가 접속을 하면 데이터를 주고 받는 쪽이고, 클라이언트는 서버와 반대로 서버의 접속 정보(IP 주소, 포트 번호 등)를 기반으로 서버에 접속을 하여 정보를 주고 받는 역할을 합니다.

가장 일반적인 소켓 서버와 클라이언트의 소켓 통신 연결은 아래 그림과 같습니다.


3. 두산 로봇의 소켓 통신 기능

두산 로봇에서는 로봇을 클라이언트와 서버로 사용하기 위해 필요한 소켓 통신 기능을 함수로 제공하고 있습니다. 제공되는 함수는 아래와 같으며, 각 함수들에 대한 상세한 내용은 프로그래밍 매뉴얼을 참고하시기 바랍니다.

[클라이언트용]
  • client_socket_open(): 소켓을 생성하고 서버에 연결을 시도합니다.
  • client_socket_close(): 서버와 통신을 종료합니다.
  • client_socket_write(): 서버에 데이터를 전송합니다.
  • client_socket_read(): 서버로부터 데이터를 수신합니다.

[서버용]
  • server_socket_open(): 소켓을 생성하고 클라이언트와의 연결을 대기합니다.
  • server_socket_close(): 클라이언트와의 통신을 종료합니다.
  • server_socket_state(): 소켓의 상태를 반환합니다.
  • server_socket_write(): 클라이언트에 데이터를 전송합니다.
  • server_socket_read(): 클라이언트로부터 데이터를 수신합니다.

4. 두산 로봇의 소켓 통신 따라 해보기

여기서는 두산 로봇과 컴퓨터가 소켓 통신으로 정보를 주고 받는 방법을 소개합니다.

컴퓨터에서는 로봇이 소켓 통신으로 접속할 때마다 0과 1을 순서대로 응답하고, 로봇은 0과 1을 전달 받을 경우 각각 사전에 지정된 pos_0과 pos_1의 위치로 이동하도록 프로그래밍을 합니다.



소켓 통신으로 두산 로봇과 컴퓨터가 정보를 주고 받는 방법을 알아보기 위해 아래와 같이 예제를 구성하세요.

4.1 네트워크 설정
 


  • 로봇 제어기의 IP 구성: TP의 설정 – 네트워크 - 제어기 메뉴에서 IP 주소를 확인하고 사용하고자 하는 값으로 수정합니다. 예) 192.168.137.10
 


  • 컴퓨터의 IP 구성: 로봇과 연결해서 사용하고자 하는 컴퓨터의 IP를 로봇 제어기의 IP와 동일한 영역대로 설정을 합니다. 예) 192.168.137.29



4.2 소켓 통신 프로그래밍 – 컴퓨터(서버)
클라이언트가 접속할 때마다 순차적으로 0과 1을 전달하도록 아래와 같이 파이썬 코드를 구성합니다.



4.3 소켓 통신 프로그래밍 – 로봇(클라이언트)
서버에 접속해서 전달 받는 값에 따라 pos_0과 pos_1로 이동하도록 아래와 같이 구성합니다.

 

각 명령 블록에 대한 구성은 아래를 참고하시기 바랍니다.
  • 전역 변수에 변수 value와 위치 변수 pos_0과 pos_1을 추가합니다.

 

  • MoveJ로 시작할 위치를 지정합니다. 여기서 시작 위치는 pos_0 및 pos_1과 다른 위치로 지정해야 합니다.
  • Repeat 명령을 추가하고 횟수는 2회로 설정합니다. 2회 반복하며 컴퓨터에 2번 접속하여 통신을 하게 됩니다.



  • Custom Code는 서버 소켓에 접속 후 데이터를 주고 받기 위해 아래와 같이 구성합니다.

 

  • If 구문의 조건은 Global_value 변수에 저장된 값에 따라 서로 다른 MoveJ 명령을 실행하도록 구성합니다.

 

  • 각 MoveJ 명령의 속성에서 위치 정보는 Global 변수로 정해 둔 pos_0과 pos_1을 각각 사용합니다.



4.4 소켓 통신 테스트
소켓 통신을 사용하기 위해서는 기본적으로 서버 측이 먼저 실행되어야 합니다. 그래서 컴퓨터의 파이썬 코드를 먼저 실행합니다. 그리고 로봇의 프로그램을 실행합니다. 

실행을 하면, 컴퓨터에는 로봇의 소켓이 접속을 하면서 “next_idx”라는 문자가 전달된 것을 확인할 수 있습니다. 

 

그리고 로봇의 소켓이 컴퓨터의 소켓에 접속할 때마다 각각 0과 1을 전달 받아서 지정된 2개의 위치로 순차적으로 이동하게 됩니다. 

5. 정리

이번 과정에서는 두산 로봇에서 소켓 통신을 사용하기 위해 필요한 설정과 프로그래밍 방법을 알아봤습니다. 
소개해드린 소켓 통신을 사용하면 비전 카메라나 머신러닝과 같은 연산 수행하는 컴퓨터와 다양한 정보를 주고 받을 수 있습니다. 소켓 통신에 대한 보다 다양한 정보는 프로그래밍 매뉴얼을 참고하시기 바랍니다.

6. 참고 자료


※ 본 자료의 모든 내용과 도안에 대한 저작권 및 지적재산권은 두산로보틱스에 있습니다. 따라서 두산로보틱스의 서면 허가 없이 사용, 복사, 유포하는 어떠한 행위도 금지됩니다. 또한 특허권을 오용하거나 변용하는데 따르는 책임은 전적으로 사용자에게 있습니다.

추천 교육
여러분에게 도움이 될 수 있는 추천 교육 과정들을 확인하세요.
문서
힘 제어를 이용한 프로그래밍 방법
문서
무선 공유기 사용방법
문서
DART-Studio 사용 방법 – 태스크 관리