はじめに
今回は Creating a workspace をトレースする.大まかな流れは colcon のチュートリアルとだいたい同じだけど,今回は依存関係の解消とか細かい操作も行う.
ワークスペースを作る
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 のチュートリアルと同じであまり目新しいことはほぼなかったが,反復は大事.
コメント