当前位置: 首页 > news >正文

ROS2 pkg 创建功能包

ROS2 pkg 创建功能包

指令:

ros2 pkg create <package-name>  --build-type  {cmake,ament_cmake,ament_python}  --dependencies <依赖名字>

在 ROS 2 中,ros2 pkg create 命令用于创建一个新的 ROS 2 包。其中的 --build-type 参数指定了包的构建系统类型。cmakeament_cmakeament_python 是三种不同的构建类型,它们分别用于不同的开发场景和语言支持。

1. ament_cmake

  • 描述

    • ament_cmake 是 ROS 2 中用于构建 C++ 代码的默认构建系统。

    • 它基于 CMake,结合了 Ament 的工具链,用于管理依赖关系、构建目标(如可执行文件和库)以及安装目标。

    • 这是 ROS 2 推荐的构建系统,适用于大多数需要编译的项目(如 C++ 项目)。

  • 适用场景

    • 当你开发的 ROS 2 包包含 C++ 代码时,应该使用 ament_cmake

    • 它支持复杂的构建逻辑,例如编译多个可执行文件、库,以及处理头文件和资源文件。

  • 示例

  • ros2 pkg create my_cpp_package --build-type ament_cmake --dependencies rclcpp std_msgs

2. ament_python

  • 描述

    • ament_python 是用于构建 Python 代码的构建系统。

    • 它基于 Python 的 setup.py 文件,结合了 Ament 的工具链,用于管理 Python 包的安装和依赖关系。

    • 这种构建类型不需要 CMake,而是直接使用 Python 的 setuptools 来处理包的构建和安装。

  • 适用场景

    • 当你的 ROS 2 包主要包含 Python 代码时,应该使用 ament_python

    • 它适用于纯 Python 项目,简化了构建过程,避免了 CMake 的复杂性。

  • 示例

  • ros2 pkg create my_python_package --build-type ament_python --dependencies rclpy std_msgs

3. cmake

  • 描述

    • cmake 是一个通用的构建系统,用于构建 C++ 项目。

    • 它是 ROS 2 中较早的构建系统,但在 ROS 2 中已经逐渐被 ament_cmake 替代。

    • 使用 cmake 构建的包不会直接利用 Ament 的工具链,因此在依赖管理和包安装方面可能不如 ament_cmake 方便。

  • 适用场景

    • 如果你需要构建一个不依赖于 Ament 的纯 C++ 项目,或者需要与现有的 CMake 项目集成,可以使用 cmake

    • 但在大多数情况下,推荐使用 ament_cmake,因为它提供了更好的 ROS 2 生态系统支持。

  • 示例

  • ros2 pkg create my_cmake_package --build-type cmake --dependencies rclcpp std_msgs

总结

  • ament_cmake:适用于 C++ 项目,是 ROS 2 推荐的构建系统,支持复杂的构建逻辑和依赖管理。

  • ament_python:适用于 Python 项目,简化了构建过程,使用 Python 的 setuptools

  • cmake:适用于不依赖 Ament 的纯 C++ 项目,但在 ROS 2 中逐渐被 ament_cmake 替代。

在实际开发中,大多数 ROS 2 包推荐使用 ament_cmakeament_python,具体选择取决于你的项目语言和需求。

http://www.xdnf.cn/news/556903.html

相关文章:

  • [ 计算机网络 ] 深入理解OSI七层模型
  • 经验过程简介与suprema的集中(Guntuboyina理论统计学笔记)
  • QT高DPI支持
  • linux之 pcie MSI-X中断编程
  • 自动化测试核心知识梳理与 Java 代码详解
  • 基于正点原子阿波罗F429开发板的LWIP应用(3)——Netbiosns功能
  • 嵌入式培训之系统编程(一)标准IO、文件操作
  • Liquid Wire 柔性应变传感器:金属凝胶导体 | 仿生肌肉长度监测 | 高精度动作控制
  • 特定领域 RAG中细调嵌入模型能否提升效果?
  • IVX:重构 AI 原生开发范式,让模型调用成为指尖艺术​
  • PostgreSQL简单使用
  • 深入浅出人工智能:机器学习、深度学习、强化学习原理详解与对比!
  • 【深度学习-Day 14】从零搭建你的第一个神经网络:多层感知器(MLP)详解
  • 第六天的尝试
  • 服务器部署1Panel
  • 證券行業證券交易系統開發方案
  • 基于SpringBoot+Vue的学籍管理系统的设计与实现
  • Kubernetes在线练习平台深度对比:KillerCoda与Play with Kubernetes
  • 【开源工具】文件夹结构映射工具 | PyQt5实现多模式目录复制详解
  • 【鸿蒙开发】Hi3861学习笔记- MQTT通信
  • 统一端点管理(UEM):定义、优势与重要性
  • 从零开始:Python 从0到1轻松入门
  • 易路 AI 招聘:RPA+AI 颠覆传统插件模式,全流程自动化实现效率跃迁
  • 物业收费智能化:如何实现账单零差错自动生成?
  • SpringBean模块(三)具有生命周期管理能力的类(1)AutowireCapableBeanFactory
  • DOS常用命令及dos运行java
  • 协程+Flow:现代异步编程范式,替代RxJava的完整实践指南
  • NVIDIA Earth-2 AI 天气模型 DLI 课程:解锁全球风云的未来之匙
  • 4大AI智能体平台,你更适合哪一个呐?
  • 第六部分:第三节 - 路由与请求处理:解析顾客的点单细节