开发ROS 2软件包
本教程将教你如何创建你的第一个ROS 2应用程序。它适用于希望学习如何在ROS 2中创建自定义软件包的开发人员,而不适用于希望使用ROS 2及其现有软件包的用户。
创建软件包
所有 ROS 2 软件包都需要运行以下命令开始
ros2 pkg create <pkg-name> --dependencies [deps]
在您的工作空间中(通常为 ~/ros2_ws/src
)。
要为特定的客户端库创建软件包:
ros2 pkg create <pkg-name> --dependencies [deps] --build-type ament_cmake
ros2 pkg create <pkg-name> --dependencies [deps] --build-type ament_python
然后,您可以使用您的软件包信息(例如依赖项、描述和作者信息)更新``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遵循Python的标准模块分发过程,使用``setuptools``。对于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 setup
package_name = 'my_package'
setup(
name=package_name,
version='0.0.0',
# Packages to export
packages=[package_name],
# 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.py'))),
],
# 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``文件。而是使用 ament_cmake_python。