ROS 2 네트워크에 연결하기
ROS 2 네트워크는 다수의 ROS 2 노드로 구성됩니다. ROS는 ROS master가 모든 활성 ROS 엔터티를 추적하면서 통신을 수행하는 반면에 ROS 2는 검색, 직렬화, 전송 등의 기능을 제공하는 엔드 투 엔드 미들웨어 DDS(Data Distribution Service)를 기반으로 합니다. 이러한 기능은 분산 검색이나 여러 수준의 "서비스 품질" 옵션으로 전송을 제어하는 것과 같은 ROS 2 설계 원리에 맞추어져 있습니다.
ROS 1 네트워크에 연결하려면 ROS 네트워크에 연결하기 항목을 참조하십시오.
ROS 2로 작업할 때는 일반적으로 다음 단계를 따릅니다.
ROS 2 네트워크에 연결 — ROS 2 네트워크에 연결하려면 MATLAB에서 네트워크 도메인 ID를 지정하는 ROS 2 노드를 만들어야 합니다.
데이터 교환 — 연결되고 나면 MATLAB은 publisher와 subscriber를 통해 동일한 도메인 ID의 다른 ROS 2 노드와 데이터를 교환합니다.
ROS 2 네트워크와의 연결 끊기 — 이 단계에서는 MATLAB ROS 2 노드, publisher, subscriber와 ROS 2 네트워크의 연결을 끊습니다.
디폴트 도메인에 ROS 2 노드 만들기
ros2node
를 사용하여 ID 0
을 사용하는 디폴트 도메인에 노드를 만듭니다. 노드는 동일한 도메인에 있는 다른 노드들과 통신하며, 다른 도메인에 있는 노드는 인지하지 못합니다.
defaultNode = ros2node("/default_node")
defaultNode = ros2node with properties: Name: '/default_node' ID: 0
clear
를 사용해 노드에 대한 참조를 제거하면 ROS 2 네트워크에서 해당 노드를 삭제할 수 있습니다.
clear defaultNode
다른 도메인에 ROS 2 노드 만들기
디폴트가 아닌 도메인에 노드를 만들려면 도메인 ID를 ros2node
에 대한 두 번째 입력 인수로 명시적으로 지정합니다. 아래 newDomainNode
는 ID 25
로 지정된 도메인에 생성됩니다.
newDomainNode = ros2node("/new_domain_node",25)
newDomainNode = ros2node with properties: Name: '/new_domain_node' ID: 25
특정 도메인의 네트워크 정보를 보려면 해당 ID를 ros2
함수에 파라미터로 제공합니다. 다음 명령은 도메인 ID가 25
인 모든 노드를 표시합니다.
ros2("node","list","DomainID",25)
/new_domain_node
디폴트 도메인 ID 변경하기
도메인 ID가 노드 또는 ros2
명령에 명시적으로 제공되지 않으면 ROS_DOMAIN_ID
환경 변수 값이 기본적으로 사용됩니다. 현재 값을 보려면 getenv
를 사용하십시오. 해당 환경 변수가 설정되지 않았거나 유효한 값으로 설정되지 않은 경우 디폴트 도메인 ID 0
이 사용됩니다.
getenv("ROS_DOMAIN_ID")
ans = 0×0 empty char array
setenv
명령을 사용하여 ROS_DOMAIN_ID
를 설정할 수 있습니다.
setenv("ROS_DOMAIN_ID","25") envDomainNode = ros2node("/env_domain_node")
envDomainNode = ros2node with properties: Name: '/env_domain_node' ID: 25
ros2 함수는 해당 환경 변수로 지정된 네트워크에 대한 정보를 제공합니다. 도메인 ID가 25
인 노드를 보려면 ros2 node list
를 사용합니다.
ros2 node list
/env_domain_node /new_domain_node
ROS_DOMAIN_ID
를 디폴트 값으로 초기화합니다.
setenv("ROS_DOMAIN_ID","")
ROS 2 네트워크에서 통신하기
기존 ROS 2 네트워크에 연결하려면 원하는 도메인에 노드를 만듭니다. ROS 2 네트워크는 검색 메커니즘을 통해 동일한 도메인에 새로운 노드가 생성되면 이를 자동으로 감지합니다.
ROS 2에서 각 노드는 시작될 때 자신의 존재를 동일한 도메인에 있는 다른 노드들에게 알립니다. 다른 노드들은 새로운 노드에 자신의 정보를 제공하여 이 알림에 응답합니다. publisher와 subscriber 같은 통신 객체를 가진 노드는 다른 노드도 해당 객체를 가지고 있고 호환되는 서비스 품질(QoS) 설정을 따르는 경우 이들 노드와 연결합니다. QoS 설정에 대한 자세한 내용은 Manage Quality of Service Policies in ROS 2 항목을 참조하십시오.
검색은 지속적으로 이루어지는 프로세스이기 때문에 새로운 노드가 생성될 때마다 네트워크에 참여하도록 처리됩니다. 각 노드는 ROS 2 네트워크를 모니터링하면서 ROS 네트워크의 ROS master와 유사하게 작동합니다. 또한 노드는 자신이 오프라인 상태가 될 때 자신의 부재를 다른 노드들에게 알립니다.
새로운 ROS 2 노드는 기존 노드들에게 자신을 알립니다. 기존 노드들은 알림에 응답한 다음 지속적인 통신이 가능하도록 설정합니다.
서브넷 외부에서 ROS 통신하기
서브넷은 IP 네트워크를 여러 개의 작은 네트워크 세그먼트로 논리적으로 분할한 것입니다. ROS 2 노드는 동일한 서브넷 내의 다른 노드들과 통신할 수 있습니다. 서브넷 외부에 있는 노드를 감지하려면 DEFAULT_FASTRTPS_PROFILE.xml 파일을 만들어 MATLAB이 사용하는 특정 DDS 구현을 구성합니다. 통신하고자 하는 서브넷 외부 시스템의 IP 주소 목록을 address
요소 내에 추가합니다. 두 시스템이 서로 통신하려면 양 시스템이 각각 상대 시스템의 주소를 자신의 DEFAULT_FASTRTPS_PROFILE.xml 파일에 지정해야 한다는 점에 유의하십시오. domainId
요소를 통신에 사용되는 네트워크에 적합한 값으로 설정합니다.
이 파일을 MATLAB 현재 작업 디렉터리에 저장합니다. MATLAB 외부에서 ROS 2를 사용하는 시스템이라면 이 파일을 ROS 2 애플리케이션이 실행되는 디렉터리 내에 두어야 합니다. 아래는 DEFAULT_FASTRTPS_PROFILES.xml 파일의 예입니다.
<?xml version="1.0" encoding="UTF-8" ?> <profiles> <participant profile_name="participant_win" is_default_profile="true"> <rtps> <builtin> <metatrafficUnicastLocatorList> <locator/> </metatrafficUnicastLocatorList> <initialPeersList> <locator> <udpv4> <address>192.34.17.36</address> </udpv4> </locator> <locator> <udpv4> <address>182.30.45.12</address> </udpv4> </locator> <locator> <udpv4> <address>194.158.78.29</address> </udpv4> </locator> </initialPeersList> </builtin> </rtps> </participant> </profiles>
ROS 2는 DEFAULT_FASTRTPS_PROFILES.xml 안에 나열된 IP 주소를 사용하는 시스템의 노드들에게 정보를 보냅니다. DEFAULT_FASTRTPS_PROFILES.xml이 없거나 올바른 IP 주소가 포함되어 있지 않으면, 서브넷 외부의 다른 컴퓨터에 있는 어떠한 노드의 정보도 받을 수 없습니다.