본문 바로가기
로보틱스/ROS

ROS2 노드간 통신 인터페이스

by makepluscode 2021. 10. 25.
반응형

ROS2 노드 간의 통신을 위한 인터페이스

ROS2 노드 간의 통신을 위한 인터페이스

ROS2 통신 인터페이스

ROS 애플리케이션은 메시지, 서비스 및 액션의 세가지 형태의 노드간의 통신을 지원한다. 노드 간의 통신을 위해 사용되는 인터페이스에 대해서 정리한다. 인터페이스는 IDL (interface definition language) 형식으로 작성할 수 있다.

기존 ROS Classic 처럼 msg, srv 등의 포멧을 지원한다.

ROS2 메시지 인터페이스 

ROS2 메시지 명세하는 방법

ROS 메시지의 필드를 설명하는 간단한 텍스트 파일의 형태로 작성한다.

fieldtype1 fieldname1
fieldtype2 fieldname2
fieldtype3 fieldname3

예를 들어 GPS 측위 data 는 다음과 같이 작성할 수 있다.

 

float64 latitude
float64 longitude

ros2 github 의 Path.msg 예제를 보면, 다음과 같이 (기존에 정의된) Message 형태를 재사용하여 정의할 수 있다.

# An array of poses that represents a Path for a robot to follow.

# Indicates the frame_id of the path.
std_msgs/Header header

# Array of poses to follow.
geometry_msgs/PoseStamped[] poses

경계가 있는 배열의 형태로 메세지를 Message 정의할 수도 있다.

 

int32[] unbounded_integer_array
int32[5] five_integers_array
int32[<=5] up_to_five_integers_array

string string_of_unbounded_size
string<=10 up_to_ten_characters_string

string[<=5] up_to_five_unbounded_strings
string<=10[] unbounded_array_of_string_up_to_ten_characters each
string<=10[<=5] up_to_five_strings_up_to_ten_characters_each

ROS2 메시지 정의 규칙

  • 영문 소문자, 숫자를 사용할 수 있으며 알파벳 문자로 시작되어야 한다.
  • 밑줄로 끝나면 안되며, 밑줄이 연속으로 있어도 안된다.
  • 초기값을 지정할 수 있다. (ex. float64 latitude 37.532600)
  • 문자열은 ' 또는 " 로 정의해야한다.
  • 상수는 대문자로 표기하며, 등호 기호 (=)로 사용해서 정의한다.

ROS2 서비스 인터페이스

ROS2 서비스 명세하는 방법

ROS 서비스의 요청과 응답을 분리해서 작성한다. 예를 들어, 다음은 문자열을 받아 문자열을 반환하는 서비스의 매우 간단한 예이다.

string str
---
string str

ROS2 서비스 정의 규칙

  • --- 를 사용하여 요청과 응답을 분리한다.
  • 서비스 내부에 다른 서비스를 포함할 수 없다.

참고자료

https://docs.ros.org/en/foxy/Concepts/About-ROS-Interfaces.html#

 

About ROS 2 interfaces — ROS 2 Documentation: Foxy documentation

ROS applications typically communicate through interfaces of one of three types: messages, services and actions. ROS 2 uses a simplified description language, the interface definition language (IDL), to describe these interfaces. This description makes it

docs.ros.org

반응형