4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ROS2 packageの作成

Last updated at Posted at 2020-05-02

ROS2でプログラミングするために勉強したメモです.
ここでは,packageの作成方法を書きます.

packageに関する説明

packageは,Pythonとc++(CMake)で必要な構成要素が異なる.

構成に必要な要素

Python

  • package.xml:packageに関するメタ情報を含むファイル.
  • setup.py:packageのインストール方法の説明が含まれている.
  • setup.cfg:packageに実行可能ファイルがある場合に求められる.このファイルのおかげで,ros2 runはpackageを見つけることができる.
  • <package_name>:ROS 2ツールがパッケージを見つけるために使用するファイル

CMake

  • package.xml:packageに関するメタ情報を含むファイル.
  • CMakeLists.txt:package内のコードをビルドする方法が記述されたファイル.

例) workspaceの中のpackageの様子

workspace_folder/
    src/
      package_1/
          CMakeLists.txt
          package.xml

      package_2/
          setup.py
          package.xml
          resource/my_package
      ...
      package_n/
          CMakeLists.txt
          package.xml

packageの作成

[Note]
以降は,Pythonについて記述する.必要に応じてC++(CMake)についても記述する.

packageを作成

<workspace_name>のフォルダの中の,srcフォルダでpackageを作成する.

ros2 pkg create --build-type ament_python <package_name>

nodeを作成する場合は,以下のコマンドを使用する.

ros2 pkg create --build-type ament_python --node-name <node_name> <package_name>

これで,srcフォルダに新しい<package_name>のフォルダが追加されている.

packageをビルド

# workspaceのルートに移動
cd ~/dev_ws
# colconでビルド
colcon build

[Note]
上記のコマンドではすべてのpackageがビルドされてしまうので,長時間かかるデメリットがある.
特定のpackageだけをビルドする方法は以下のコマンドである.

colcon build --packages-select <package_name>

作成したpackageの編集

packageの説明とライセンス宣言は,packageをリリースする場合は必須となる.

package.xmlファイルを編集

package.xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
 <name>my_package</name>
 <version>0.0.0</version>
 <description>TODO: Package description</description>
 <maintainer email="user@todo.todo">user</maintainer>
 <license>TODO: License declaration</license>

 <buildtool_depend>ament_python</buildtool_depend>

 <test_depend>ament_copyright</test_depend>
 <test_depend>ament_flake8</test_depend>
 <test_depend>ament_pep257</test_depend>
 <test_depend>python3-pytest</test_depend>

 <export>
   <build_type>ament_python</build_type>
 </export>
</package>

ここで,

  • my_package<package_name>である.
  • <description>TODO: Package description</description>にpackageの説明を
    記述する.
  • <maintainer email="user@todo.todo">user</maintainer>に名前とe-mailアドレスを記述する.
  • <license>TODO: License declaration</license>にライセンス情報を記述する.
  • setup.pyの中にも同様の記載項目があり,package.xmlと正確に一致させる必要がある.
setup.py
from setuptools import setup

package_name = 'my_py_pkg'

setup(
   name=package_name,
   version='0.0.0',
   packages=[package_name],
   data_files=[
      ('share/ament_index/resource_index/packages',
         ['resource/' + package_name]),
      ('share/' + package_name, ['package.xml']),
   ],
   install_requires=['setuptools'],
   zip_safe=True,
   author='ROS 2 Developer',
   author_email='ros2@ros.com',
   maintainer='TODO',
   maintainer_email='TODO',
   keywords=['foo', 'bar'],
   classifiers=[
        'Intended Audience :: Developers',
        'License :: TODO',
        'Programming Language :: Python',
        'Topic :: Software Development',
   ],
   description='TODO: Package description',
   license='TODO: License declaration',
   tests_require=['pytest'],
   # Like the CMakeLists add_executable macro, you can add your python
   # scripts here.
   entry_points={
      'console_scripts': [
         'my_node = my_py_pkg.my_node:main'
      ],
   },
)

setup.cfgを編集する.

setup.cfg
[develop]
script-dir=$base/lib/<package-name>
[install]
install-scripts=$base/lib/<package-name>

参考サイト

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?