目标:创建一个工作区并了解如何设置用于开发和测试。
教程级别:初学者
时间: 20分钟
内容
背景
先决条件
任务
1 源码ROS 2 环境
2 创建一个新目录
3 克隆一个样本仓库
4 解决依赖
5 使用 colcon 构建工作区
6 源覆盖
7 修改覆盖
概括
下一步
工作区是包含 ROS 2 包的目录。在使用 ROS 2 之前,有必要在您计划使用的终端中获取 ROS 2 安装工作区的源代码。这使得 ROS 2 的包可供您在该终端中使用。
您还可以选择建立一个“覆盖层”——一个辅助工作区,您可以在其中添加新包而不会干扰您正在扩展的现有 ROS 2 工作区,或“底层”。您的底层必须包含覆盖层中所有包的依赖项。overlay 中的包将覆盖 underlay 中的包。也可以有多层底层和覆盖层,每个连续的覆盖层都使用其父底层的包。
ROS 2 安装
colcon安装
git安装
turtlesim安装
安装rosdep
了解基本终端命令(这里是 Linux 指南)
您选择的文本编辑器
您的主要 ROS 2 安装将成为本教程的基础。
根据您安装 ROS 2 的方式(从源代码或二进制文件)以及您所在的平台,您的确切源命令会有所不同:
source /opt/ros/dashing/setup.bash
如果这些命令对您不起作用,请查阅您遵循的安装指南。
最佳做法是为每个新工作区创建一个新目录。名称并不重要,但它有助于指示工作区的用途。dev_ws
让我们为“开发工作区”选择目录名称:
mkdir -p ~/dev_ws/src cd ~/dev_ws/src
另一个最佳实践是将工作区中的所有包放入src
目录中。上面的代码src
在内部创建一个目录dev_ws
,然后导航到其中。
dev_ws/src
在克隆之前确保您仍在目录中。
在初学者开发人员教程的其余部分,您将创建自己的包,但现在您将练习使用现有包将工作区放在一起。
您将使用的现有包来自ros_tutorials
存储库 (repo)。如果您阅读了“初学者:CLI 工具”教程,您将熟悉turtlesim
此存储库中的其中一个软件包。
你可以在 GitHub 上看到 repo 。
注意目录列表左侧的“Branch”下拉列表。当您克隆此 repo 时,添加-b
参数,后跟与您的 ROS 2 发行版对应的分支。
在dev_ws/src
目录中,针对您正在使用的发行版运行以下命令:
git clone https://github.com/ros/ros_tutorials.git -b dashing-devel
现在ros_tutorials
已克隆到您的工作区中。如果您查看 now 的内容dev_ws/src
,您将看到新ros_tutorials
目录。
要查看里面的包ros_tutorials
,输入命令:
ls ros_tutorials
这将列出您刚刚克隆的 repo 的内容,如下所示:
roscpp_tutorials rospy_tutorials ros_tutorials turtlesim
前三个包被忽略;turtlesim
是这个 repo 中唯一实际的 ROS 2 包。
现在您已经使用示例包填充了您的工作区,但它还不是一个功能齐全的工作区。您需要先解决依赖关系并构建工作区。
在构建工作区之前,您需要解决包依赖关系。您可能已经拥有所有依赖项,但最佳做法是在每次克隆时检查依赖项。您不希望构建由于缺少依赖项而在长时间等待后失败。
从工作区的根目录~/dev_ws
运行以下命令:
rosdep install -i --from-path src --rosdistro dashing -y
如果您从源代码或“fat”存档在 Linux 上安装了 ROS 2,则需要使用其安装说明中的 rosdep 命令。这是源代码 rosdep 部分和“胖”存档 rosdep 部分。
如果您已经拥有所有依赖项,控制台将返回:
All required rosdeps installed successfully
包在 package.xml 文件中声明它们的依赖关系(您将在下一个教程中了解有关包的更多信息)。此命令遍历这些声明并安装缺少的声明。rosdep
您可以在另一个教程(即将推出)中了解更多信息。
从工作区的根目录 ( dev_ws
),您现在可以使用以下命令构建您的包:
colcon build
控制台将返回以下消息:
Starting >>> turtlesim Finished <<< turtlesim [5.49s] Summary: 1 package finished [5.58s]
笔记
其他有用的参数:colcon build
--packages-up-to
构建你想要的包,加上它的所有依赖项,但不是整个工作区(节省时间)
--symlink-install
使您不必每次调整 python 脚本时都必须重建
--event-handlers console_direct+
在构建时显示控制台输出(否则可以在目录中找到log
)
构建完成后,进入ls
工作区根目录(~/dev_ws
),您将看到 colcon 已创建新目录:
build install log src
该install
目录是您工作区的设置文件所在的位置,您可以使用这些文件来获取您的叠加层。
在采购叠加层之前,打开一个新终端非常重要,与您构建工作区的终端分开。在您构建的同一终端中获取覆盖层,或者同样在覆盖层来源处构建,可能会产生复杂的问题。
在新终端中,将你的主要 ROS 2 环境作为“底层”,这样你就可以在它“之上”构建覆盖层:
source /opt/ros/dashing/setup.bash
进入工作区的根目录:
cd ~/dev_ws
在根目录中,获取您的叠加层:
. install/local_setup.bash
笔记
选择local_setup
覆盖层只会将覆盖层中可用的包添加到您的环境中。setup
源覆盖层以及创建它的底层,允许您利用这两个工作区。
因此,选择您的主要 ROS 2 安装setup
,然后dev_ws
采购覆盖层,就像您刚才所做的那样,与选择的local_setup
相同,因为它包括创建它的底层环境。dev_ws
/setup
turtlesim
现在您可以从叠加层运行包:
ros2 run turtlesim turtlesim_node
但是你怎么知道这是 overlay turtlesim 正在运行,而不是你的系统版本安装的 turtlesim?
让我们在叠加层中修改 turtlesim,以便您可以看到效果:
您可以独立于底层修改和重建覆盖层中的包。
叠加层优先于底层。
您可以turtlesim
通过编辑 turtlesim 窗口上的标题栏来修改叠加层。为此,请在~/dev_ws/src/ros_tutorials/turtlesim/src/turtle_frame.cpp
使用您喜欢的文本编辑器打开。
在第 52 行,您将看到该函数setWindowTitle("TurtleSim");
。将值更改”TurtleSim”
为”MyTurtleSim”
,并保存文件。
返回到您之前运行的第一个终端并再次运行它。colcon build
返回第二个终端(叠加层的来源)并再次运行 turtlesim:
ros2 run turtlesim turtlesim_node
您会看到 turtlesim 窗口的标题栏现在显示为“MyTurtleSim”。
即使你的主要 ROS 2 环境早先是在这个终端中获取的,你的dev_ws
环境的覆盖层也优先于底层的内容。
要查看您的底层仍然完好无损,请打开一个全新的终端并仅获取您的 ROS 2 安装源。再次运行 turtlesim:
您可以看到叠加层中的修改实际上并未影响底层中的任何内容。
在本教程中,您将主要的 ROS 2 发行版安装作为底层,并通过在新工作区中克隆和构建包来创建覆盖层。正如您在修改后的 turtlesim 中看到的那样,覆盖层被添加到路径之前,并优先于底层。
建议在处理少量包时使用覆盖,这样您就不必将所有内容都放在同一个工作区中,也不必在每次迭代时都重建一个巨大的工作区。
现在您了解了创建、构建和采购您自己的工作区背后的详细信息,您可以学习如何创建您自己的包。