posts - 229,comments - 0,views - 11万

工作流

创建包

ros2 pkg create image_server --build-type ament_python --dependencies cv_bridge rclpy sensor_msgs std_msgs
  1. 使用 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>: 是你在终端中执行的命令,例如 publishersubscriber
    • <module>: 是包含入口点函数的 Python 模块,例如 image_server.serverimage_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.xmlsetup.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中定义的进入点。
posted on   FrostyForest  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2022-09-05 python 求方程数值解
2022-09-05 python画隐函数
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示