Main Content

ROS 2 시작하기

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

로봇 운영 체제 2(ROS 2: Robot Operating System 2)는 로봇 시스템의 서로 다른 부분들이 서로를 발견하고 데이터를 주고받을 수 있도록 지원하는 통신 인터페이스인 ROS의 두 번째 버전입니다. MATLAB®은 함수 라이브러리를 통해 ROS 2를 지원하는데, 이 라이브러리를 사용하면 ROS 2가 지원되는 물리 로봇 또는 Gazebo®와 같은 로봇 시뮬레이터와 데이터를 교환할 수 있습니다. ROS 2는 검색, 직렬화, 전송 등의 기능을 제공하는 엔드 투 엔드 미들웨어 DDS(Data Distribution Service)를 기반으로 합니다. 이러한 기능은 분산 검색이나 여러 수준의 "서비스 품질" 옵션으로 전송을 제어하는 것과 같은 ROS 2 설계 원리에 맞추어져 있습니다. DDS는 UDP와 같은 신뢰할 수 없는 네트워크 프로토콜을 통해 통신을 제공하는 RTPS(Real Time Publish-Subscribe) 프로토콜을 사용합니다. 자세한 내용은 RTPS를 참조하십시오.

ROS에 대해 알아보려면 ROS 시작하기 항목을 참조하십시오.

ROS 2 용어

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

  • ROS 2 노드는 관련된 ROS 2 기능의 모음(예: publisher, subscriber)이 포함된 엔터티입니다. 하나의 ROS 2 네트워크에 다수의 ROS 2 노드가 있을 수 있습니다.

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

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

  • 도메인은 네트워크의 물리적 분할입니다. 도메인은 도메인 ID라고 하는 고유한 정수 값으로 식별됩니다. 기본적으로 도메인 ID0입니다.

  • ROS 2 네트워크에서 모든 노드는 생성되면 자신의 존재를 동일한 도메인 ID에 있는 다른 노드들에게만 알립니다.

  • ROS 2 네트워크는 DDS(Data Distribution Service)를 기반으로 하며 따라서 분산된 네트워크의 여러 노드를 연결할 수 있습니다. 자세한 내용은 Switching Between ROS Middleware Implementations 항목을 참조하십시오.

  • RTPS(Real Time publisher-subscriber) 프로토콜은 신뢰할 수 없는 네트워크 조건에서 메시지를 전송하는 기능을 ROS 2 네트워크에 제공합니다.

  • ROS 2는 다양한 QoS(Quality of Service) 정책을 제공하여 사용자가 노드 간의 통신을 조정할 수 있도록 합니다. 자세한 내용은 Manage Quality of Service Policies in ROS 2 항목을 참조하십시오.

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

ROS 2 네트워크 초기화

ROS와 달리 ROS 2는 MATLAB에서 초기화할 필요가 없습니다. ROS 2 네트워크는 노드 생성 시 자동으로 시작됩니다.

ros2node를 사용하여 노드를 만듭니다.

test1 = ros2node("/test1")
test1 = 
  ros2node with properties:

    Name: '/test1'
      ID: 0

ros2 node list를 사용하여 ROS 2 네트워크의 모든 노드를 봅니다.

ros2 node list
/test1

clear 를 사용하여 ROS 2 네트워크의 노드를 종료합니다.

clear test1

exampleHelperROS2CreateSampleNetwork를 사용하여 샘플 publisher와 subscriber가 있는 노드 3개를 추가로 ROS 네트워크에 만듭니다.

exampleHelperROS2CreateSampleNetwork

ros2 node list를 다시 사용하여 새로 생긴 노드를 확인합니다.

ros2 node list
/node_1
/node_2
/node_3

다음은 샘플 노드가 생성된 이후의 ROS 2 네트워크를 시각적으로 표현한 것입니다. 예제의 나머지 부분에서 ROS 2 네트워크를 살펴볼 때 이 표현을 참조로 활용하십시오.

토픽 및 서비스 품질 정책

명령 ros2 topic list를 실행하여 ROS 2 네트워크에서 사용 가능한 토픽을 확인합니다. 이 명령은 세 가지 활성 토픽 /pose, /parameter_events,, /scan을 반환합니다. 토픽 /parameter_events는 ROS 2 네트워크에 항상 존재하는 전역 토픽입니다. 노드는 /paramater_events 토픽을 사용하여 네트워크에서 파라미터를 모니터링하거나 변경합니다. /scan과 /pose 토픽은 샘플 네트워크의 일부로 생성됐습니다.

