Help us understand the problem. What is going on with this article?

amentからcolconに移行したときに依存関係で悩んだ話

More than 1 year has passed since last update.

せしまるです。

ros2 ardentからbouncyもしくはcrystalにバージョンアップした際に、ビルドシステムが変わりましたよね。

そう、amentからcolconに。
他の使ってる方は関係ないかも…。

私の環境では、amentで全ビルドできていたものをそのまんまcolconで全ビルドしようとしてコケました。

依存関係

問題としてはこれです。
自前のパッケージを他のパッケージで使用する場合に発生します。
amentの時はrclcppとかのros2のパッケージをpackage.xmlとかに書いておけば通ったのですが、colconでは自前のものもしっかりと書いておかないとダメ見たいです。

以下簡単に
使われる側

package.xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>marumaru</name>
  <version>0.1.0</version>
  <description>seshimaru package for ROS2</description>
  <maintainer email="xxxxxxx@xxxx.com">seshi maru</maintainer>
  <license>Apache License 2.0</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <build_depend>rclcpp</build_depend>

  <exec_depend>rclcpp</exec_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

使う側

package.xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>hogehoge</name>
  <version>0.1.0</version>
  <description>seshimaru package for ROS2</description>
  <maintainer email="xxxxxxx@xxxx.com">seshi maru</maintainer>
  <license>Apache License 2.0</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <build_depend>rclcpp</build_depend>
  <build_depend>marumaru</build_depend>

  <exec_depend>rclcpp</exec_depend>
  <exec_depend>marumaru</exec_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

これがないとcolcon buildをかけたときに、marumaruがないよ!と言われてしまいます。
以下のコマンド実行してlocal_setup.bashを読み直せば通るけど多分間違った方法。

console
// パッケージを指定してビルドするオプション.
$ colcon build --packages-select marumaru
$ source install/local_setup.bash

ちなみにpackage.xmlの記述についてはこんな感じ
書いてないタグも載せておきます。

記述 説明
build_depend ビルドするときに必要なパッケージ
build_export_depend ライブラリをビルドするときに必要なパッケージ
exec_depend 生成した実行ファイルを実行するときに必要なパッケージ。これがないと実行時に落ちたりする
test_depend テストを実行するときに必要なパッケージ
depend 上記のtestを除いた3種類を合わせたもの。別々で書くなら纏めたほうが簡潔になる
build_type パッケージを処理するときに何を使って処理するかを指定する

一番下のbuild_typeは人それぞれですかね。
ament使う場合やcatkin使う場合もありますし。

seshimaru
面白いことしたいひと
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした