주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

ROS 네트워크에 연결하기

ROS 네트워크는 하나의 ROS master와 다수의 ROS 노드로 구성됩니다. ROS master는 모든 활성 ROS 엔터티를 추적하여 ROS 네트워크에서의 통신을 수행합니다. 각 노드가 네트워크 내의 나머지 노드들과 통신할 수 있으려면 ROS master에 등록되어야 합니다. MATLAB®에서 ROS master를 시작할 수도 있고, MATLAB 외부에서(예: 다른 컴퓨터에서) master를 시작할 수도 있습니다.

ROS로 작업할 때는 일반적으로 다음 단계를 따릅니다.

  1. ROS 네트워크에 연결합니다. ROS 네트워크에 연결하려면 MATLAB에서 ROS master를 만들거나 기존 ROS master에 연결합니다. 두 경우 모두 MATLAB은 자체 ROS 노드(MATLAB 전역 노드라고 함)를 만들고 master에 등록합니다. rosinit 함수가 이 프로세스를 관리합니다.

  2. 데이터를 교환합니다. 연결되고 나면 MATLAB은 publisher, subscriber, 서비스를 통해 다른 ROS 노드와 데이터를 교환합니다.

  3. ROS 네트워크와의 연결을 끊습니다. rosshutdown 함수를 호출하여 ROS 네트워크로부터 MATLAB의 연결을 끊습니다.

이 예제에서는 다음을 수행하는 방법을 보여줍니다.

  • MATLAB에서 ROS master 만들기

  • 외부 ROS master에 연결하기

선행 조건: ROS 시작하기

MATLAB에서 ROS master 만들기

  • MATLAB에서 ROS master를 만들기 위해 인수 없이 rosinit를 호출합니다. 이 함수는 MATLAB이 ROS 네트워크의 다른 노드와 통신할 때 사용하는 전역 노드도 생성합니다.

rosinit
Initializing ROS master on http://ah-sradford:62803/.
Initializing global node /matlab_global_node_16436 with NodeURI http://ah-sradford:62807/

MATLAB 외부의 ROS 노드가 이제 ROS 네트워크에 참여할 수 있습니다. 이러한 노드는 MATLAB 호스트 컴퓨터의 호스트 이름 또는 IP 주소를 사용하여 MATLAB의 ROS master에 연결될 수 있습니다.

rosshutdown을 호출하여 ROS master와 전역 노드를 종료할 수 있습니다.

rosshutdown
Shutting down global node /matlab_global_node_16436 with NodeURI http://ah-sradford:62807/
Shutting down ROS master on http://ah-sradford:62803/.

외부 ROS master에 연결하기

rosinit 명령을 사용하여 외부 ROS master(예: 로봇 또는 가상 머신에서 실행되는 ROS master)에 연결할 수도 있습니다. master의 주소를 지정하는 방법에는 IP 주소로 지정하는 방법 또는 master를 실행하는 컴퓨터의 호스트 이름으로 지정하는 방법 두 가지가 있습니다.

rosinit를 호출한 이후에는 다른 구문을 사용하여 rosinit를 호출하기 전에 매번 rosshutdown을 호출해야 합니다. 간결한 설명을 위해 이 예제에서는 rosshutdown 호출을 생략합니다.

'master_host'는 호스트 이름 예시이고, '192.168.1.1'은 외부 ROS master의 IP 주소 예시입니다. 외부 master가 네트워크의 어디에 있는지에 따라 이러한 주소를 조정하십시오. 지정된 주소에서 master를 찾을 수 없으면 이 명령은 실패합니다.

rosinit('192.168.1.1')
rosinit('master_host')

rosinit에 대한 두 호출 모두 master가 표준 ROS master 포트인 포트 11311에서 네트워크 연결을 수락한다고 가정합니다. master가 다른 포트에서 실행 중이면 해당 포트를 두 번째 인수로 지정할 수 있습니다. 호스트 이름 master_host와 포트 12000에서 실행 중인 ROS master에 연결하려면 다음 명령을 사용합니다.

rosinit('master_host',12000)

master의 전체 URI(Uniform Resource Identifier)를 아는 경우 다음 구문을 사용하여 전역 노드를 만들고 이 master에 연결할 수 있습니다.

rosinit('http://192.168.1.1:12000')

노드 호스트 사양

경우에 따라 컴퓨터가 여러 네트워크에 연결되어 있고 IP 주소도 여러 개일 수 있습니다. 다음 그림은 예시를 보여줍니다.

