Ubuntu 18.04에서 FastDDS를 사용한 통신 구현 가이드

개요

본 문서에서는 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

태그: fastdds ubuntu DDS middleware ros2

7월 11일 18:27에 게시됨