[ROS2] (18)-직접 msg, srv 파일 만들기

msg, srv 파일 만들기

이전 4개의 포스팅에서는 이미 정의된 msg, srv 파일을 이용한 노드를 만들어 보았다. 이번 포스팅에서는 직접 msg, srv 파일을 만들어서 메시지의 구조를 정의해보자.

패키지 만들기

여기서는 .msg, .srv 파일을 포함하는 패키지를 만들고, 다른 패키지에서 이 패키지를 불러와서 사용할 수 있도록 할 것이다. 이전에 만든 패키지들과 같은 위치(dev_ws/src)에 새로운 패키지를 만든다.

$ cd dev_ws/src
$ ros2 pkg create --build-type ament_cmake tutorial_interfaces

여기서는 ament_cmake로 패키지를 만들었다. 현재는 .msg, .srv 파일을 파이썬 패키지로만 만드는 방법은 없다. 따라서, CMake 패키지로 만들어서 파이썬 패키지에서 불러와서 사용해야 한다.

.msg파일과 .srv 파일은 별도의 폴더에 저장하는 것이 좋다. dev_ws/src/tutorial_interfaces 폴더 안에 msg, srv 폴더를 만들자.

$ cd dev_ws/src/tutorial_interfaces
$ mkdir msg
$ mkdir srv

메시지 구조 정의하기

이제 메시지 구조를 정의해보자. msg 폴더 안에 Num.msg 파일을 만들고 아래 내용을 붙여넣자.

int64 num

다음으로 srv 폴더 안에 AddThreeInts.srv 파일을 만들고 아래 내용을 붙여넣는다.

int64 a
int64 b
int64 c
---
int64 sum

정의한 구조를 특정 언어에서 사용하기 위해서는 CMakeLists.txt 파일에서 아래 내용을 추가해주어야 한다.

find_package(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME} "msg/Num.msg" "srv/AddThreeInts.srv")

package.xml 파일에 dependency도 추가해주어야 한다.

<build_depend>rosidl_default_generators</build_depend>

<exec_depend>rosidl_default_runtime</exec_depend>

<member_of_group>rosidl_interface_packages</member_of_group>

빌드하기

tutorial_interfaces 패키지를 빌드해보자.

$ cd dev_ws
$ colcon build --packages-select tutorial_interfaces

이제 메시지 타입이 제대로 정의되었는지 확인해보자.

$ cd dev_ws
$ source install/setup.bash

$ ros2 interface show tutorial_interfaces/msg/Num
$ ros2 interface show tutorial_interfaces/srv/AddThreeInts

출력이 제대로 나온다면 잘 정의된 것이다.

이전 포스팅에서 만든 노드 코드에서 메시지 타입 부분과 dependency 부분만 수정하면 새로 만든 메시지 타입을 적용할 수 있다. 상세 내용은 이 포스팅에서는 생략하도록 한다. 필요한 경우 아래 사이트를 참고 바란다.

https://docs.ros.org/en/foxy/Tutorials/Custom-ROS2-Interfaces.html

댓글남기기