? ??ROS工作空间是具有特定结构的目录。通常有一个src
子目录。该子目录内是 ROS 包的源代码所在的位置。通常该目录一开始是空的。其工作区在src同级目录下。
colcon 不进行源代码构建。默认情况下,它将创建以下目录作为该src
目录的同级目录:
该build
目录将是存储中间文件的位置。对于每个包,将创建一个子文件夹,例如在其中调用 CMake。
该install
目录是每个包将安装到的位置。默认情况下,每个包将安装到单独的子目录中。
该log
目录包含有关每个 colcon 调用的各种日志记录信息。
在工作区的根目录中,运行.?由于诸如 之类的构建类型不支持空间的概念并且需要安装包,所以 colcon 支持选项。这允许通过更改空间中的文件(例如Python文件或其他未编译的资源)来更改已安装的文件,以实现更快的迭代.
colcon build --symlink-install
?构建完成后,我们应该看到build
、install
和log
目录
包可以被视为 ROS 2 代码的容器。如果您希望能够安装代码或与其他人共享代码,那么您需要将其组织在包中。通过包,您可以发布您的 ROS 2 作品并允许其他人轻松构建和使用它。
ROS 2 中的包创建使用 ament 作为其构建系统,并使用 colcon 作为其构建工具。您可以使用官方支持的 CMake 或 Python 创建包,但也存在其他构建类型。
ROS 2 CMake 有自己的最低要求内容:
package.xml
包含有关包的元信息的文件
CMakeLists.txt
描述如何在包中构建代码的文件
最简单的包可能具有如下所示的文件结构:
my_package/
CMakeLists.txt
package.xml
一个工作区可以包含任意数量的包,每个包都在自己的文件夹中。您还可以在一个工作区中包含不同构建类型的包(CMake等)。您不能有嵌套的包。
最佳实践是在工作区中拥有一个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
在运行包创建命令之前,请确保您位于该文件夹中。
cd ~/ros2_ws/src
在 ROS 2 中创建新包的命令语法是:
ros2 pkg create --build-type ament_cmake <package_name>
在本教程中,您将使用可选参数--node-name
在包中创建一个简单的 Hello World 类型可执行文件。
在终端中输入以下命令:
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/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
您可以看到新包自动生成的文件。
将包放入工作区尤其有价值,因为您可以通过在工作区根目录中运行来一次构建许多包。否则,您将必须单独构建每个包。
返回工作区的根目录:
cd ~/ros2_ws
现在您可以构建您的包:
colcon build
当工作区中只有几个包时,这很好,但当有很多包时,可能需要很长时间。
要my_package
下次仅构建包,您可以运行:
colcon build --packages-select my_package
要使用新的软件包和可执行文件,请首先打开一个新终端并获取主 ROS 2 安装。
然后,从ros2_ws
目录内部运行以下命令来获取工作空间:
. install/local_setup.bash
现在您的工作区已添加到您的路径中,您将能够使用新包的可执行文件。
要运行您在包创建期间使用参数创建的可执行文件--node-name
,请输入以下命令:
ros2 run my_package my_node
这将向您的终端返回一条消息:
hello world my_package package