RTI Connext DDS 통합으로 MATLAB에서 실시간 IoT 데이터 활용하기
센서 데이터를 분석할 때 일반적인 워크플로는 원시 데이터를 수집하고, 사용 가능한 형식으로 변환한 다음, MATLAB의 강력한 분석 기능을 활용하는 것입니다. 그러나 데이터 변환 단계는 시간이 많이 걸릴 수 있습니다. MathWorks의 최근 통합으로 MATLAB이 이제 DDS를 통해 직접 데이터를 구독하고 발행할 수 있게 되었습니다. DDS는 IIoT 통신의 사실상 표준 미들웨어입니다. 이를 통해 개발자는 최소한의 오버헤드로 실시간 분석을 프로토타이핑하고 테스트할 수 있습니다.
시작하기
시작하기 전에 MATLAB과 RTI Connext DDS가 설치되어 있는지 확인하세요. 예제에서 사용된 버전은 다음과 같습니다:
- MathWorks MATLAB R2016b
- MathWorks DDS Blockset 2.9.2
- RTI Connext DDS 5.2.3 (리눅스 & 윈도우)
- RTI Shapes Demo 애플리케이션 (Connext DDS와 함께 설치됨)
- 윈도우 10 PC
모든 구성 요소가 올바르게 구성되었는지 확인하는 설치 비디오를 시청하세요: 설치 비디오.
초기화
설치 후 다음 단계로 MATLAB에서 DDS를 초기화합니다:
- 프로젝트에 필요한 IDL 데이터 타입 임포트.
- DDS 도메인 참여자 생성.
- DDS DataWriter 생성.
- DDS DataReader 생성.
IDL 파일을 임포트하면 MATLAB용 해당 .m 파일이 자동 생성됩니다. 예를 들어 ShapeType.idl을 임포트하려면:
> DDS.import('ShapeType.idl','matlab','f')
임포트되면 데이터 타입을 이후 DataReader/DataWriter 생성에 사용할 수 있습니다. 도메인 참여자 생성:
> dp = DDS.DomainParticipant;
Triangle 및 Square 토픽에 대해 ShapeType 데이터 타입으로 라이터와 리더를 연결:
> dp.addWriter('ShapeType','Triangle') > dp.addReader('ShapeType','Square')
Shapes Demo에서 데이터 구독
RTI Shapes Demo는 Square, Circle, Triangle에 대한 사전 구성된 토픽을 제공하며, 모두 ShapeType 기반입니다. 데모를 사용하여 Triangle 토픽에 대한 구독자를 생성하고, QoS 설정은 기본값으로 둡니다.
MATLAB에서 데이터 발행
DataWriter가 구성되면 녹색 삼각형을 발행합니다:
%% ShapeType 인스턴스 생성 myData = ShapeType; myData.x = int32(75); myData.y = int32(100); myData.shapesize = int32(50); myData.color = 'GREEN'; %% DDS에 데이터 쓰기 dp.write(myData);
Shapes Demo에는 아래와 같이 단일 녹색 삼각형이 표시됩니다:
다른 발행 패턴:
%% 1Hz로 선상의 녹색 삼각형 for i=1:10 myData.x = int32(20 + 10*i); myData.y = int32(40 + 10*i); dp.write(myData); pause(1); end %% 20Hz로 원 위의 녹색 삼각형 for i=1:1000 angle = 10*pi * (i/200); myData.x = int32(100 + (50 * cos(angle))); myData.y = int32(100 + (50 * sin(angle))); myData.shapesize = int32(40); myData.color = 'GREEN'; dp.write(myData); pause(0.05); end
데모는 이러한 패턴을 아래와 같이 시각화합니다:
Shapes Demo에서 데이터 발행
Shapes Demo에서 Square 토픽에 대한 발행자를 생성합니다. 색상(예: 주황색)을 선택하고 QoS 기본값을 유지합니다. 데모는 30ms마다 사각형의 X,Y 위치를 브로드캐스트합니다.
MATLAB에서 데이터 구독
Square DataReader를 사용하여 Shapes Demo에서 데이터를 소비합니다. 1초 간격으로 10개 샘플 읽기:
%% 데이터 읽기 for i=1:10 dp.read() pause(1); end
MATLAB은 아래 스크린샷과 유사한 10개의 메시지를 출력합니다:
고급 사용 사례: 변환 및 시각화
양방향 통신이 확립된 후, 수신된 사각형 데이터의 X와 Y 좌표를 교환하고, 빨간 삼각형으로 재발행하며, 시간에 따른 X 위치를 플로팅합니다. 아래 MATLAB 스크립트는 이 워크플로를 보여줍니다:
%% 100개 샘플용 배열 할당 xArray = zeros(1,100); %% 수집, 변환, 재발행 for i=1:100 [myData, status] = dp.read(); if ~isempty(myData) x = myData(1).x; y = myData(1).y; xArray(i) = x; yArray(i) = y; myData(1).y = x; myData(1).x = y; myData(1).color = 'RED'; dp.write(myData(1)); end pause(0.05); end %% X-위치 플로팅 t = 1:100; plot(t,xArray); legend('xPos'); xlabel('Time'); ylabel('Position'); title('X Positions');
이제 Shapes Demo에는 주황색 사각형을 반영하는 빨간 삼각형이 표시되고, MATLAB은 X-위치 플롯을 렌더링합니다:
DDS를 MATLAB과 통합하면 데이터 수집, 주입, 분석이 간소화됩니다. 이 데모는 간단한 Shapes 애플리케이션을 사용하지만, 동일한 접근 방식은 모든 DDS 기반 IoT 데이터 소스에 적용됩니다. MATLAB의 DDS 통합에 대한 더 깊은 통찰을 얻으려면 MathWorks의 MATLAB DDS 통합 페이지를 방문하세요. Connext DDS를 더 탐색하려면 여기 개발자 리소스에 액세스하세요.