工作流
包创建
ros2 pkg create image_server --build-type ament_python --dependencies cv_bridge rclpy sensor_msgs std_msgs
- 使用 ros2 pkg create 创建的 ROS 2 包默认位于你执行该命令时所在的当前工作目录下。
定义消息类型
定义服务接口
配置包
package.xml
:
- 作用: 提供 ROS 2 包的元信息,例如包名、版本、描述、作者、依赖项等,这些信息主要用于 ROS 2 的构建系统和工具。
- 内容: 使用 XML 格式描述包的元信息,包括:
<name>
: 包名<version>
: 版本号<description>
: 包的描述<maintainer>
: 维护者信息<license>
: 许可证<buildtool_depend>
: 构建工具依赖项 (例如ament_cmake
,ament_python
)<depend>
: 运行时依赖项 (其他 ROS 2 包)<exec_depend>
: 可执行文件依赖项<test_depend>
: 测试依赖项
- 示例:
<?xml version="1.0"?>
<package format="3">
<name>my_package</name>
<version>0.0.0</version>
<description>My awesome ROS 2 package</description>
<maintainer email="[email protected]">user</maintainer>
<license>Apache License 2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclpy</depend>
<depend>std_msgs</depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build build_type="ament_cmake"/>
</export>
</package>
setup.py
:
- 作用: 用于 Python 包的安装和配置,它告诉 Python 如何构建和安装你的包,以及包的入口点 (entry points) 等信息。
- 内容: 使用 Python 代码定义包的配置信息,包括:
name
: 包名version
: 版本号packages
: 包含 Python 代码的文件夹列表data_files
: 需要安装的其他数据文件install_requires
: Python 包依赖项entry_points
: 定义可执行文件的入口点,例如 ROS 2 节点的启动命令
- 示例:
from setuptools import setup
package_name = 'my_package'
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,
maintainer='user',
maintainer_email='[email protected]',
description='My awesome ROS 2 package',
license='Apache License 2.0',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'my_node = my_package.my_node:main'
],
},
)
总结:
package.xml
主要用于描述 ROS 2 包的元信息,供 ROS 2 构建系统和工具使用。setup.py
主要用于 Python 包的安装和配置,告诉 Python 如何构建和安装你的包。
关系:
- 在 ROS 2 Python 包中,
setup.py
通常会读取package.xml
中的信息,例如包名、版本号、依赖项等,并将其用于配置 Python 包的安装。
使用场景:
- 当你创建一个新的 ROS 2 包时,你需要同时创建
package.xml
和setup.py
(如果你的包包含 Python 代码)。 - 当你修改 ROS 2 包的元信息时,你需要更新
package.xml
文件。 - 当你修改 ROS 2 Python 包的代码或依赖项时,你需要更新
setup.py
文件。