0
0

ROS2プロジェクトの作成

Last updated at Posted at 2024-07-30

ROS2関係トップページへ
ROS2レクチャー:初級 -ROS1 style-
ROS2レクチャー:初級 -class style-

【前:ROS2に関する基本情報:初級 -ROS1 style-
【前:ROS2に関する基本情報:初級 -class style-
【次:ROS2最小構成プログラム:初級 -ROS1 style-
【次:ROS2最小構成プログラム:初級 -class style-

概要

ROS2プログラミングの第一歩として,プロジェクトの作成,ビルドを行う.

2024/07/30: ros2 pkg createにライセンスのオプション追加(--license Apache-2.0)

ワークスペース・プロジェクトについて

構成についての基本的な考え方

一つのワークスペースにすべてのプロジェクト(パッケージ)を入れるのではなく,作りたいもの=ワークスペース,作りたいものの部品・関係するもの=パッケージと考える.そしワークスペースは作りたいものに応じて複数存在,一つのワークスペースの中には関係するプロジェクト(パッケージ)のみ,という構成をスタンダードとする.

やってみよう

"ROS2勉強用"を目的としたワークスペースを作成する.ディレクトリ名をros2_studies_ws/とし,このワークスペースに他の練習用プロジェクトも全て入れることとする.ワークスペースはmkdirで普通に作成する.また練習用のパッケージ名をros2_testとする.

terminal
$ mkdir -p ~/ros2_studies_ws/
$ cd ~/ros2_studies_ws/
$ ros2 pkg create ros2_test --build-type ament_cmake --dependencies rclcpp --license Apache-2.0

ros2コマンドのまとめ: ROS2コマンド一覧

ソフトウェアライセンスについて

『ソフトウェアライセンス 種類』などでグーグルさんに聞いてみる.

ros2 pkg createが行うこと
ros2 pkg createは必要なディレクトリ・ファイルの雛形を作成するもので,手動で作成したりgithubから持ってきても問題ない.このコマンドによって作成されるものは以下のとおり.ただし,githubから持ってきた場合,package nameなどちゃんと修正しないといけない.
ros2_studies_ws/
└ ros2_test/
  ├ CMakeLists.txt
 ├ package.xml
  ├ include/
  │ └ ros2_test/
  └ src/

このもととなるのはCMakeの推奨ディレクトリ構造である.An Introduction to Modern CMakeHow to structure your projectは一読の価値あり.

includeディレクトリについて

ament_cmake User Documentationによると[パッケージ名]/include/[パッケージ名]/のディレクトリには外部公開する機能に関するヘッダを入れる.共有ライブラリで使用する.外部公開しないものはsrc/以下に入れる.「何を外部に公開し何を公開しないか」を意識しよう.

公式と異なるけど本シリーズでの考え方

公式のチュートリアルでは,ワークスペース(~/dev_ws/)にsrcディレクトリ(~/dev_ws/src)を作成し,その中にパッケージを作成する方法が推奨となっている.今回の場合に当てはめるとディレクトリ構成は以下のようになる.

ros2_studies_ws/
└ src/
   └ ros2_test/
     ├ CMakeLists.txt
     ├ package.xml
     ├ include/
     │ └ ros2_test/
     └ src/

コンパイル後はワークスペース直下には,src/, build/, install/のみとなって余計なものが入らない,というのは分かる.しかしsrc/が二か所あるのが気になる.自分のすっきりする方法としては以下の通り.

  1. 推奨通りワークスペース直下もsrc/,パッケージの中身もsrc/とする
  2. ワークスペース直下にはsrc/ではなくpackages/とかpkgs/とする
  3. ワークスペース直下に直接パッケージを配置する

色々な人との共同作業を考えると推奨通りにしておく方がよいと思うが,個人的には2か3かな.
ここでは3とする.理由は,面倒だから&公式のgithubのプロジェクトをパッと見て推奨通りになってなさそうだったから(2021/7/24).2でもいいかも(2024/07/30)

package.xmlとCMakeLists.txtの観察

以下,自動生成された両ファイルの一部抜粋.

package.xml
<package format="3">
  <name>ros2_test</name>
  <version>0.0.0</version>
  <desciption>TODO: Package description</description>
  <maintainer email="hoge@gmail.com">hoge</maintainer>
  <license>Apache-2.0</license>
  ...
  <depend>rclcpp</depend>

1行目:xmlの書き方のバージョンを指定.
2行目:パッケージ名
3行目:バージョン.編集するたび増やしていく.
4行目:一応自由記載
5行目:メンテナス者.複数指定する場合,<maintainer ...の行をコピペして増やす.
6行目:パッケージのライセンス.--licenseオプションで指定したもの.
8行目:ros2 pkg createの--dependenciesで指定した依存関係のあるパッケージがdependタグに記載される.複数指定した場合は複数行にわたり記載される.

まずはメンテナンス者として自分のメアド・名前を書き込んでおく.

CMakeLists.txt
project(ros2_test)
...
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
...
ament_package()

1行目:CMakeLists.txtの場合,パッケージ名がpackageではなくprojectとして指定されている.cmakeの仕様.
3行目:指定したコンパイラが記載される.
4行目:ros2 pkg createの--dependenciesで指定した依存関係のあるパッケージがdependタグに記載される.複数指定した場合は複数行にわたり記載される.
6行目:CMakeLists.txt内の設定をもとにamentのビルド用設定を行う.CMakeLists.txtの最後に一回だけ呼び出される.

ビルド

プログラムを作成していないけどビルドコマンドを実行してみる.
ビルドはワークスペースのトップディレクトリでcolcon build

terminal
$ cd ~/ros2_studies_ws/
$ colcon build
$ . install/local_setup.bash

3行目の. install/local_setup.bashはgalactic以降の推奨.以前はsetup.bashだった.どちらも使えるが,意味はROS2のsetup.とlocal_setup.を参照.

より実用的なビルドコマンド

上記2行目のビルドコマンドであるが,より実用的なものは以下のような引数をとることが多い.

terminal
$ colcon build --symlink-install
terminal
$ colcon build --symlink-install --packages-up-to ros2_test
  • --symlink-install
    • 可能な限りリンクを使用して2重にファイルをつくらない?
  • --packages-up-to [package1 package2 ...]
    • 指定されたパッケージとそれに依存関係のあるパッケージのみをビルドする.
    • 複数指定する場合にはスペース区切りとする.

詳しくはcolcon buildを参照のこと.

test

ビルドができたら,直後に(install/local_setup.bash前でもok)以下のコマンドでテストができる.

terminal
$ colcon test

【前:ROS2に関する基本情報:初級 -ROS1 style-
【前:ROS2に関する基本情報:初級 -class style-
【次:ROS2最小構成プログラム:初級 -ROS1 style-
【次:ROS2最小構成プログラム:初級 -class style-

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0