Skip to content

开发 ROS2 包

本教程介绍如何创建你的第一个 ROS 2 应用,面向希望在 ROS 2 中开发自定义包的开发者。如果你只是使用现有包,则无需阅读本教程。

所有 ROS 2 包都是通过在工作空间(通常是 ~/ros2_ws/src)中运行以下命令开始的:

Terminal window
$ ros2 pkg create --license Apache-2.0 <pkg-name> --dependencies [deps]

要为特定客户端库创建包:

C++:

Terminal window
$ ros2 pkg create --build-type ament_cmake --license Apache-2.0 <pkg-name> --dependencies [deps]

Python:

Terminal window
$ ros2 pkg create --build-type ament_python --license Apache-2.0 <pkg-name> --dependencies [deps]

接下来可以编辑 package.xml,填写包的依赖项、描述、作者等信息。

主要通过 add_executable() CMake 宏来创建可执行节点,再用

target_link_libraries(<executable-name> PUBLIC [targets from your dependencies])

来链接依赖项。

安装 launch 文件和节点时,可以使用 install() 宏,通常放在文件末尾附近、ament_package() 宏之前。

launch 文件和节点的安装示例:

# Install launch files
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
# Install nodes
install(
TARGETS [node-names]
DESTINATION lib/${PROJECT_NAME}
)

ROS 2 采用 Python 标准的 setuptools 模块来分发包。对于 Python 包,setup.py 文件的作用类似于 C++ 包中的 CMakeLists.txt。有关分发的更多细节,请参阅 官方文档。

ROS 2 包中的 setup.cfg 文件通常如下所示:

[develop]
script_dir=$base/lib/<package-name>
[install]
install_scripts=$base/lib/<package-name>

以及一个如下所示的 setup.py 文件:

import os
from glob import glob
from setuptools import find_packages, setup
package_name = 'my_package'
setup(
name=package_name,
version='0.0.0',
# Packages to export
packages=find_packages(exclude=['test']),
# Files we want to install, specifically launch files
data_files=[
# Install marker file in the package index
('share/ament_index/resource_index/packages', ['resource/' + package_name]),
# Include our package.xml file
(os.path.join('share', package_name), ['package.xml']),
# Include all launch files.
(os.path.join('share', package_name, 'launch'), glob('launch/*')),
],
# This is important as well
install_requires=['setuptools'],
zip_safe=True,
author='ROS 2 Developer',
author_email='ros2@ros.com',
maintainer='ROS 2 Developer',
maintainer_email='ros2@ros.com',
keywords=['foo', 'bar'],
classifiers=[
'Intended Audience :: Developers',
'License :: TODO',
'Programming Language :: Python',
'Topic :: Software Development',
],
description='My awesome package.',
license='TODO',
# Like the CMakeLists add_executable macro, you can add your python
# scripts here.
entry_points={
'console_scripts': [
'my_script = my_package.my_script:main'
],
},
)

如果包中同时包含 C++ 和 Python 代码,则不再使用 setup.py 和 setup.cfg,而是改用 ament_cmake_python。