기록
[GPT가 알려주는] DDS 통신 본문
오케이 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으로 수신 데이터 표시
이제 거의 완성임.
👉 다음 단계는?
- ViewModel에 Repository 연결
- Screen에서 subscribe 버튼 누르면 registerCommand
- PC에서 Publish하면 Android 앱 화면에 뜸
- 자동 스크롤 적용
- 메시지 Hex 보기 옵션 추가 가능
원하면 전체 MVVM + Hilt + Compose 구조 코드 템플릿까지 만들어줄게.
joo, 어느 부분 먼저 해결하고 싶어?
- LazyColumn 테스트?
- SUB/PUB 실제 통신 테스트?
- Repository/VM wiring?
- DDS 개념 더 깊게?
- HIDL 구조 분석?
원하는 거 알려줘, 바로 작성해줄게.
'잡동사니 > GPT가 알려주는' 카테고리의 다른 글
| [GPT가 알려주는] HAL 그리고 포팅 (0) | 2025.12.08 |
|---|---|
| [GPT가 알려주는] FCM mismatch란? (0) | 2025.12.08 |
| [GPT가 알려주는] AIDL 파일 (0) | 2025.12.08 |
| [GPT가 알려주는] JVM 언어란? (0) | 2025.12.05 |
| [GPT가 알려주는] JniLib란? (0) | 2025.12.05 |