[ros2学习]-Client Libraries - 创建第一个自己的ROS 2 包

① 背景

Ⅰ什么手机ROS 2 包

可以将包视为ROS 2代码的容器。如果您希望能够安装代码或与他人共享代码,则需要将其组织在一个软件包中。使用软件包,您可以发布ROS 2的工作,并允许其他人轻松构建和使用它。

ROS 2中的软件包创建使用ament作为其构建系统,并使用colcon作为其构建工具。您可以使用官方支持的CMakePython创建软件包,尽管确实存在其他构建类型

Ⅱ ROS 2 包有什么组成

cmake 包

  • package.xml 文件包含这个包里的元信息
  • CMakeLists.txt 怎么去编译这个包
    最简单的长这个样子
my_package/
     CMakeLists.txt
     package.xml

python 包

  • package.xml 文件包含这个包里的元信息
  • setup.py 如何按爪个软件包
  • setup.cfg 保证ros2 可以找到这个包
  • your_package_name - ROS 工具能找到这个包

大概这个样子

my_package/
      setup.py
      package.xml
      resource/my_package

Ⅲ ROS 2 包和工作空间的关系

一个工作空间可以包含n个包,但是不推荐放很多个,不然每次rebuild 的时候,就是该出去遛弯的时候了
大概长这个样子

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

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

② 前提

准备号工作空间dev_ws

③ 任务

==下面每个都会有C++ 和 python 两种方式 ==

Ⅰ 创建包

确保到dev_ws/src路径下

一般我们创建包的命令这个样子就行:

  • C++ ros2 pkg create --build-type ament_cmake <package_name>
  • python ros2 pkg create --build-type ament_python <package_name>

我们现在加选项 --node-name 可以创建hello world 的包

  • C++ ros2 pkg create --build-type ament_cmake --node-name my_node_cpp my_package_cpp
  • python ros2 pkg create --build-type ament_python --node-name my_node_py my_package_py

在这里插入图片描述

Ⅱ 编译包

命令是 colcon build 也可以 选择只编译某一个包 colcon build --packages-select my_package_cpp
在这里插入图片描述
这里可能会报邮箱格式不正确的错误,把邮箱在xml里改一下,还是不行,就删除build/文件夹重新来

Ⅲ 安装设置文件(setup.bash)

cd ~/dev_ws
. install/setup.bash

Ⅳ 运行包

因为用的–node_name 创建的,会有hello world出来

  • C++ ros2 run my_package_cpp my_node_cpp
  • python ros2 run my_package_py my_node_py
    在这里插入图片描述

Ⅴ 看看包里面都有啥子

  • C++
    在这里插入图片描述

  • python
    在这里插入图片描述

Ⅵ 修改 package.xml

description, license ,maintainer需要去改
在这里插入图片描述
这个样子
在这里插入图片描述

python要改的话,setup.py要一致和package.xml
在这里插入图片描述

④ 总结

通过pkg来创建包,通过 colcon 来编译,成功之后可以执行

命令的说明

usage: ros2 pkg create [-h] [--package-format {2,3}]
                       [--description DESCRIPTION] [--license LICENSE]
                       [--destination-directory DESTINATION_DIRECTORY]
                       [--build-type {cmake,ament_cmake,ament_python}]
                       [--dependencies DEPENDENCIES [DEPENDENCIES ...]]
                       [--maintainer-email MAINTAINER_EMAIL]
                       [--maintainer-name MAINTAINER_NAME]
                       [--node-name NODE_NAME] [--library-name LIBRARY_NAME]
                       package_name

Create a new ROS2 package

positional arguments:
  package_name          The package name

optional arguments:
  -h, --help            show this help message and exit
  --package-format {2,3}, --package_format {2,3}
                        The package.xml format.
  --description DESCRIPTION
                        The description given in the package.xml
  --license LICENSE     The license attached to this package
  --destination-directory DESTINATION_DIRECTORY
                        Directory where to create the package directory
  --build-type {cmake,ament_cmake,ament_python}
                        The build type to process the package with
  --dependencies DEPENDENCIES [DEPENDENCIES ...]
                        list of dependencies
  --maintainer-email MAINTAINER_EMAIL
                        email address of the maintainer of this package
  --maintainer-name MAINTAINER_NAME
                        name of the maintainer of this package
  --node-name NODE_NAME
                        name of the empty executable
  --library-name LIBRARY_NAME
                        name of the empty library

发布了94 篇原创文章 · 获赞 547 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_36628778/article/details/105303308