Kostum messages, srv dan action

Kostum msg, srv dan action standar nya ditempatkan di package yang berbeda. Misalnya dalam projek ini, mereka akan di tempatkan di package ros_custom_msgs.

catkin_create_pkg ros_custom_msgs std_msgs message_generation

Setelah itu kita bisa edit CMakeLists.txt dan package.xml seperti berikut ini:

 0 cmake_minimum_required(VERSION 2.8.3)
 1 project(ros_custom_msgs)
 2 
 3 ## Compile as C++11, supported in ROS Kinetic and newer
 4 # add_compile_options(-std=c++11)
 5 
 6 find_package(catkin REQUIRED COMPONENTS
 7   std_msgs
 8   message_generation
 9 )
10 
11 #add_action_files(DIRECTORY action
12 #   FILES
13 #     DetectScene.action
14 #)
15  
16 #add_message_files(
17 #   FILES
18 #	    contoh_msg.msg
19 #)
20 
21 # Generate services in the 'srv' folder
22 add_service_files(
23   FILES
24     CountWords.srv
25 )
26 
27 ## Generate added messages and services with any dependencies listed here
28 generate_messages(
29   DEPENDENCIES
30     std_msgs  # Or other packages containing msgs
31 )
32 
33 # Define that it's a catkin package So that it can be found by pkg 
34 # that is dependent on this package
35 catkin_package(
36   CATKIN_DEPENDS
37     message_runtime
38 )

File srv yang sudah dibuat (lihat subsection Membuat kostum srv file), kemudian di tambahkan ke add_service_files. Begitu pula dengan msg dan action files.

 0 <?xml version="1.0"?>
 1 <package format="2">
 2   <name>ros_custom_msgs</name>
 3   <version>0.0.0</version>
 4   <description>The ros_custom_msgs package</description>
 5 
 6   <maintainer email="mwasil@outlook.co.id">Mohammad Wasil</maintainer>
 7   <author email="mwasil@outlook.co.id">Mohammad Wasil</author>
 8 
 9   <license>GPL-3.0</license>
10 
11   <buildtool_depend>catkin</buildtool_depend>
12   <build_depend>std_msgs</build_depend>
13   <build_depend>message_generation</build_depend>
14   
15   <exec_depend>message_runtime</exec_depend>
16 
17 </package>

Untuk membuat sebuah kostum srv file, kita memerlukan build dependency pada message_generation dan runtime atau execution dependency pada message_generation runtime.

Tree structure dari kostum messages, srv dan action files:

$ tree ros_custom_msgs/
ros_custom_msgs/
├── action
├── CMakeLists.txt
├── msg
├── package.xml
└── srv
    └── CountWords.srv

Membuat kostum srv file

Service definition atau srv file merupakan sebuah list dari berbagai macam ROS messages dan digunakan oleh service. Perbedaannya dengan message (msg) file adalah srv file memiliki request dan response yang dipisahkan dengan ---. Standar penamaan srv file diawali dengan predikat (verb), misalnya : CountWords, RecognizeObject, ComputeIK.

Berikut adalah contoh dari sebuah service file dengan request sebuah kalimat (String) dan response nya adalah jumlah kata (Int32) dalam kalimat tersebut.

std_msgs/string words
---
std_msgs/Int32 num_words

Kemudian build package ros_custom_msgs:

catkin build ros_custom_msgs

Verifikasi msg, srv atau action kita sudah ready:

$ rossrv show CountWords
[ros_custom_msgs/CountWords]:
std_msgs/String words
string data
---
std_msgs/Int32 num_words
int32 data

Membuat kostum msg file

ToDo

Membuat kostum action file

ToDo