본문 바로가기

Enginius/Matlab

Matlab과 Linux 사이의 socket 통신 예제

매트랩에서는 Java api를 이용해서 쉽게 socket 통신을 할 수 있다. 

이전 포스팅에서 썼듯이 시리얼 통신도 쉽게 할 수 있는데, 결국 매트랩으로 여러 대의 로봇을 제어하는 서버를 만들 수 있다는 점이다. 

다른 언어에 비해 매우 빠른 속도로 프로토타이핑이 가능한 매트랩에 이런 IO기능까지 더해지니 정말 쓸모가 많은 것 같다. 


매트랩이 서버가 될 것을, 여러 대의 리눅스 환경의 노트북들이 클라이언트가 될 것을 가정한다. 


1. 리눅스 쪽 C 소스 (이클립스에서 빌드)

 1. main.cpp (나머지 파일들은 아래 첨부)


2. 서버용 매트랩 파일

 1. demo_socket_multi.m


 2. socket_read.m


 3. socket_send.m


3. 사용법

 먼저 서버를 실행시킨다. 이 때 클라이언트가 접속할 수 있는 포트를 설정해 줘야 한다. 

 nr_agent라는 변수는 총 몇대의 클라이언트가 접속할 지를 정해주는 변수이다. 

 클라이언트는 다음과 같이 터미널에서 실행한다. 

./test_opencv 192.168.1.62 2001

 즉 첫번째 인자가 서버의 ip이고, 후자가 포트번호이다. 이는 서버를 실행시키면 나오니 그것을 이용하자. 


 현재 구현되어 있는 것은 서버에서 1~127 사이의 수를 보내면 client 쪽에서 그 값을 10으로 나누어서 다시 보내는 것이다. 

 통신은 가장 간단한 char를 주고 받는 것으로 했기 때문에 허접한 프로토콜을 만들어서 세 자리 숫자를 각 digit 별로 나눠서 보내게 해 두었다. double 로 버퍼를 만들면 될 것 같은데 귀찮다. 



사용된 C 파일

main.cpp

opencv_sjlib.cpp

opencv_sjlib.h

wifi.cpp

wifi.h


사용된 매트랩 파일

demo_socket_multi.m

socket_read.m

socket_send.m