ros2学习笔记——功能包

功能包是ROS2中组织代码的基本容器,方便我们编译、安装、分发开发的代码,一般来讲,每个功能包都是用来完成某项具体的功能相对完整的单元。   ROS2中的功能包可以使用CMake或者Python两种方式来编译,其本身是一个“文件夹”,但和文件夹不同的是,每个功能包中都会有这些文件:

CMake包:

  • package.xml:功能包的描述信息
  • CMakeLists.txt:描述CMake编译该功能包的规则

 Python包:

  • package.xml:功能包的描述信息
  • setup.py:包含如何安装该包的说明
  • setup.cfg:如果包内有可执行文件,需要设置该文件来让ros2 run命令找到它
  • /<package_name>:包含 __init__.py 的文件夹,和功能包同名

每个工作空间中可以有多个功能包,CMake或者Python包都可以,但是功能包是不能嵌套的。最佳做法是拥有一个 src文件夹,并在其中创建包。典型的一个工作空间内功能包的结构如下:

workspace_folder/
    src/
      package_1/
          CMakeLists.txt
          package.xml

      package_2/
          setup.py
          package.xml
          resource/package_2
      ...
      package_n/
          CMakeLists.txt
          package.xml

功能包创建

  • 创建功能包
    #在创建的项目文件夹的src目录下
    #CMake包
    ros2 pkg create --build-type ament_cmake <package_name>
    #python包
    ros2 pkg create --build-type ament_python <package_name>
    #创建功能包的指令还允许设置节点名,自动生成一个helloworld的例程代码
    #CMake
    ros2 pkg create --build-type ament_cmake --node-name <node_name> <package_name>
    #python包
    ros2 pkg create --build-type ament_python --node-name <node_name> <package_name>
  • 编译功能包
    #编译工作空间中的所有功能包
    colcon build
    #只想编译某一个包的话
    colcon build --packages-select <package_name>

 使用功能包

>设置环境变量(获取安装文件)
    打开一个新的终端,运行下工作空间的环境变量,这样才能让该终端找到新创建的包:
    . install/setup.bash

>运行功能包中的节点

如果想要发布自己的包,则新建功能包中的package.xml文件需要手动完善一下,包括其中的功能包描述、版本信息、使用许可证等,默认都有加“TODO”标志。除了这些基本信息之外,还可以看到不少以“ _depend”结尾的标签,这些就是用来描述功能包依赖的,如果在编写代码过程中新增加了什么依赖,都可以手动添加到这里来。如果使用的是Python包,还需要多修改一个文件setup.py


版权声明:本文为weixin_47705183原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。