ROS2 Tutorials – Creating a workspace

はじめに

今回は Creating a workspace をトレースする.大まかな流れは colcon のチュートリアルとだいたい同じだけど,今回は依存関係の解消とか細かい操作も行う.

Creating a workspace — ROS 2 Documentation: Iron documentation

ワークスペースを作る

turtlesim をビルドする

まずはいつもどおりアンダーレイを読み込んでおく.ついでに colcon の補完機能もソースしておく.

$ source ~/ros2_iron/install/setup.sh
$ source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash 

colcon のチュートリアル同様ワークスペースとなるディレクトリを作る.

$ mkdir -p ros-ws/src
$ cd ros-ws/src

チュートリアル用のリポジトリをクローンする.導入した ROS2 のディストリビューションに合わせて iron ブランチを指定.ここまでは colcon のチュートリアルと同じ.

$ git clone https://github.com/ros/ros_tutorials.git -b iron

ここでビルドする前に依存関係を解消するため resdep コマンドを使用する.時間のかかるビルド作業のあとに依存関係のエラーに遭遇しないよう,clone するたびに依存関係を確認することを推奨する.

$ cd ..
$ rosdep install -i --from-path src --rosdistro iron -y
#All required rosdeps installed successfully

colcon でビルドする.

$ colcon build --symlink-install
Starting >>> turtlesim
--- stderr: turtlesim                               
CMake Warning (dev) at /path/to/ros2_iron/install/rosidl_generator_py/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:20 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /path/to/ros2_iron/install/ament_cmake_core/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
  /path/to/ros2_iron/install/rosidl_cmake/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:316 (ament_execute_extensions)
  CMakeLists.txt:25 (rosidl_generate_interfaces)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /path/to/ros2_iron/install/python_cmake_module/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:52 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /path/to/ros2_iron/install/rosidl_generator_py/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:23 (find_package)
  /path/to/ros2_iron/install/ament_cmake_core/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
  /path/to/ros2_iron/install/rosidl_cmake/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:316 (ament_execute_extensions)
  CMakeLists.txt:25 (rosidl_generate_interfaces)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /path/to/ros2_iron/install/python_cmake_module/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:140 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /path/to/ros2_iron/install/rosidl_generator_py/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:23 (find_package)
  /path/to/ros2_iron/install/ament_cmake_core/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
  /path/to/ros2_iron/install/rosidl_cmake/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:316 (ament_execute_extensions)
  CMakeLists.txt:25 (rosidl_generate_interfaces)
This warning is for project developers.  Use -Wno-dev to suppress it.

---
Finished <<< turtlesim [11.5s]

Summary: 1 package finished [11.8s]
  1 package had stderr output: turtlesim

warning メッセージがたくさん出てるが,とりあえずビルドできてるっぽいので良しとする.一応対処方法もあるみたいなので,お好みでどうぞ.

ビルドできたのでオーバーレイをソースする.

$ source install/setup.bash

これで turtlesim が起動できるようになったが,このままではオーバーレイのものが起動しているのか判別がつかない.

$ ros2 run turtlesim turtlesim_node

オーバーレイを変更する

オーバーレイ内のパッケージは,アンダーレイとは別に変更及び再構築ができる.またオーバーレイのパッケージはアンダーレイよりも優先される.

このチュートリアルではオーバーレイの turtlesim のタイトルバーを変更して,オーバーレイから起動できていることを確認する.

$ cp -a src/ros_tutorials/turtlesim/src/turtle_frame.cpp{,.org}
$ vim src/ros_tutorials/turtlesim/src/turtle_frame.cpp
$ diff src/ros_tutorials/turtlesim/src/turtle_frame.cpp{,.org}
52c52
<   setWindowTitle("TurtleSim overlay");
---
>   setWindowTitle("TurtleSim");

この状態で再度ビルドして turtlesim を起動してみる.

$ colcon build --symlink-install
Starting >>> turtlesim
Finished <<< turtlesim [13.8s]                       

Summary: 1 package finished [14.2s]
$ ros2 run turtlesim turtlesim_node

すべての作業を同一のワークスペースで行うより,小分けにすることで,ビルドのたびにワークスペース全体をビルドする必要がなくなる.

公式のチュートリアルではターミナルを新たに起動してアンダーレイの turtlesim を起動し,オーバーレイの影響がないことまで確認しているが,ここでは省略する.

おわりに

やっていることの8割くらいは colcon のチュートリアルと同じであまり目新しいことはほぼなかったが,反復は大事.

コメント

タイトルとURLをコピーしました