ROS2学习笔记之创建自己的功能包 您所在的位置:网站首页 rog2介绍 ROS2学习笔记之创建自己的功能包

ROS2学习笔记之创建自己的功能包

2023-09-29 07:30| 来源: 网络整理| 查看: 265

ROS2学习笔记之创建自己的功能包 背景前期准备学习内容1. 创建一个包2. 编译新建的包3 Source工作空间的配置文件4 使用新建的包5. 查看包的内容6. 自定义 package.xml 总结

学习目标: 使用CMake或Python创建一个新的包,然后运行其可执行文件。

背景 什么是ROS2的一个包? 一个包可以认为是一个存放我们ROS2代码的容器。当我们希望使用自己的代码或者将代码和他人进行分享的时候,我们就需要将我们的代码组织为一个功能包。通过这种包的概念可以给我们使用ROS2、将代码与他人分享时带来很多的方便 ROS2的包使用ament作为构建系统,colcon为编译工具。尽管可以通过多种方式创建包,但是官方支持推荐使用CMake或Python的方式创建一个包ROS2包的组成是什么? Python 和 CMake的包都有最小的结构要求.

CMake版本 package.xml 包含包的元信息(meta information)的文件 CMakeLists.txt 描述如何对包进行编译的文件

Python版本 package.xml 包含包的元信息(meta information)的文件 setup.py 如何对包进行安装的说明 setup.cfg 当包有可执行文件时需要,以便ros2 run可以找到它 your_package_name 一个用于Python执行脚本方便ROS2工具运行的文件夹

一个最简单的包的文件结构如下 CMake版本

my_package/ CMakeLists.txt package.xml

Python版本

my_package/ setup.py package.xml resource/my_package 工作空间中的包 一个工作空间可以包含任意多的功能包,每一个包都有自己的文件夹。在一个工作空间内你可以有不同方式编译构建的包 (CMake, Python, etc.)。但是不能有嵌套的包,就是不能包中含有另外一个包。 一个好的习惯是一个工作空间有一个src文件夹用来放置功能包,这样会让整个工作空间看上去比较整洁。一个比较推荐的工作空间结构如下 workspace_folder/ src/ package_1/ CMakeLists.txt package.xml package_2/ setup.py package.xml resource/my_package ... package_n/ CMakeLists.txt package.xml 前期准备

需要我们上一个教程建立的工作空间

学习内容 1. 创建一个包

首先我们需要source我们安装的ROS,之前我们已经把这一步加到了.bashrc中所以这一步跳过 然后我们需要进入到工作空间的src目录下,应为那个地方才是存储包的地方

cd dev_ws/src

创建包的命令如下 CMake版本

ros2 pkg create --build-type ament_cmake

Python版本

ros2 pkg create --build-type ament_python

在本教程中我们还会使用--node-name选项,创建一个简单的Hello World 可执行文件。我们首先以CMake版本为例。为了对CMake和Python都进行测试,我们将Python版本的相关名字加上_py后缀,防止两个版本有冲突 CMake版本

ros2 pkg create --build-type ament_cmake --node-name my_node my_package

执行命令过后我们可以看到src文件夹下面有一个新的文件夹my_package 同时终端输出下面的消息

going to create a new package package name: my_package destination directory: /home/user/dev_ws/src package format: 3 version: 0.0.0 description: TODO: Package description maintainer: [' '] licenses: ['TODO: License declaration'] build type: ament_cmake dependencies: [] node_name: my_node creating folder ./my_package creating ./my_package/package.xml creating source and include folder creating folder ./my_package/src creating folder ./my_package/include/my_package creating ./my_package/CMakeLists.txt creating ./my_package/src/my_node.cpp

打开文件夹我们可以看到自动生成了很多的文件

Python版本

ros2 pkg create --build-type ament_python --node-name my_node_py my_package_py node-name my_node_py my_package_py going to create a new package package name: my_package_py destination directory: /home/user/dev_ws/src package format: 3 version: 0.0.0 description: TODO: Package description maintainer: ['dck '] licenses: ['TODO: License declaration'] build type: ament_python dependencies: [] node_name: my_node_py creating folder ./my_package_py creating ./my_package_py/package.xml creating source folder creating folder ./my_package_py/my_package_py creating ./my_package_py/setup.py creating ./my_package_py/setup.cfg creating folder ./my_package_py/resource creating ./my_package_py/resource/my_package_py creating ./my_package_py/my_package_py/__init__.py creating folder ./my_package_py/test creating ./my_package_py/test/test_copyright.py creating ./my_package_py/test/test_flake8.py creating ./my_package_py/test/test_pep257.py creating ./my_package_py/my_package_py/my_node_py.py 2. 编译新建的包

编译之前切换目录到工作空间的根目录。

cd ~/dev_ws

开始编译

colcon build

在前一个教程当中我们还往这个工作空间里面放入了一个ros_tutorials的包,编译的时候我们可以看到还对turtlesim进行了编译。如果包比较少问题到不是很大,但是如果有很多包的时候就比较花时间了。我们可以用下面的命令只编译my_package这一个包。

colcon build --packages-select my_package 3 Source工作空间的配置文件

为了测试我们刚刚的包,我新打开一个终端,然后source配置文件。

cd dev_ws source install/setup.bash 4 使用新建的包

我们在创建包的时候使用了--node-name指定了节点名字,我们通过下面的,命令运行节点。 CMake版本

ros2 run my_package my_node

运行过后终端显示如下结果

hello world my_package package

Python版本

ros2 run my_package_py my_node_py

运行过后终端显示如下结果

Hi from my_package_py. 5. 查看包的内容

在dev_ws/src/my_package文件夹下面我们可以看到如下的内容

CMakeLists.txt include package.xml src

my_node.cpp在src文件夹下面,通常我们将C++的源文件都放在这个文件夹内

在dev_ws/src/my_package_py文件夹下面我们可以看到如下的内容

my_package_py package.xml resource setup.cfg setup.py test

my_node_py.py在my_package_py文件夹下面,通常我们将Python的执行脚本都饭在这个文件下。

6. 自定义 package.xml

在我们创建包的时候发现在终端输出的消息里面description和license都有一个TODO的标签。这是因为一个包的描述和许可是不会自动生成的,但是如果当我们对外发布一个包的时候这又是必须的。而且maintainer字段我们也必选写上。 虽然对于平时的使用这些不太重要,我们还是简单过一下。 我们打开dev_ws/src/my_package文件夹下的package.xml,Python版本的类似。 首先我们对第6行的关于这个包的描述进行修改,可以用一句简单的话对这个包进行一个概况。

Beginner developer tutorials practice package

接下来第7行是关于维护者联系邮箱的,如果没有自动填充信息我们可以进行相关修改。

user

然后第8行是关于许可证的相关信息,对于练习我们选什么都无所谓,但是如果要对外发布的话这个还是得注意一下,这里我们选择Apache License 2.0

Apache License 2.0

在许可证的标签下面,有很多_depend后缀的标签,这是对这个包对其他包的依赖的描述,colcon会对这些依赖进行搜索。目前我们是一个最简单的例子,在后面的教程当中我们会慢慢使用这些标签。 对于Python版本还有为做完的工作,setup.py文件中同时也包含了刚刚这些需要填写的地方,这些信息需要和package.xml保持一致。我们修改16-19 行的内容和package.xml保持一致。

总结

通过本篇教程我们现在已经学会了创建一个ros2的包,为以后的开发打下基础。 在包的构建和编译ros2和ros1差别还是挺大了。接下来我们就开始编写节点了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有