[ROS2] ROS2 프로그래밍 설정들

HY K·2024년 9월 22일

ROS2

목록 보기
18/18

이번 포스팅에서는 RSO2 프로그램이 설정들에 대해서 알아볼 것이다.
참고한 링크는 다음과 같다.
https://cafe.naver.com/openrt/24543


설정 스크립트(Setup Scripts)

setup.bash? local_setup.bash?

ROS2 워크스페이스의 설정 스크립트는 setup.bahs와 local_setup.bash 2가지가 있다. 이에 대해서 비교하기 전에 먼저 알아야 할 개념이 있다.

💡 underlay와 overlay
1. underlay

  • ROS2를 바이너리 설치하게 될 경우 /opt/ros/rosversion 폴더에 모든 구성 파일이 위치
  • ROS2를 소스로 빌드할 경우 ~/ros2_version/ 폴더와 같은 경로
    이러한 개발 환경을 underlay라고 부름

2. overlay

  • 개발자가 사용하는 워크스페이스를 overlay라고 부름
  • 사용자 정의, 프로젝트 관련 패키지 등등
  • 따라서 overlay 개발환경은 underlay 개발환경에 종속이 되게 됨

setup.bash와 local_setup.bash 사용법

💡 local_setup.bash
이 스크립트가 위치해있는 접두사(Prefix) 경로에 위치한 모든 패키지에 대한 환경을 설정하며, 상위 환경 혹은 상위 작업 공간에 대한 설정은 포함하지 않는다.

💡 setup.bash
현재 작업 공간이 빌드될 때 환경에 제공된 다른 모든 작업 공간에 대한 local_seutp.bash를 포함한다. 즉, underlay 작업공간에 대한 설정까지 포함한다.

워크스페이스가 1개라면 구분이 상관없지만, 여럿이라면 각 목적에 맞게 사용해야한다.

ROS_DOMAIN_ID vs Namespace

ROS2를 사용하며 동일 네트워크를 공유한다면 서로 다른 사람이 만들어놓은 노드라고 할지라도 동일 네트워크 상에서는 접근 및 데이터 공유가 가능하다. 이를 방지하기 위해서는 다음과 같은 3가지 세팅을 사용할 수 있다.

💡 네트워크 설정
1. 물리적으로 다른 네트워크 사용

2. ROS_DOMAIN_ID를 통해 DDS의 Domain 변경
이는 ROS2에서 DDS와 멀티캐스트 방식의 도입으로 가능하게 된 것으로, 다음 명령어를 사용하면 된다.

$ export ROS_DOMAIN_ID=<Int_Value>

보통 0~101의 정수 중 하나를 사용한다.

  1. 각 노드/토픽/서비스/액션 등의 이름에 Namespace 추가

노드/토픽/서비스/액션/파라미터 등의 고유 이름에 Namespace를 붙여주면 독립적으로 자신만의 네트워크를 그룹화 할 수 있다. 이는 2가지 방법으로 가능하다.

3-1. launch 파일에서 node_namespace 항목을 추가
3-2. run 명령어를 통해 노드를 실행시킬 때 --ros-args -r __ns:="namespace_name" 인자를 추가해서 실행

다만, 2번째 방법의 경우 그룹화를 시켜서 다른 그룹과 겹치지 않게 하는 것 뿐이지, 동일 네트워크의 다른 사용자가 해당 그룹의 정보는 확인할 수 있다.

profile
로봇, 드론, SLAM, 제어 공학 초보

0개의 댓글