鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    在ros2中构建功能包时,什么时候构建ament python类型什么时候构建ament cmake类型

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    功能包类型 应用场景
    4
    4
    466
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • D
      DDDDDDDDkiss
      最后由 编辑

      背景(可选):

      想要弄清楚什么时候构建ament python类型功能包什么时候构建ament cmake类型功能包

      问题描述:

      在ros2中构建功能包时,什么时候构建ament python类型什么时候构建ament cmake类型

      具体细节和上下文:

      在第六章中的fishbot_description功能包和第七章中的fishbot_navigation2功能包中的launch目录下的文件都是用python语言编写的,为什么构建类型都是ament_cmake? 是否可以换成python类型?

      尝试过的解决方法:

      之前认为如果用python语言就用ament python类型,如果是c++语言就用ament cmake类型

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在ROS 2中,构建功能包时选择ament_python类型还是ament_cmake类型,主要取决于功能包中代码的主要编写语言以及依赖关系。下面是对这两种构建类型的详细解释以及何时选择它们的建议:

        ament_python 类型

        适用场景:

        • 当功能包中的代码主要用Python编写时,应选择ament_python类型。
        • 这种类型适用于那些主要依赖Python库和工具的功能包,以及不需要复杂编译步骤的Python脚本。

        特点:

        • 使用setup.py和setup.cfg文件来定义如何安装和构建Python包。
        • 允许在ROS 2环境中轻松地使用Python编写的节点、服务和客户端等。

        ament_cmake 类型

        适用场景:

        • 当功能包中的代码主要用C++编写时,应选择ament_cmake类型。
        • 即便功能包中包含一些Python脚本,但如果主要代码是C++,且这些C++代码需要编译,那么也应选择ament_cmake。

        特点:

        • 使用CMakeLists.txt文件来描述如何编译C++代码和构建ROS 2包。
        • 支持复杂的编译选项和依赖关系管理,特别适合于需要编译的C++项目。

        关于fishbot_description和fishbot_navigation2功能包

        对于您提到的fishbot_description和fishbot_navigation2功能包中的launch目录下的文件都是用Python语言编写的,但构建类型都是ament_cmake的情况,这里有几个可能的原因:

        1. 依赖关系:这些功能包可能依赖于其他用C++编写的ROS 2包,或者它们自身包含需要编译的C++代码(尽管您可能没有看到这些代码)。ament_cmake类型允许这些功能包同时包含Python和C++代码,并通过统一的构建系统来管理。

        2. 统一构建系统:使用ament_cmake作为构建类型可以确保整个ROS 2工作区中的包都使用相同的构建系统(ament),这有助于简化构建和依赖管理过程。

        3. 灵活性:即使launch目录下的文件是用Python编写的,这些文件通常只是用于启动ROS 2节点的脚本,而不是功能包的主要代码。选择ament_cmake并不妨碍在功能包中包含Python脚本,并且允许在需要时添加C++代码。

        是否可以换成python类型?

        理论上可以,但前提是功能包中不包含需要编译的C++代码,并且所有依赖项都兼容ament_python构建类型。然而,在实际应用中,如果功能包原本设计为使用ament_cmake,并且已经与其他C++包有紧密的依赖关系,那么更改构建类型可能会引入额外的复杂性和潜在的问题。

        综上所述,选择ament_python还是ament_cmake作为构建类型,应根据功能包的具体需求和依赖关系来决定。在大多数情况下,如果功能包包含C++代码或需要与其他C++包交互,则使用ament_cmake是更合适的选择。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @DDDDDDDDkiss
          最后由 编辑

          @DDDDDDDDkiss launch是独立的,看看前面的基础课

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          9 1 条回复 最后回复 回复 引用 0
          • 9
            976354826 @小鱼
            最后由 编辑

            @小鱼 收到,感谢大佬,要不断回顾前面的课程😊

            1 条回复 最后回复 回复 引用 0
            • 第一个帖子
              最后一个帖子
            皖ICP备16016415号-7
            Powered by NodeBB | 鱼香ROS