工作流
创建包
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中定义的进入点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2022-09-05 python 求方程数值解
2022-09-05 python画隐函数