Main Content

ROS 시작하기

이 예제에서는 MATLAB®에서 ROS를 설정하여 ROS 네트워크와 ROS 메시지에 대한 정보를 가져오는 방법을 소개합니다.

로봇 운영 체제(ROS: Robot Operating System)는 로봇 시스템의 서로 다른 부분들이 서로를 발견하고 데이터를 주고받을 수 있도록 지원하는 통신 인터페이스입니다. MATLAB®은 ROS가 지원되는 물리 로봇 또는 Gazebo®와 같은 로봇 시뮬레이터와 데이터를 교환할 수 있는 함수 라이브러리를 통해 ROS를 지원합니다.

ROS 용어

  • ROS 네트워크는 ROS를 통해 통신하는 로봇 시스템의 여러 부분(예: 플래너 또는 카메라 인터페이스)으로 구성되어 있습니다. 네트워크는 여러 컴퓨터에 분산될 수 있습니다.

  • ROS master는 ROS 네트워크의 다양한 부분을 조정합니다. master가 실행 중인 시스템의 호스트 이름 또는 IP 주소를 지정하는 Master URI(Uniform Resource Identifier)로 식별됩니다.

  • ROS 노드에는 관련된 ROS 기능의 모음(예: publisher, subscriber, 서비스 등)이 포함되어 있습니다. 하나의 ROS 네트워크에 다수의 ROS 노드가 있을 수 있습니다.

  • publisher, subscriber, 서비스는 데이터를 처리하는 서로 다른 종류의 ROS 엔터티입니다. 이들은 메시지를 사용하여 데이터를 교환합니다.

  • publisher는 특정 토픽(예: "오도메트리")에 메시지를 보내고 해당 토픽의 subscriber는 해당 메시지를 수신합니다. 하나의 토픽이 여러 publisher 및 subscriber와 연결될 수 있습니다.

자세한 내용은 Robot Operating System (ROS) 항목과 ROS 웹사이트의 Concepts 섹션을 참조하십시오.

ROS 네트워크 초기화하기

rosinit를 사용하여 ROS를 초기화합니다. 기본적으로 rosinit는 MATLAB에서 ROS master를 만들고 master에 연결된 전역 노드를 시작합니다. 전역 노드는 다른 ROS 함수에 의해 자동으로 사용됩니다.

rosinit
Launching ROS Core...
.....Done in 5.7786 seconds.
Initializing ROS master on http://172.21.16.85:51063.
Initializing global node /matlab_global_node_13423 with NodeURI http://ah-avijayar:52604/ and MasterURI http://localhost:51063.

rosnode list를 사용하여 ROS 네트워크의 모든 노드를 봅니다. 사용 가능한 노드는 rosinit 에 의해 생성된 전역 노드뿐입니다.

rosnode list
/matlab_global_node_13423

세 개의 추가 노드와 샘플 publisher 및 subscriber로 네트워크를 채우기 위해 exampleHelperROSCreateSampleNetwork를 사용합니다.

exampleHelperROSCreateSampleNetwork

세 개의 새 노드(node_1, node_2, node_3)를 확인하기 위해 rosnode list를 다시 사용합니다.

rosnode list
/matlab_global_node_13423
/node_1
/node_2
/node_3

아래 그림은 ROS 네트워크의 현재 상태를 보여줍니다. 현재 publisher, subscriber 또는 서비스가 없기 때문에 MATLAB 전역 노드는 연결이 끊어져 있습니다.

토픽

rostopic list 사용하여 ROS 네트워크에서 사용 가능한 토픽을 확인합니다. 네 가지 활성 토픽, 즉 /pose, /rosout, /scan, /tf가 있습니다. 디폴트 토픽인 rosout 토픽과 tf 토픽은 항상 ROS 네트워크에 있습니다. 나머지 두 토픽은 샘플 네트워크의 일부로 생성되었습니다.

rostopic list
/pose  
/rosout
/scan  
/tf    

rostopic info <topicname>을 사용하여 특정 토픽에 대한 특정 정보를 가져옵니다. 아래의 명령은 /node_1/pose 토픽을 퍼블리시(메시지 전송)하고 /node_2가 해당 토픽을 서브스크라이브(메시지 수신)하는 것을 보여줍니다. 자세한 내용은 ROS Publisher 및 ROS Subscriber를 사용해 데이터 교환하기 항목을 참조하십시오.

rostopic info /pose
Type: geometry_msgs/Twist
 
