せしまるです。
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使う場合もありますし。