ROS2 4 (Creating custom srv file)

ROS2のTutorialsをやります。
暫くはTutorialsそのままをやります。

Service通信をC++で実装する前にsrvを定義します。

Creating custom msg and srv files

環境はUbuntu 22.04です。ROS2 Humbleです。

ディレクトリ構成

srvを作るために専用のPackageをつくります。つくる必要があります。今回はservice_sv_cl_interfacesとします。
今回はMyAddTwoInts.srvをつくります。これをcolcon buildするとmy_add_two_ints.hppが生成されます。

上記と同じworkspaceに配置した「Service通信をさせるPackage(service_sv_clとします)」から
#include "service_sv_cl_interfaces/srv/my_add_two_ints.hpp"とします。

  • ros2_study/
    • service_cpp_ws/
      • build/
      • install/
      • log/
      • src/
        • service_sv_cl_interfaces/
          • include/
            • service_sv_cl_interfaces/
          • srv/
            • MyAddTwoInts.srv
          • CMakeLists.txt
          • package.xml
        • service_sv_cl/

下記はROS2のライブラリを参考にした図です。
msgsの数が多い場合も考慮すると2階層が必要ということでしょう。
1階層の場合と2階層の場合の両方があります。

  • ros2_study/
    • workspace/
      • src/
        • calculation_msgs/
          • add_msgs/
            • srv/
              • MyAddTwoInts.srv
        • service_sv_cl/

msgについても同様です。

Packageをつくろう !!


$ cd ~/ros2_study
$ mkdir service_cpp_ws
$ cd service_cpp_ws
$ mkdir src
$ cd src

packageの名前をservice_sv_cl_interfacesとします。


$ ros2 pkg create service_sv_cl_interfaces --build-type ament_cmake

独自のsrvを定義しよう !!

型の一覧は下記で定義されています。

Interfaces


$ cd service_sv_cl_interfaces (cd ~/ros2_study/service_cpp_ws/src/service_sv_cl_interfaces)
$ mkdir srv
$ cd srv
$ vi MyAddTwoInts.srv

MyAddTwoInts.srv


int64 a
int64 b
---
int64 sum

独自のsrvを定義したからCMakeLists.txtを変更しよう !!

srvのための記述を追記します。


$ cd .. (cd ~/ros2_study/service_cpp_ws/src/service_sv_cl_interfaces)
$ vi CMakeLists.txt

find_package(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces( ${PROJECT_NAME} "srv/MyAddTwoInts.srv" )

追加していきやすい書き方。


find_package(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces( ${PROJECT_NAME}
  "srv/MyAddTwoInts.srv"
)

独自のsrvを定義したからpackages.xmlを変更しよう !!

変更しないでcolcon buildすると「packages.xmlにこの記述が足りてないよ」と教えてくれます。


<buildtool_depend>rosidl_default_generators</buildtool_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>

colcon build


$ cd ../.. (cd ~/ros2_study/service_cpp_ws)
$ colcon build --packages-select add_msg

my_add_two_ints.hppが生成されていることを確認します。


$ ls install/service_sv_cl_interfaces/include/service_sv_cl_interfaces/service_sv_cl_interfaces/srv

広告

IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』
さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト


ROS2 1 (Install ROS2)
ROS2 2 (Workspace, Package)
ROS2 3 (Topics (C++))
ROS2 4 (Creating custom srv file)
ROS2 5 (Services (C++))


«       »