ROS2에서 custom message를 만들어서 발행해 보자.
워크스페이스에 src 폴더를 생성하고, src 내부에서 새로운 패키지를 생성한다. (다음 명령어 실행)
$ ros2 pkg create --build-type ament_cmake my_msgs
패키지를 생성하면, CMakeLists.txt, package.xml 파일이 생성되었을 것이다.
새로운 메시지를 만들기 위해서는, msg 폴더를 생성하고 그 내부에서 커스텀 메시지 내용을 정의한다.
$ mkdir msg
예를 들어, bounding box message를 발행하고자 한다면 다음과 같이 쓸 수 있다.
한번에 여러 개의 메시지들을 정의하고 빌드 후 사용할 수 있다. (메시지 명에 '_'와 같은 특수문자의 사용은 금한다. 메시지명은 카멜 케이스로 정의하자.)
메시지를 정의했으면, CMakeLists.txt와 packages.xml 파일을 수정해 주어야 한다.
CMakeLists.txt
에 다음 내용을 추가한다.
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/BoundingBoxes.msg"
)
package.xml
에 다음 내용을 추가한다.
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
워크스페이스 내부에서 다음 명령어를 실행하여 패키지를 빌드한다.
$ colcon build --packages-select my_msgs
워크스페이스 내 전체 메시지를 빌드하려면, colcon build
를 실행하면 된다.
colcon build가 설치되지 않은 경우, 다음의 명령어로 설치하면 된다.
$ pip install -U colcon-common-extensions
빌드 후에는 워크스페이스에 대하여 source를 실행시켜주면 빌드한 메시지들을 사용할 수 있다.
$ source my_ws/install/setup.bash
빌드가 잘 적용 되었는지는 interface로 확인해 볼 수 있다.
$ ros2 interface list
$ ros2 interface list|grep ~
topic에 대한 상세한 정보는 다음과 같이 확인한다.
$ ros2 interface show my_topic