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,具体选择取决于你的项目语言和需求。

相关推荐
Freak嵌入式1 分钟前
MicroPython LVGL基础知识和概念:时序与动态效果
开发语言·python·github·php·gui·lvgl·micropython
戮戮31 分钟前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway
2501_9333295531 分钟前
企业媒体发布与舆情管理实战:Infoseek舆情系统技术架构与落地解析
大数据·开发语言·人工智能·数据库开发
"菠萝"33 分钟前
C#知识学习-021(文字关键字)
开发语言·学习·c#
minji...34 分钟前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
zhangzeyuaaa35 分钟前
Python 中的 Map 和 Reduce 详解
开发语言·python
虚伪的空想家42 分钟前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
游乐码43 分钟前
c#HashTable
开发语言·c#
alengan44 分钟前
cocos自动编译-Android自动出apk包
java·eclipse
漫霂1 小时前
二叉树的统一迭代遍历
java·算法