开发 ROS 2 包
本教程将教您如何创建第一个 ROS 2 应用程序。 它适用于想要学习如何在 ROS 2 中创建自定义包的开发人员,不适用于想要使用 ROS 2 及其现有包的人员。
先决条件
通过获取 ROS 2 安装来设置工作区。
创建包
所有 ROS 2 包都以运行以下命令开始
ros2 pkg create --license Apache-2.0 <pkg-name> --dependencies [deps]
在您的工作区中(通常是“~/ros2_ws/src”)。
要为特定客户端库创建包:
ros2 pkg create --build-type ament_cmake --license Apache-2.0 <pkg-name> --dependencies [deps]
ros2 pkg create --build-type ament_python --license Apache-2.0 <pkg-name> --dependencies [deps]
然后,您可以使用软件包信息(例如依赖项、描述和作者身份)更新 package.xml
。
C++ 软件包
您将主要使用 add_executable()
CMake 宏以及
ament_target_dependencies(<executable-name> [dependencies])
创建可执行节点和链接依赖项。
要安装启动文件和节点,可以使用位于文件末尾但在“ament_package()”宏之前的“install()”宏。
启动文件和节点的示例:
# Install launch files
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
# Install nodes
install(
TARGETS [node-names]
DESTINATION lib/${PROJECT_NAME}
)
Python 包
ROS 2 遵循使用“setuptools”的 Python 标准模块分发流程。 对于 Python 包,“setup.py”文件补充了 C++ 包的“CMakeLists.txt”。 有关分发的更多详细信息,请参阅“官方文档 <https://docs.python.org/3/distributing/index.html#distributing-index>”。
在您的 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(os.path.join('launch', '*launch.[pxy][yma]*'))),
],
# 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 包
使用 C++ 和 Python 代码编写包时,不使用“setup.py”文件和“setup.cfg”文件。 而是使用 :doc:“ament_cmake_python <./Ament-CMake-Python-Documentation>”。