ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MATLAB] RS-232통신을 Linux, MATLAB 환경에서 구현하기
    항법연구실/MATLAB 2026. 6. 25. 10:23

     

     

    RS-232를 서로 다른 서버 간 MATLAB 애플리케이션에서 구현하는 방법 (최종본)이다. 

    이걸로 랩 세미나까지 했는데, 알면 알수록 알쏭달쏭한 네트워크 세상, 난 진짜 배울게 산더미더미다 ... 

     

    어쨌든 배우면서 또 네트워크 관련 개념도 새롭게 정리할 수 있어서 전체적인 흐름과 개념을 정리해본다. 공부하다보니 OSI 7Layer개념도 나오고, Bastion Host(gateway)개념도 나오고 ... Linux디렉터리 구조도 복습할 수 있어서 좋았다. 

     

    드디어 끗 🤍🤍

     

     


    과제 목표

    이번 과제의 목표가 무엇인가 하면 .. 

    RS-232로 연결되어 Binary Stream을 컴퓨터에 전송하는 실제 수신기를 모사한다. 송신기는 P라는 gateway 컴퓨터를 사용하고, 수신기는 K라는 gateway에 연결된 컴퓨터를 사용한다. 그리고 K에서는 받아온 GNSS데이터를 통해 칼만필터를 사용하여 OD(Orbit Determination, 궤도 결정)을 수행한다. 

     

    정리해보자면,

    ssh로 연결된 서로 다른 리눅스 서버에서 MATLAB간 데이터를 송/수신하는 프로그램을 구현

    하는 것이 목표이다. 

     

    왜 물리적 연결이 아닌,TCP/IP를 이용했나? 

     

    물리적인 RS-232를 사용하기 위해서는 Linux /dev디렉터리를 이용해야한다. 그러나 일반 사용자 권한으로는 사용할 수 없으므로 우회하는 방안에 대해서 살펴보았다. 연구실 서버가 Gateway로 연결되어 있으니, 이 두 서버간 TCP/IP통신은 쉬울 것이라 생각했고 연결은 TCP/IP로 하고 데이터를 전송하는 방식에 대해서 하나씩 찾아보다 socat이라는 가상 Serial port를 생성할 수 있는 라이브러리와 MATLAB에서 시스템에 접근하여 데이터를 송/수신할 수 있는 serialport라는 객체를 찾을 수 있었다. 

     


    시스템 아키텍처 

    매트랩은 전송이 어떤 방식으로 이루어지는지 모른다.(상위 Applicaion Layer)
    소캣은 단순히 매트랩에서 던진 데이터를 규격에 맞게 전송할 뿐이다. (하부 전송 Layer) 

     

    랩미팅하면서 만들어본 밤티 자료지만 .. 한번 활용해보겠다. 

     

     

     

    • MATLAB(상위 응용 계층) 

     

     

    매트랩은 편지를 쓰고(데이터 처리), 선물을 박스에 포장(serialport)하는 역할만 한다.

    이 데이터를 저쪽으로 보내줘!라고 명령만 하지, 이 편지가 대전 허브를 지나가는지, 탑차에 실리는지, 비행기나 기차를 타는지 알 필요가 없고 관심도 없다. 단지 물건의 내용물(데이터 그 자체)에만 집중하는 것이다. 

     


    • socat(하위 전송 계층)

    시스템의 하부 레이어(Transport/Session Layer)는 데이터의 전송과 연결 통로 관리를 전담한다. 

    우리는 앞에서 Linux socat을 통해 PTY(가상 Serial Port)와 네트워크 터널을 만들었다. 이 연결이 하부 전송 레이어를 의미한다. 단순히 전송만 담당하는 것이다. 

     

    socat은 박스 안에 밥이 들었는지, 빵이나 쿠쿠다스가 있는지(GPS 데이터, 명령 코드 등) 1도 관심이 없다. 단순히 가로/세로 규격(프로토콜, 주소와 포트)만 확인하고 규격에 맞게 들어온 박스를 목적지로 실어나를 뿐이다. 그리고 사용자가 지정한 전송 방식을 따른다. 

     

    예를 들어 비행기를 태워 보낼지(LAN으로 연결된 TCP/IP연결을 이용하는지), 직통 기차를 태울지(실제 물리적으로 케이블을 통해 연결된 경우, PC내부의 UART/Serial 드라이버를 이용하는지) 등을 정하는 곳이다. 

     

     

    이 시스템 아키텍처를 조금 더 쉽게 이해하기 위해서 OSI 7 Layer를 구성해보았다. (전공자가 아니라면 오히려 어려울 수 있으니 넘어가도 좋다.) 

    계층(Layer) 구현기술 역할
    응용(Application)  MATLAB 데이터 수신, 헤더/페이로드 파싱 및 알고리즘 연산 
    표현(Presentation) 바이너리 직렬화/JSON 데이터 형식 변환 및 상호 호환성 확보 
    세션(Session) SSH 터널링, socat 포트 간 연결 수립 포워딩 & 세션 유지
    전송(Transport) TCP 패킷 유실 방지 및 신뢰성 보장 
    네트워크(Network) IP 목적지 장비까지의 경로 라우팅 
    데이터 링크(Data Link) Ethernet, 가상 PTY 드라이버 인접 노드 간 프레임 전송 및 가상 포트 제어
    물리(Physical) LAN선(UTP) 물리적 전기 신호 전송 

     


    한계점 

     

    현재 단계에서는 한계점이 명확하다.

     

    [1] 실시간 데이터가 아닌 후처리 데이터 사용 

    우선 데이터 자체를 수신기에서 컴퓨터에 전송하는 실시간 데이터가 아니라, 후처리 데이터인 nav, obs 데이터를 Binary Stream으로 만들어 전송하고 있다. 이제 실시간 데이터를 처리하는 방법을 Galileo HAS 데이터를 활용할 계획이고 .. 앞으로 잘 소화해서 포스팅으로 작성해보겠다. +

     

    엉엉슨 할 수 있을까

     

    [2] 물리적 타이밍 및 지연(Latency)의 왜곡 

    실제 RS-232케이블은 하드웨어 클럭에 맞춰 정확한 Baud Rate 속도로 데이터가 흐른다. 그러나 지금은 socat과 TCP/IP 네트워크 터널을 거치기 때문에, 네트워크 상황에 따른 패킷 지연이나 가상 포트의 버퍼링 속도 차이가 난다. 또한 실제 데이터 송신 시간 간격을 1/1000로 설정하여 observation 데이터가 들어오는 10초 간격이 아니라 0.001초 간격으로 들어온다. 

     

     

    그래서 지금 Ntrip에서 HAS데이터를 실시간으로 받아오는 과정을 거치고 있는데 넘무 어렵다. 

    처음 RS-232를 접했을 때 막막했지만 지금은 이해가 잘 된 것처럼 HAS도 할 수 있겠지 ??! 

Designed by Tistory.