개요
본 문서에서는 Ubuntu 18.04 환경에서 FastDDS를 사용하여 DDS(Data Distribution Service) 통신을 구현하는 과정을 단계별로 설명합니다. 전체 과정은 IDL 파일 작성, 코드 생성, 빌드, 실행의 네 단계로 구성됩니다.
1. IDL 파일 작성
먼저 통신에 사용할 데이터 구조를 정의하는 IDL(Interface Definition Language) 파일을 작성합니다. 이 파일은 메시지의 구조를 명시적으로 정의합니다.
예를 들어, 차량 정보 메시지를 정의하는 idl 파일을 생성합니다.
2. fastddsgen을 사용한 소스 코드 생성
IDL 파일 작성完毕后, fastddsgen 도구를 사용하여 해당 파일에서 C++ 소스 코드를 자동 생성할 수 있습니다.
fastddsgen -example CMake -d ./output_dir -I . vehicle_interfaces/msg/VehicleData.idl
ROS2 호환성이 필요한 경우, 다음 옵션을 추가합니다:
fastddsgen -example CMake -d ./output_dir -I . -typeros2 vehicle_interfaces/msg/VehicleData.idl
※ 참고: -typeros2 옵션을 사용하면 타입 이름이 ROS2 compatible 형태로 생성되며, topic 이름 앞에 rt/ 접두사가 붙습니다.
fastddsgen을 실행하면 다음과 같은 파일들이 자동으로 생성됩니다:
- VehicleData.cxx / VehicleData.h: 데이터 타입 정의
- VehicleDataPublisher.cxx / .h: 발행자 구현 코드
- VehicleDataSubscriber.cxx / .h: 구독자 구현 코드
- VehicleDataPubSub.Main.cxx: 데모용 메인 함수
- CMakeLists.txt: 빌드 설정 파일
CMakeLists.txt 설정 수정
생성된 CMakeLists.txt 파일에서 FastDDS 의존성을 올바르게 설정해야 합니다. 다음과 같이 수정합니다:
cmake_minimum_required(VERSION 3.16.3)
project("fastdds_demo")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
# FastDDS 설치 경로 설정
set(fastcdr_DIR /opt/fastdds/install/lib/cmake/fastcdr)
set(foonathan_memory_DIR /opt/fastdds/install/lib/foonathan_memory/cmake)
set(fastrtps_DIR /opt/fastdds/install/share/fastrtps/cmake)
set(foonathan_memory_vendor_DIR /opt/fastdds/install/share/foonathan_memory_vendor/cmake)
# 필수 패키지 찾기
find_package(fastcdr REQUIRED)
find_package(fastrtps REQUIRED)
3. executable 파일 빌드
CMakeLists.txt 설정이 완료되면, 다음 명령어로 빌드를 진행합니다:
mkdir -p build
cd build
cmake ..
make
빌드가 성공적으로 완료되면 build 디렉토리에 executable 파일이 생성됩니다.
4. 통신 테스트 실행
구현된 DDS 통신을 테스트하려면, 두 개의 별도 터미널에서 각각 publisher와 subscriber를 실행합니다.
터미널 1 (Publisher):
./VehicleData publisher
터미널 2 (Subscriber):
./VehicleData subscriber
publisher가 전송하는 데이터가 subscriber에서 수신되면 통신이 정상적으로 이루어지고 있는 것입니다.
참고 자료
- Fast-DDS 공식 문서: https://fast-dds.docs.eprosima.com/
- FastDDS GitHub: https://github.com/eProsima/Fast-DDS