【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とする.
$ 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_studies_ws/
└ ros2_test/
├ CMakeLists.txt
├ package.xml
├ include/
│ └ ros2_test/
└ src/
このもととなるのはCMakeの推奨ディレクトリ構造である.An Introduction to Modern CMakeのHow 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/
が二か所あるのが気になる.自分のすっきりする方法としては以下の通り.
- 推奨通りワークスペース直下も
src/
,パッケージの中身もsrc/
とする - ワークスペース直下には
src/
ではなくpackages/
とかpkgs/
とする - ワークスペース直下に直接パッケージを配置する
色々な人との共同作業を考えると推奨通りにしておく方がよいと思うが,個人的には2か3かな.
ここでは3とする.理由は,面倒だから&公式のgithubのプロジェクトをパッと見て推奨通りになってなさそうだったから(2021/7/24).2でもいいかも(2024/07/30)
package.xmlとCMakeLists.txtの観察
以下,自動生成された両ファイルの一部抜粋.
<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タグに記載される.複数指定した場合は複数行にわたり記載される.
まずはメンテナンス者として自分のメアド・名前を書き込んでおく.
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.
$ cd ~/ros2_studies_ws/
$ colcon build
$ . install/local_setup.bash
3行目の. install/local_setup.bashはgalactic以降の推奨.以前はsetup.bashだった.どちらも使えるが,意味はROS2のsetup.とlocal_setup.を参照.
より実用的なビルドコマンド
上記2行目のビルドコマンドであるが,より実用的なものは以下のような引数をとることが多い.
$ colcon build --symlink-install
$ 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)以下のコマンドでテストができる.
$ colcon test
【前:ROS2に関する基本情報:初級 -ROS1 style-】
【前:ROS2に関する基本情報:初級 -class style-】
【次:ROS2最小構成プログラム:初級 -ROS1 style-】
【次:ROS2最小構成プログラム:初級 -class style-】