1. 概要
前ページで作成した、インタフェースを使用する、サービスとクライアントのプログラムを作成します。
2. パッケージ作成
パッケージを作成します。
cd ~/hogehoge_ws/src
ros2 pkg create --build-type ament_cmake my_service --dependencies rclcpp my_interfaces
3. ソース作成
ソースを作成します。
クライアント側のソース。
vi ~/hogehoge_ws/src/my_service/src/my_client.cpp
内容は、伏せておきます。
サーバ側のソース。
vi ~/hogehoge_ws/src/my_service/src/my_server.cpp
内容は、伏せておきます。
vi ~/hogehoge_ws/src/my_service/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(my_service)
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(my_interfaces REQUIRED)
add_executable(server src/my_server.cpp)
ament_target_dependencies(server rclcpp my_interfaces)
add_executable(client src/my_client.cpp)
ament_target_dependencies(client rclcpp my_interfaces)
install(TARGETS
server
client
DESTINATION lib/${PROJECT_NAME})
ament_package()
vi ~/hogehoge_ws/src/my_service/package.xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>my_service</name>
<version>0.0.0</version>
<description>My C++ client server</description>
<maintainer email="hogehoge@todo.todo">hogehoge</maintainer>
<license>Apache License 2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>my_interfaces</depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
4. ビルド
cd ~/hogehoge_ws
colcon build --packages-select my_service
5. 実行
source install/setup.bash
ros2 run my_service server
ros2 run my_service client
うまいこと、動作しました。
6. Windows
例によって、同じことを「Windows」でやってみます。
「x64 Native Tools Command Prompt for VS 2019」を管理者権限で開いて。
call C:\ros2_jazzy\local_setup.bat
mkdir C:\hogehoge_ws\src
cd C:\hogehoge_ws\src
サービスの登録。
ros2 pkg create --build-type ament_cmake my_interfaces
cd C:\hogehoge_ws\src\my_interfaces
mkdir srv
ソースを書いて。
ビルド。
cd C:\hogehoge_ws
colcon build --packages-select my_interfaces
反映します。
call install\setup.bat
確認。
ros2 interface show my_interfaces/srv/MyInstruction
プログラムの方。
cd C:\hogehoge_ws\src
ros2 pkg create --build-type ament_cmake my_service --dependencies rclcpp my_interfaces
ソースを書いて。
ここで、ちょっと失敗。
ソースに日本語のコードが入っていたのですが、コンパイルエラーになっちゃいました。
「UTF-8」だとエラーになるようなので、「Shift-JIS」にしました。
ビルド。
cd C:\hogehoge_ws
colcon build --packages-select my_service
実行。
call install\setup.bat
ros2 run my_service server
ros2 run my_service client