기록

[GPT가 알려주는] DDS 통신 본문

잡동사니/GPT가 알려주는

[GPT가 알려주는] DDS 통신

heylo 2025. 12. 8. 13:04

오케이 joo, DDS 제대로 감 잡을 수 있게

  • LazyColumn 자동 스크롤,
  • 차량에서 DDS 어떻게 쓰는지,
  • PC ↔ 보드 통신 구조,
  • 어디에 쓰이는 기술인지 (자동차? 국방?)

전부 깔끔하게 정리해서 설명해줄게.


✅ 1. “차량에서 DDS는 연속적으로 데이터 보내는가?”

맞음. 거의 100% 연속 스트리밍 형태야.

대표적인 차량 DDS 데이터 예:

  • 차량 속도 (10~100Hz)
  • 엔진 회전수 (10~50Hz)
  • 조향각 (50~100Hz)
  • 차간 거리 (20~50Hz)
  • 레이더, 카메라 객체 리스트 (10~30Hz)
  • 자율주행용 센서 융합 데이터 (30~100Hz)

DDS는 ‘실시간 스트리밍 버스’ 같은 느낌이다.

반면 CAN은 고정된 ID 기반 프레임 송수신이지만, DDS는 Topic + QoS 기반 고성능 스트리밍.


✅ 2. LazyColumn 자동 스크롤 기능 (Compose)

Compose는 이거 알잘딱 못해줌 ㅋㅋ
그러나 개발자는 가능 👍

✔ 자동 스크롤 방법

val listState = rememberLazyListState()
val pubList = uiState.pubMsgList

LaunchedEffect(pubList.size) {
    if (pubList.isNotEmpty()) {
        listState.animateScrollToItem(pubList.lastIndex)
    }
}

LazyColumn(
    state = listState,
    modifier = Modifier.height(300.dp)
) {
    items(pubList) { msg ->
        Text(msg.toString())
        Divider()
    }
}

pubMsgList가 늘어날 때마다 → 자동으로 마지막으로 스크롤됨.
(유튜브 채팅창이나 로그뷰 같은 느낌 구현 가능)


✅ 3. DDS가 어떤 원리인지 (개념 제대로 잡아주기)

DDS(Data Distribution Service)는 ROS2, 차량, 항공, 국방 시스템에서 쓰는 고성능 메시지 미들웨어.


✔ PUB/SUB만 있는 단순한 것?

아님.

DDS는 PUB/SUB 위에 아래 기능을 덧씌워 놓은 통신 OS 같은 급임.

🔧 DDS의 핵심 특징

기능 설명

QoS Reliability(신뢰도), Liveliness(활성), Deadline(주기), Durability(스토리지 유지) 같은 하이엔드 통신 설정
Discovery 각 노드가 서로를 자동으로 발견 (브로드캐스트)
Topic 기반 데이터 타입 기반으로 통신
Zero-Copy 공유 메모리 고성능 노드 간 데이터 공유 가능
IDL Interface 명확한 타입 정의 및 자동 코드 생성

그래서 항공기, 로봇, 항공우주, 국방 시스템에서 사랑받음.


✅ 4. "SUB 했으면 PC에서 보낸 데이터를 내 보드에서 받아야 하는 거 맞지?"

맞아.
DDS는 네트워크 기반 미들웨어라서:

  • Ubuntu PC에서 Publish
    → 보드에서 Subscribe

이렇게 이종 플랫폼 간 실시간 통신이 가능함.

💡 내 보드에서 Publish → 내 보드에서 Subscribe
이것도 되긴 되는 구조지만 실전에서는 의미가 없음.
자기 혼자 말하고 자기 혼자 듣는 구조니까 ㅋㅋ

네가 말한 것처럼 실제로는 외부 장비 ↔ ECU ↔ MCU ↔ 센서 등 cross-communication이 목적임.


✅ 5. DDS는 어디에 가장 많이 쓰는가?

✔ 차량(Automotive)

  • 자율주행 버스 통신 (표준: AUTOSAR Adaptive Platform → DDS 기반)
  • 라이다, 카메라, 센서 융합 데이터 송수신
  • ADAS (전방추돌방지, 차선유지)
  • ECU 간 고속 데이터 교환

✔ 국방

  • 미사일 지휘·제어 시스템
  • 무인 드론/로봇
  • 레이더 데이터 처리
  • 전술 네트워크

✔ 우주항공

  • NASA, SpaceX 로버/드론 소프트웨어 (ROS2 기반 → DDS 사용)

✔ 로봇

  • ROS2 = 내부 통신 100% DDS 기반
    (그래서 DDS가 로봇 시장에서 엄청 standard)

✔ 공장 자동화

  • PLC, 센서 네트워크 대규모 시스템에서 실시간 데이터 streaming

즉, DDS는 고성능 실시간 분산 시스템의 표준 미들웨어라고 보면 됨.


🔥 지금 joo의 DDS 구조가 맞는지 확인해주면:

  • Android 앱 → HIDL(AIDL) 기반 DDS HAL Client
  • 보드에서 dds_svc 실행 중
  • 앱에서 binder로 IDdsService 연결
  • registerCommand / callback 정상 동작
  • LazyColumn으로 수신 데이터 표시

이제 거의 완성임.


👉 다음 단계는?

  1. ViewModel에 Repository 연결
  2. Screen에서 subscribe 버튼 누르면 registerCommand
  3. PC에서 Publish하면 Android 앱 화면에 뜸
  4. 자동 스크롤 적용
  5. 메시지 Hex 보기 옵션 추가 가능

원하면 전체 MVVM + Hilt + Compose 구조 코드 템플릿까지 만들어줄게.


joo, 어느 부분 먼저 해결하고 싶어?

  • LazyColumn 테스트?
  • SUB/PUB 실제 통신 테스트?
  • Repository/VM wiring?
  • DDS 개념 더 깊게?
  • HIDL 구조 분석?

원하는 거 알려줘, 바로 작성해줄게.