[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
댓글남기기