ubuntu linux

내 장비에서 FastDDS profile로 외부 노드 무시하기

우금붕 2025. 6. 23. 10:58

환경 1.

  • ros2 humble

 

문제 1.

  • zed 카메라를 실행하니 같은 네트워크상에 있으면 다른 컴퓨터에서도 노드 및 토픽들이 뜨는 문제가 발생함
  • zed 카메라를 실행한게 본인이 아니었기에, 제어할 수 없는 상황
  • ROS 2의 기본 DDS(Fast DDS) discovery 방식은 네트워크 전체를 스캔하기 때문에, 내가 실행하지 않은 노드(예: 외부 ZED 카메라 노드)가 내 Rviz2나 ROS 2 노드에 자동으로 뜨는 문제가 발생

 

해결 시도 1. ROS_DOMAIN_ID 설정

  • ~/.bashrc에 ROS_DOMAIN_ID 추가 설정
  • 해결 안됨. 동일한 문제 발생

 

해결 시도 2. FastDDS profile로 외부 노드 무시

  • 다른 호스트의 노드는 무시하고, 로컬 노드끼리만 통신하도록 설정
  • XML 파일 생성
mkdir -p ~/.ros
gedit ~/.ros/fastdds_profile_block.xml
  • 아래 내용 붙여넣기
<?xml version="1.0" encoding="UTF-8" ?>
<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
  <profiles>
    <participant profile_name="local_participant" is_default_profile="true">
      <rtps>
        <builtin>
          <discovery_config>
            <!-- 다른 호스트에서 온 노드는 무시 -->
            <ignoreParticipantFlags>FILTER_DIFFERENT_HOST</ignoreParticipantFlags>
          </discovery_config>
        </builtin>
      </rtps>
    </participant>
  </profiles>
</dds>
  • 설정 설명
태그 설명
is_default_profile="true" 이 설정이 모든 노드에 기본 적용
ignoreParticipantFlags 필터링 조건
FILTER_DIFFERENT_HOST 다른 컴퓨터에서 온 ROS 노드는 무시
  • 추가 설명(다른 옵션)
태그 설명
FILTER_DIFFERENT_HOST 현재 컴퓨터가 아닌 곳에서 온 노드 무시
FILTER_DIFFERENT_PROCESS 같은 컴퓨터 내 다른 프로세스도 무시
FILTER_DIFFERENT_USER 다른 사용자 계정의 노드 무시
  • 환경 변수 등록(원한다면 ~/.bashrc에 등록)
export FASTRTPS_DEFAULT_PROFILES_FILE=$HOME/.ros/fastdds_profile_block.xml

 

 

 

 

결과 2. 해당 내용으로 해결 완료