colcon是ROS构建工具catkin_make、catkin_make_isolated、catkin_tools和ament_tools的迭代。有关colcon设计的更多信息,请参见本文档。
sudo apt install python3-colcon-common-extensions
ROS工作区是具有特定结构的目录。通常有一个src子目录。ROS包的源代码将位于该子目录中。通常,目录以空开头。
colcon执行源代码构建。默认情况下,它将创建以下目录作为src目录的对等项:
首先我们可以创建一个(ros2_ws)目录保存我们的工作空间
mkdir -p ./ros_ws/src
在空间中展现对应文件夹
.
└── src1 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创建一个包,这是官方支持的,尽管也存在其他构建类型。
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.txtpackage.xml
一个工作区可以包含任意多个包,每个包都在自己的文件夹中。您还可以在一个工作区中拥有不同构建类型的包(CMake、Python等)。不能有嵌套包。
最佳实践是在您的工作区中有一个src文件夹,并在其中创建包。这样可以保持工作区的顶层“干净”。
一个普通的工作区可能如下所示:
workspace_folder/src/package_1/CMakeLists.txtpackage.xmlpackage_2/setup.pypackage.xmlresource/package_2...package_n/CMakeLists.txtpackage.xml
让我们使用您在上一教程中创建的工作区ros2_ws来创建新包。
在运行包创建命令之前,请确保您位于src文件夹中。
cd ~/ros2_ws/src
在ROS 2中创建新程序包的命令语法为:
ros2 pkg create --build-type ament_cmake
对于本教程,您将使用可选参数--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: [' ']
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
您可能已经注意到,在创建包后的返回消息中,字段description和license包含TODO注释。这是因为软件包描述和许可声明不是自动设置的,而是在您想要发布软件包时必需的。可能还需要填写维护者字段。
从ros2_ws/src/my_package,使用您喜欢的文本编辑器打开package.xml:
my_package 0.0.0 TODO: Package description user TODO: License declaration ament_cmake ament_lint_auto ament_lint_common ament_cmake
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:
Beginner client libraries tutorials practice package
然后更新许可证行。您可以在这里关于开源许可证的信息。由于此软件包仅用于练习,因此使用任何许可证都是安全的。我们使用Apache许可证2.0:
Apache License 2.0