ROS工作空间的初始化

ROS工作空间的初始化

colcon是ROS构建工具catkin_make、catkin_make_isolated、catkin_tools和ament_tools的迭代。有关colcon设计的更多信息,请参见本文档。

colcon进行安装

sudo apt install python3-colcon-common-extensions

基础

ROS工作区是具有特定结构的目录。通常有一个src子目录。ROS包的源代码将位于该子目录中。通常,目录以空开头。

colcon执行源代码构建。默认情况下,它将创建以下目录作为src目录的对等项:

  • build目录将是存储中间文件的地方。对于每个软件包,将创建一个子文件夹,例如,在其中调用CMake。
  • install目录是每个软件包的安装目录。默认情况下,每个包将安装到一个单独的子目录中。
  • log目录包含关于每个colcon调用的各种日志记录信息。

创建工作空间

首先我们可以创建一个(ros2_ws)目录保存我们的工作空间

mkdir -p ./ros_ws/src

在空间中展现对应文件夹

.
└── src

1 directory, 0 files

编译对应的工作空间

在工作区的根目录中,运行colcon build。因为ament_cmake这样的构建类型不支持devel空间的概念,并且需要安装包,所以colcon支持选项--symlink-install。这允许通过更改源空间中的文件(例如Python文件或其他未编译的资源)来更改已安装的文件,以实现更快的迭代。

colcon build --symlink-install
.
├── build
│   └── COLCON_IGNORE
├── install
│   ├── COLCON_IGNORE
│   ├── local_setup.bash
│   ├── local_setup.ps1
│   ├── local_setup.sh
│   ├── _local_setup_util_ps1.py
│   ├── _local_setup_util_sh.py
│   ├── local_setup.zsh
│   ├── setup.bash
│   ├── setup.ps1
│   ├── setup.sh
│   └── setup.zsh
├── log
│   ├── build_2023-03-17_16-55-43
│   │   ├── events.log
│   │   └── logger_all.log
│   ├── COLCON_IGNORE
│   ├── latest -> latest_build
│   └── latest_build -> build_2023-03-17_16-55-43
└── src
    └── src

配置对应的环境

当colcon成功完成构建后,输出将位于安装目录中。在使用任何已安装的可执行文件或库之前,需要将它们添加到路径和库路径中。colcon将在安装目录中生成bash/bat文件,以帮助设置环境。这些文件将把所有必需的元素添加到您的路径和库路径中,并提供包导出的任何bash或shell命令。

. install/setup.bash

解决对应的依赖

在构建工作区之前,您需要解析包依赖项。您可能已经拥有所有依赖项,但最佳做法是在每次克隆时检查依赖项。您不希望构建在长时间等待后由于缺少依赖项而失败。
从工作区的根目录(ros2_ws)运行以下命令:

rosdep install -i --from-path src --rosdistro foxy -y

配置环境

当colcon成功完成构建后,输出将位于安装目录中。在使用任何已安装的可执行文件或库之前,需要将它们添加到路径和库路径中。colcon将在安装目录中生成bash/bat文件,以帮助设置环境。这些文件将把所有必需的元素添加到您的路径和库路径中,并提供包导出的任何bash或shell命令。

. install/setup.bash

创建属于自己的功能包

colcon使用REP 149中定义的package.xml规范(也支持格式2)。
colcon支持多种构建类型。建议的构建类型为ament_cmake和ament_python。也支持纯cmake包。
ament_python构建的一个示例是ament_index_python包,其中setup.py是构建的主要入口点。
像demo_nodes_cpp这样的包使用ament_cmake构建类型,并使用CMake作为构建工具。
为了方便起见,您可以使用工具ros2 pkg create基于模板创建新的包。

如果您不想构建特定的软件包,请在目录中放置一个名为COLCON_IGNORE的空文件,它将不会被索引。
如果您想避免在CMake包中配置和构建测试,您可以传递:--cmake-args -数据库构建测试=0。
如果要从程序包运行单个特定测试:

colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG

创建对应的工作包

一个软件包可以被看作是一个容器,为您的ROS 2代码.如果您希望能够安装您的代码或与他人共享它,那么您需要将它组织在一个包中。使用软件包,您可以发布您的ROS 2工作,并允许其他人轻松地构建和使用它。
ROS 2中的包创建使用ament作为其构建系统,colcon作为其构建工具。您可以使用CMake或Python创建一个包,这是官方支持的,尽管也存在其他构建类型。

如何创建一个ROS2的包

ROS 2 Python和CMake包都有自己的最低要求内容:

  • package.xml file containing meta information about the package

  • CMakeLists.txt file that describes how to build the code within the package

最简单的软件包可能具有如下所示的文件结构:

my_package/
     CMakeLists.txt
     package.xml

功能包在工作空间

一个工作区可以包含任意多个包,每个包都在自己的文件夹中。您还可以在一个工作区中拥有不同构建类型的包(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

创建自己的功能包

让我们使用您在上一教程中创建的工作区ros2_ws来创建新包。
在运行包创建命令之前,请确保您位于src文件夹中。

cd ~/ros2_ws/src

在ROS 2中创建新程序包的命令语法为:

ros2 pkg create --build-type ament_cmake <package_name>

对于本教程,您将使用可选参数--node-name,它在包中创建一个简单的Hello World类型的可执行文件。

现在,您将在工作区的src目录中拥有一个名为my_package的新文件夹。
运行命令后,终端将返回消息:

ros2 pkg create --build-type ament_cmake --node-name my_node my_package
going to create a new package
package name: my_package
destination directory: /home/user/ros2_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['<name> <email>']
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

编译功能包

将包放在工作区中特别有价值,因为您可以通过在工作区根目录中运行colconbuild一次构建许多包。否则,您将不得不单独生成每个包。
返回到工作区的根目录:

cd ~/ros2_ws

现在您可以构建您的包:

colcon build

回想一下上一个教程,您的ros2_ws中还有ros_tutorials包,您可能已经注意到运行colconbuild也构建了turtlesim包。当工作区中只有几个包时,这是很好的,但是当有很多包时,colcon build可能会花费很长时间。

要在下次仅构建my_package包,您可以运行:

colcon build --packages-select my_package

 自定义package.xml

您可能已经注意到,在创建包后的返回消息中,字段description和license包含TODO注释。这是因为软件包描述和许可声明不是自动设置的,而是在您想要发布软件包时必需的。可能还需要填写维护者字段。
从ros2_ws/src/my_package,使用您喜欢的文本编辑器打开package.xml:

<?xml version="1.0"?>
<?xml-model
   href="http://download.ros.org/schema/package_format3.xsd"
   schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
 <name>my_package</name>
 <version>0.0.0</version>
 <description>TODO: Package description</description>
 <maintainer email="user@todo.todo">user</maintainer>
 <license>TODO: License declaration</license>

 <buildtool_depend>ament_cmake</buildtool_depend>

 <test_depend>ament_lint_auto</test_depend>
 <test_depend>ament_lint_common</test_depend>

 <export>
   <build_type>ament_cmake</build_type>
 </export>
</package>

Input your name and email on the maintainer line if it hasn’t been automatically populated for you. Then, edit the description line to summarize the package:

<description>Beginner client libraries tutorials practice package</description>

然后更新许可证行。您可以在这里阅读更多关于开源许可证的信息。由于此软件包仅用于练习,因此使用任何许可证都是安全的。我们使用Apache许可证2.0:

<license>Apache License 2.0</license>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值