工作流
创建包
ros2 pkg create image_server --build-type ament_python --dependencies cv_bridge rclpy sensor_msgs std_msgs
- 使用 ros2 pkg create 创建的 ROS 2 包默认位于你执行该命令时所在的当前工作目录下。
定义消息类型
定义服务接口
配置包
关键要设置配置中的setup.py中的:
entry_points:
- 这是一个 Python 字典,用于定义包的可执行文件入口点。
- 它通常用于定义 ROS 2 节点的启动命令,以便你可以使用
ros2 run命令直接启动节点。
'console_scripts':
- 这是
entry_points字典的一个键,表示要定义的是控制台脚本入口点。 - 控制台脚本入口点是指可以在终端中直接执行的脚本,例如 ROS 2 节点。
['publisher = image_server.server:main', 'subscriber = image_server.client:main']:
- 这是一个字符串列表,每个字符串定义一个控制台脚本入口点。
- 每个字符串的格式为
<command> = <module>:<function>,其中:<command>: 是你在终端中执行的命令,例如publisher或subscriber。<module>: 是包含入口点函数的 Python 模块,例如image_server.server或image_server.client。<function>: 是入口点函数的名称,通常是main。
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="user@example.com">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='user@example.com',
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文件。
编译包
colcon build --packages-select image_server
运行包
ros2 run <package_name> <executable_name>
<package_name>: 你想要启动的节点所属的 ROS 2 功能包的名称。<executable_name>: 你想要启动的可执行文件的名称,setup中定义的进入点。
浙公网安备 33010602011771号