ros2 topic list
/parameter_events
/pose
/rosout
/scan

각 토픽은 메시지 유형과 연결되어 있습니다. 명령 ros2 topic list -t 를 실행하여 각 토픽의 메시지 유형을 확인합니다.

ros2 topic list -t
            Topic                       MessageType           
    _____________________    _________________________________

    {'/parameter_events'}    {'rcl_interfaces/ParameterEvent'}
    {'/pose'            }    {'geometry_msgs/Twist'          }
    {'/rosout'          }    {'rcl_interfaces/Log'           }
    {'/scan'            }    {'sensor_msgs/LaserScan'        }

서비스 품질(QoS) 정책 옵션은 publisher와 subscriber가 메시지를 처리하고 교환하는 방식을 변경합니다.

1. 메시지를 처리 대기열에 넣는 방법에 따라 통신 객체의 동작을 결정하려면 History QoS 정책과 Depth QoS 정책을 사용합니다. History를 다음 옵션 중 하나로 지정하십시오.

  • "keeplast" — 메시지는 버리고 최신 정보만 유지합니다.

  • "keepall" — 수신된 메시지가 모두 처리될 때까지 대기열에 보관합니다.

2. 메시지가 subscriber에게 전달되도록 보장하려면 Reliability QoS 정책을 사용합니다. Reliability를 다음 옵션 중 하나로 지정하십시오.

  • "reliable" — subscriber가 메시지 수신을 확인할 때까지 publisher가 계속해서 메시지를 전송합니다.

  • "besteffort" — publisher가 메시지를 한 번만 전송하도록 허용합니다.

3. 늦게 참여하는 연결을 위해 메시지 지속성을 제어하려면 Durability QoS 정책을 Depth 입력값과 함께 사용합니다. Durability를 다음 옵션 중 하나로 지정하십시오.

  • "transientlocal" — publisher가 처음 메시지를 보낸 후 subscriber가 네트워크에 참여하는 경우 publisher는 유지된 메시지를 subscriber에게 전송합니다.

  • "volatile" — publisher는 메시지를 보낸 후에 메시지를 보존하지 않습니다. subscriber는 publisher에게 보존된 메시지를 요청하지 않습니다.

메시지

publisher와 subscriber는 ROS 2 메시지를 사용하여 정보를 주고받습니다. 각 ROS 2 메시지에는 해당 메시지의 데이터형과 정보 레이아웃을 정의하는 관련 메시지 유형이 있습니다. 자세한 내용은 Work with Basic ROS 2 Messages 항목을 참조하십시오.

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

ros2 msg show geometry_msgs/Twist
# This expresses velocity in free space broken into its linear and angular parts.

Vector3  linear
Vector3  angular
ros2 msg show geometry_msgs/Vector3
# This represents a vector in free space.

# This is semantically different than a point.
# A vector is always anchored at the origin.
# When a transform is applied to a vector, only the rotational component is applied.

float64 x
float64 y
float64 z

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

ROS 2 네트워크와 연결 끊기

exampleHelperROS2ShutDownSampleNetwork 를 사용하여 ROS 2 네트워크에서 샘플 노드, publisher, subscriber를 제거합니다. 자체 노드를 제거하려면 노드, publisher 또는 subscriber 객체와 함께 clear를 사용합니다.

exampleHelperROS2ShutDownSampleNetwork

DDS 및 RMW 구현

MATLAB® 및 Simulink®에서 ROS 2로 작업할 때 DDS(data distribution service)를 사용하기 위해 RMW 구현 간에 전환할 수 있습니다. 필요한 RMW 구현을 구성하려면 다음 단계를 따릅니다.

1. MATLAB 툴스트립의 환경 섹션에 있는 탭에서 기본 설정을 엽니다.

2. ROS Toolbox 기본 설정 대화 상자에서 Python™ 환경을 구성하고 ROS 미들웨어(RMW) 구현 드롭다운 목록에서 구현을 선택합니다. 디폴트 구현은 rmw_fastrtps_cpp입니다.

3. 사용자 지정 RMW 구현을 구성하여 이 구현으로 전환을 클릭하여 사용자 지정 RMW 구현으로 전환합니다. 이렇게 하면 ROS 미들웨어 구성 대화 상자가 시작됩니다.

4. 사용자 지정 RMW 구현 패키지를 설치하고 빌드한 다음, 선택한 사용자 지정 RMW 구현을 사용하는 ROS 2 노드의 생성을 검증합니다.

다음 단계