开发ROS 2包 [待校准@6065]
本教程将教您如何创建第一个ROS 2应用程序。它适用于希望学习如何在ROS 2中创建自定义包的开发人员,而不是希望将ROS 2与其现有包一起使用的人员。 [待校准@6066]
先决条件
通过采购ROS 2安装来设置工作区。 [待校准@6069]
创建包 [待校准@6070]
所有ROS 2包从运行命令开始 [待校准@6071]
ros2 pkg create <pkg-name> --dependencies [deps]
在您的工作区中 (通常为 “~/ros2_ws/src”)。 [待校准@6072]
为特定客户端库创建包: [待校准@6073]
ros2 pkg create <pkg-name> --dependencies [deps] --build-type ament_cmake
ros2 pkg create <pkg-name> --dependencies [deps] --build-type ament_python
然后,您可以使用包信息 (如依赖项、描述和作者身份) 更新 package.xml
。 [待校准@6076]
Cpackages包 [待校准@6077]
您将主要使用 add_executable()
CMake宏以及 [待校准@6078]
ament_target_dependencies(<executable-name> [dependencies])
创建可执行节点和链接依赖项。 [待校准@6079]
要安装您的launch文件和节点,您可以使用位于文件末尾但位于 ament_package()
宏前的 install()
宏来安装。 [待校准@6080]
[需手动修复的语法]launch文件和节点示例: [待校准@6081]
# Install launch files
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
# Install nodes
install(
TARGETS [node-names]
DESTINATION lib/${PROJECT_NAME}
)
Python功能包 [小鱼@6082]
ROS 2遵循Python使用 setuptools
的标准模块分发流程。对于Python包, setup.py
文件补充了C++ 包的 CMakeLists.txt
。更多关于分布的细节可以在 official documentation 中找到。 [待校准@6083]
在你的ROS 2包中,你应该有一个 setup.cfg
文件,它看起来像: [待校准@6084]
[develop]
script-dir=$base/lib/<package-name>
[install]
install-scripts=$base/lib/<package-name>
一个 setup.py
文件,看起来像: [待校准@6085]
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'
],
},
)