왼쪽 아래의 컴퓨터는 MATLAB을 실행하고 있으며, 2개의 서로 다른 네트워크에 연결되어 있습니다. 한 서브넷의 IP 주소는 73.195.120.50, 다른 서브넷의 IP 주소는 192.168.1.100입니다. 이 컴퓨터는 IP 주소 192.168.1.1로 TurtleBot® 컴퓨터의 ROS master에 연결하려고 합니다. master 등록 과정에서 MATLAB 전역 노드는 다른 ROS 노드가 도달할 수 있는 IP 주소 또는 호스트 이름을 지정해야 합니다. TurtleBot의 모든 노드는 이 주소를 사용하여 MATLAB의 전역 노드로 데이터를 보냅니다.

rosinit를 master의 IP 주소로 호출하면, master와 연결하는 데 사용되는 네트워크 인터페이스를 탐지하여 전역 노드의 IP 주소로 사용하려고 시도합니다. 이 자동 탐지가 실패하면 rosinit 호출에서 NodeHost 이름-값 쌍을 사용하여 IP 주소 또는 호스트 이름을 명시적으로 지정할 수 있습니다. NodeHost 이름-값 쌍은 이미 여기에서 소개한 다른 구문과 함께 사용할 수 있습니다.

이러한 명령은 컴퓨터의 IP 주소를 ROS 네트워크에 192.168.1.100으로 알립니다.

rosinit('192.168.1.1','NodeHost','192.168.1.100')
rosinit('http://192.168.1.1:11311','NodeHost','192.168.1.100')
rosinit('master_host','NodeHost','192.168.1.100')

노드가 ROS 네트워크에 등록되면 명령 rosnode info <nodename>을 사용하여 이 노드의 주소를 확인할 수 있습니다. rosnode list를 호출하면 등록된 노드의 이름을 모두 볼 수 있습니다.

ROS 환경 변수

고급 활용 사례에서는 표준 ROS 환경 변수를 통해 ROS master의 주소와 노드를 알리는 주소를 지정하고 싶을 수 있습니다. 대부분의 활용 사례에서는 이전 섹션에서 설명한 구문으로 충분합니다.

rosinit에 인수가 제공되지 않으면 이 함수는 표준 ROS 환경 변수 값도 확인합니다. ROS_MASTER_URI, ROS_HOSTNAME, ROS_IP가 그러한 변수에 해당합니다. 다음과 같이 getenv 명령을 사용하여 이러한 변수의 현재 값을 볼 수 있습니다.

getenv('ROS_MASTER_URI')
getenv('ROS_HOSTNAME')
getenv('ROS_IP')

setenv 명령을 사용하여 이러한 변수를 설정할 수 있습니다. 환경 변수를 설정한 후 인수 없이 rosinit를 호출합니다. ROS master의 주소는 ROS_MASTER_URI, 전역 노드가 자신을 알리는 주소는 ROS_IP 또는 ROS_HOSTNAME으로 주어집니다. rosinit에 추가 인수를 지정하면 환경 변수의 값이 재정의됩니다.

setenv('ROS_MASTER_URI','http://192.168.1.1:11311')
setenv('ROS_IP','192.168.1.100')
rosinit

ROS_HOSTNAMEROS_IP를 둘 다 설정할 필요는 없습니다. 둘 다 설정되어 있으면 ROS_HOSTNAME이 우선합니다.

연결 확인하기

ROS 연결이 제대로 작동하려면 모든 노드가 master와 통신할 수 있어야 하며, 노드끼리도 서로 통신할 수 있어야 합니다. subscriber, publisher, 서비스를 등록하려면 개별 노드가 master와 통신해야 합니다. 또한 데이터를 주고받을 수 있도록 서로 통신할 수 있어야 합니다. ROS 네트워크가 올바르게 설정되어 있지 않으면 데이터를 보낼 수는 있지만 받을 수는 없거나 그 반대가 될 수 있습니다.

아래 다이어그램의 ROS 네트워크에는 하나의 ROS master가 있고 이 master에 2개의 노드가 등록되어 있습니다. 각 노드는 ROS 네트워크 내의 다른 알려진 노드의 주소를 찾기 위해 master에 연결합니다. 각 노드가 상대 노드의 주소를 알게 되면 master의 관여 없이도 데이터 교환이 이루어질 수 있습니다.

다음 단계

참고 항목

도움말 항목