ROS2 Tutorialsをやってみた ~パッケージ作成~
今回は以下を実施します。
- ROS 2 Tutorials
- Installation from binary and source, all platforms
- Using colcon to build a custom package
- パッケージの作成
前回までのあらすじ
前回はROS 2 のインストールとAbout ROS 2を読みました。
ROS 2 Tutorials
このページを実施します。
Tutorials · ros2/ros2 Wiki · GitHub
Installation from binary and source, all platforms
すでにインストール済みなので省略します。
バイナリではなく、ソースからビルドしています。
Using colcon to build a custom package
- このページはcolconのTutorialであって、詳細なドキュメントではない
- チョット前まではcolconではなくament_toolsを使っていた
- colcon はROSの新しいビルドツール
- colconの設計に関する詳細な記事はここ
- A universal build tool
- colconのソースコードはここ
- colcon · GitHub
Development Environment
- 開発環境を構築するためにROS2をソースからビルドする(実施済み)
Run the tests
- ここはInstallationで実施してなかったのでやってみる
- いくつかのtestが失敗した
パッケージの更新
testに失敗したことが気になるのでパッケージを入れ直します。
下記ページを参考にしました。
※各パッケージごとに更新する方法もありますが、今回は全部入れ直してます。
Maintaining a Source Checkout · ros2/ros2 Wiki · GitHub
# パッケージ全部入れ直すことにします $ rm -rf ~/ros2_ws $ mkdir -p ~/ros2_ws/src $ cd ~/ros2_ws # masterブランチのパッケージをダウンロード $ wget https://raw.githubusercontent.com/ros2/ros2/master/ros2.repos $ vcs import src < ros2.repos # rosdepの更新 $ rosdep update $ rosdep install --from-paths src --ignore-src --rosdistro bouncy -y --skip-keys "console_bridge fastcdr fastrtps libopensplice67 rti-connext-dds-5.3.1 urdfdom_headers" # ビルド&テスト $ colcon build --symlink-install $ colcon test ~~~中略~~~ Summary: 195 packages finished [7min 43s] 3 packages had stderr output: composition osrf_pycommon test_rclcpp 2 packages had test failures: composition test_rclcpp ~~~中略~~~
それでもテストに失敗するのでログを見てみます。
ログファイルは~/ros2_ws/log/
にあります。
各ログファイルの役割についてはcolcon公式ページを参照してください。
# latest_testが最新のtestログファイルへのシンボリックリンクになっています $ cd ros2_ws/log/latest_test $ cat composition/stdout.log ~~~中略~~~ The following tests FAILED: 5 - test_linktime_composition__rmw_fastrtps_cpp (Timeout) 9 - test_api_srv_composition_client_first__rmw_fastrtps_dynamic_cpp (Timeout) 10 - test_dlopen_composition__rmw_fastrtps_dynamic_cpp (Timeout) $ cat test_rclcpp/stdout.log ~~~中略~~~ The following tests FAILED: 15 - test_parameter_server_cpp__rmw_fastrtps_cpp (Timeout)
Fast RTPSが関わるテストでタイムアウトが発生しています。(wait時間の設定ミスとかかな?) 単独テストでもエラーが発生するのか確認してみます。
単独テストの方法は下記ページが参考になります。
$ cd row2_ws $ colcon test --packages-above composition ~~~略(エラー発生しませんでした)~~~ $ colcon test --packages-above test_rclcpp ~~~略(エラー発生しませんでした)~~~
エラーが発生しなかったので次のステップに進みます。
Source the environment
ビルドに成功したのでパスを通します。自分はzshを使ってるのでzsh用のスクリプトを実行します。
$ . install/local_setup.zsh
Try a demo
listenerとtalkerのデモが動きました。
Develop your own package
overlay用のディレクトリを作成し、そこに練習用のリポジトリをコピーします。
$ mkdir -p ~/ros2_overlay_ws/src $cd ~/ros2_overlay_ws/src # ROS2インストール時のパッケージ(undelay)が最新状態であればgithubからダウンロード git clone https://github.com/ros2/examples.git # そうでない場合はunderlayディレクトリからコピー # git clone ~/ros2_ws/src/ros2/examples
ビルドしてパスを通します。
$ cd ~/ros2_overlay_ws $ colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug $ . ~/ros2_overlay_ws/install/local_setup.zsh
ros2_wsディレクトリにもexamplesパッケージがあるためoveralyできてるのかイマイチわかりません。
オリジナルのパッケージを作って確認してみます。(この記事の最後に記載)
Create your own package
ros2 pkg create
を使えば、catkin_create_package
と同じようにパッケージを作れる- colconはいくつかのビルドタイプをサポートしてる
- 推奨は
ament_cmake
とament_python
- ROS1ではCMakeLists.txtにいろいろ書いてたけど
- ament_cmakeでは同じくCMakeListsに、ament_pythonではsetup.pyに色々書く
- 推奨は
パッケージを作ってみる
練習としてpub/subのパッケージを作ってみます。 Exampleパッケージを参考にします。
GitHub - ros2/examples: Example packages for ROS2
作成したパッケージがこちらです。
$ cd ~/ros2_overlay_ws/src $ git clone https://github.com/ShotaAk/first_ros2_pkg $ cd .. $ colcon build $ . ~/ros2_overlay_ws/install/local_setup.zsh $ ros2 run first_python_pkg first_pub_node [INFO] [first_pub_node]: Publishing: "Hello World! ^^: 0" [INFO] [first_pub_node]: Publishing: "Hello World! ^^: 1" ~~~ 以下略~~~ # 別のターミナルで $ . ~/ros2_overlay_ws/install/setup.zsh $ ros2 run first_cpp_pkg first_sub_node [INFO] [first_sub_node]: I heard: 'Hello World! ^^: 5 ^^ [INFO] [first_sub_node]: I heard: 'Hello World! ^^: 6' ^^ ~~~ 以下略~~~
ポイント(自分がつまづいたところ)
install/[package_name]/lib
以下に実行ファイルを生成しないと、ros2 run
できない- 例:
ros2_overlay_ws/install/first_python_pkg/lib/first_python_pkg/
- pythonのパッケージではsetup.cfgで対処している
- cppのパッケージではCMakeLists.txtで対処している
- 例:
次のステップ
次回はROS 2 TutorialsのIntrospection with command-line toolsからやっていきます。