Publishers:
* /node_1 (http://ah-avijayar:52609/)
 
Subscribers:
* /node_2 (http://ah-avijayar:52614/)

rosnode info <nodename>을 사용하여 특정 노드에 대한 정보를 가져옵니다. 아래의 명령을 보면 node_1/pose 토픽, /rosout 토픽, /tf 토픽에 퍼블리시하고, /scan 토픽을 서브스크라이브하며, /node_1/get_loggers 서비스와 /node_1/set_logger_level 서비스를 제공하고 있습니다. 디폴트 기록 서비스인 get_loggers 서비스와 set_logger_level 서비스는 ROS 네트워크에서 생성된 모든 노드에서 제공합니다.

rosnode info /node_1
Node: [/node_1]
URI: [http://ah-avijayar:52609/]
 
Publications (3 Active Topics): 
 * /pose
 * /rosout
 * /tf
 
Subscriptions (1 Active Topics): 
 * /scan
 
Services (2 Active): 
 * /node_1/get_loggers
 * /node_1/set_logger_level

서비스

ROS 서비스는 ROS 네트워크에서 프로시저 호출을 위한 메커니즘을 제공합니다. 서비스 클라이언트는 요청 메시지를 서비스 서버에 보내고, 서비스 서버는 요청 정보를 처리하고 응답 메시지를 반환합니다(Call and Provide ROS Services 항목 참조).

rosservice list를 사용하여 ROS 네트워크에서 사용 가능한 서비스 서버(제공자)를 모두 확인합니다. 아래의 명령은 모든 노드의 디폴트 logger 서비스와 함께 두 가지 서비스(/add 서비스와 /reply 서비스)를 사용할 수 있음을 보여줍니다.

rosservice list
/add
/matlab_global_node_13423/get_loggers
/matlab_global_node_13423/set_logger_level
/node_1/get_loggers
/node_1/set_logger_level
/node_2/get_loggers
/node_2/set_logger_level
/node_3/get_loggers
/node_3/set_logger_level
/reply

rosservice info <servicename>을 사용하여 특정 서비스에 대한 정보를 가져옵니다.

rosservice info /add
Node: /node_3
URI: rosrpc://ah-avijayar:52618
Type: roscpp_tutorials/TwoInts
Args: MessageType A B

메시지

publisher, subscriber, 서비스는 ROS 메시지를 사용하여 정보를 교환합니다. 각 ROS 메시지에는 해당 메시지의 데이터형과 정보 레이아웃을 정의하는 관련 메시지 유형이 있습니다(Work with Basic ROS Messages 항목 참조).

rostopic type <topicname>을 사용하여 토픽에서 사용하는 메시지 유형을 확인합니다. 아래의 명령은 /pose 토픽이 geometry_msgs/Twist 메시지 유형을 사용하고 있음을 보여줍니다.

rostopic type /pose
geometry_msgs/Twist

rosmsg show <messagetype>을 사용하여 메시지 유형의 속성을 확인합니다. geometry_msgs/Twist 메시지 유형은 두 가지 속성, 즉 Linear 속성과 Angular 속성을 가집니다. 각 속성은 메시지 유형 geometry_msgs/Vector3이며 차례로 세 가지 double형 속성을 갖습니다.

rosmsg show geometry_msgs/Twist
% This expresses velocity in free space broken into its Linear and Angular parts.
Vector3  Linear
Vector3  Angular
rosmsg show geometry_msgs/Vector3
% This represents a vector in free space. 
% It is only meant to represent a direction. Therefore, it does not
% make sense to apply a translation to it (e.g., when applying a 
% generic rigid transformation to a Vector3, tf2 will only apply the
% rotation). If you want your data to be translatable too, use the
% geometry_msgs/Point message instead.

double X
double Y
double Z

MATLAB에서 사용할 수 있는 메시지 유형의 전체 목록을 보려면 rosmsg list를 사용합니다.

ROS 네트워크 종료하기

exampleHelperROSShutDownSampleNetwork를 사용하여 ROS 네트워크에서 샘플 노드, publisher, subscriber를 제거합니다. 이 명령은 이전에 샘플 네트워크를 만들 때 exampleHelperROSStartSampleNetwork를 사용한 경우에만 필요합니다.

exampleHelperROSShutDownSampleNetwork

rosshutdown을 사용하여 MATLAB에서 ROS 네트워크를 종료합니다. 그러면 rosinit에 의해 시작된 ROS master가 종료되고 전역 노드가 삭제됩니다. ROS 네트워크 작업이 끝나면 rosshutdown을 사용하는 것이 좋습니다.

rosshutdown
Shutting down global node /matlab_global_node_13423 with NodeURI http://ah-avijayar:52604/ and MasterURI http://localhost:51063.
Shutting down ROS master on http://172.21.16.85:51063.

다음 단계