创建工作空间 [待校准@9276]
Goal目标: Create创建工作区并学习如何为开发版本和测试设置覆盖。 [待校准@9277]
教程级别: 初学者 [Alyssa@7088]
Time时间: 20 20分钟 [待校准@7181]
内容
背景
工作区是包含ROS 2包的目录。在使用ROS 2之前,有必要在您计划使用的终端中源文件ROS 2安装工作区。这使得ROS 2的包可供您在该终端中使用。 [待校准@9278]
您还可以选择采购一个 “覆盖” -- 一个辅助工作区,您可以在其中添加新包,而不会干扰您正在扩展的现有ROS 2工作区或 “参考”。您的衬底必须包含叠加层中所有包的依赖项。覆盖中的包将覆盖衬底中的包。也有可能有几层衬垫和覆盖层,每个连续的覆盖层使用其父衬垫包。 [待校准@9279]
任务
1源ROS 2环境 [待校准@9287]
您的主ROS 2安装将是本教程的参考底图。(请记住,衬底不一定必须是主要的ROS 2安装。) [待校准@9288]
根据您安装ROS 2的方式 (从源文件或二进制文件) 以及您所在的平台,您的确切源文件命令将有所不同: [待校准@9289]
source /opt/ros/foxy/setup.bash
. ~/ros2_install/ros2-osx/setup.bash
请记住使用 x64 Native Tools Command Prompt for VS 2019
执行以下命令,因为我们将构建工作区。 [待校准@9290]
call C:\dev\ros2\local_setup.bat
如果这些命令对你不起作用,请咨询你遵循的 installation guide 。 [待校准@9291]
2创建新目录 [待校准@9292]
最佳实践是为每个新工作区创建一个新目录。名称并不重要,但让它指明工作区的用途是有帮助的。让我们为 “开发版本工作区” 选择目录名称 dev_ws
: [待校准@9293]
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
md \dev_ws\src
cd \dev_ws\src
另一个最佳实践是将工作区中的任何包放入 src
目录中。上述代码创建一个 src
目录内 dev_ws
然后导航到它。 [待校准@9294]
3克隆样本存储库 [待校准@9295]
在克隆之前,请确保您仍在 dev_ws/src
目录中。 [待校准@9296]
在其余的初级开发人员教程中,您将创建自己的包,但现在您将练习使用现有包将工作区放在一起。 [待校准@9297]
您将使用的现有包来自 ros_tutorials
仓库 (repo)。如果你浏览了 "Beginner: CLI Tools" 教程,你会熟悉 turtlesim
,这个回购中的一个包。 [待校准@9298]
你可以看到回购 on GitHub 。 [待校准@9299]
请注意目录列表左侧的 “分支” 下拉列表。克隆此存储库时,请添加 -b
参数,后跟与ROS 2发行版相对应的分支。 [待校准@9300]
在 dev_ws/src
目录中,为您正在使用的发行版运行以下命令: [待校准@9301]
git clone https://github.com/ros/ros_tutorials.git -b foxy-devel
现在在您的工作区中克隆了 ros_tutorials
。 ros_tutorials
仓库包含 turtlesim
包,我们将在本教程的其余部分使用。这个仓库里的其他包没有被建造,因为它们包含一个 COLCON_IGNORE
文件。 [待校准@9302]
现在,您已经使用示例包填充了工作区,但它还不是一个功能齐全的工作区。您需要先解析依赖项并构建工作区。 [待校准@9303]
4解决依赖关系 [待校准@9304]
在构建工作区之前,您需要解决包依赖关系。您可能已经拥有了所有依赖项,但最佳实践是在每次克隆时检查依赖项。您不希望构建在长时间等待后因缺少依赖项而失败。 [待校准@9305]
在工作区 ( dev_ws
) 的根目录下,运行以下命令: [待校准@9306]
# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro foxy -y
rosdep只在Linux上运行,所以你可以跳到 "5 Build the workspace with colcon" 部分。 [待校准@9307]
rosdep只在Linux上运行,所以你可以跳到 "5 Build the workspace with colcon" 部分。 [待校准@9307]
如果您从源文件或 "fat" archive在Linux上安装了ROS 2,则需要使用其安装说明中的rosdep命令。这是 from-source rosdep section 和 "fat" archive rosdep section 。 [待校准@9308]
如果您已经拥有所有依赖项,则控制台将返回: [待校准@9309]
#All required rosdeps installed successfully
包在package.xml文件中声明其依赖关系 (您将在下一个教程中了解有关包的更多信息)。此命令遍历这些声明并安装丢失的声明。您可以在另一个教程 (即将推出) 中了解更多关于 rosdep
的信息。 [待校准@9310]
5使用colcon构建工作区 [待校准@9311]
从工作区 ( dev_ws
) 的根目录,您现在可以使用以下命令构建包: [待校准@9312]
colcon build
colcon build
colcon build --merge-install
Windows不允许长路径,因此 merge-install
会将所有路径合并到 install
目录中。
控制台将返回以下消息: [待校准@9313]
Starting >>> turtlesim
Finished <<< turtlesim [5.49s]
Summary: 1 package finished [5.58s]
注解
[需手动修复的语法] colcon build
的其他有用论据: [待校准@9314]
[需手动修复的语法]``--packages-up-to`` builds你想要的包,加上它所有的依赖,但不是整个工作空间 (节省时间) [待校准@9315]
[需手动修复的语法]``--symlink-install`` saves你不必重建每次调整python脚本 [待校准@9316]
--event-handlers console_direct+
shows console output while building (can otherwise be found in thelog
directory) [待校准@9317]
构建完成后,在工作区根目录 (“~/dev_ws”) 中输入 ls
,您将看到colcon创建了新目录: [待校准@9318]
build install log src
[需手动修复的语法] install
目录是工作区的设置文件所在的位置,您可以使用它来源文件覆盖图。 [待校准@9319]
6来源覆盖 [待校准@9320]
在采购覆盖层之前,打开一个新的终端非常重要,该终端与构建工作区的终端分开。在您构建的同一个终端中采购一个覆盖图,或者在源文件中构建一个覆盖图,可能会产生复杂的问题。 [待校准@9321]
在新终端中,将您的主ROS 2环境作为 “衬底” 源文件,这样您就可以在其 “顶部” 构建覆盖: [待校准@9322]
source /opt/ros/foxy/setup.bash
. ~/ros2_install/ros2-osx/setup.bash
在这种情况下,您可以使用普通的命令提示符,因为我们不会在此终端中构建任何工作区。 [待校准@9323]
call C:\dev\ros2\local_setup.bat
进入工作区的根目录: [待校准@9324]
cd ~/dev_ws
cd ~/dev_ws
cd \dev_ws
在根目录中,源文件覆盖: [待校准@9325]
. install/local_setup.bash
. install/local_setup.bash
call install/setup.bat
注解
采购覆盖层的 local_setup
只会将覆盖层中可用的包添加到您的环境中。 setup
源文件的覆盖图及其创建的衬底,允许您利用两个工作区。 [待校准@9326]
所以,采购主要ROS安装的 setup
然后 dev_ws
覆盖的 local_setup
,像你刚才相同只是采购 dev_ws
的 setup
,因为这包括它被创造出来的底层环境。 [待校准@9327]
现在,您可以从叠加层运行 turtlesim
包: [待校准@9328]
ros2 run turtlesim turtlesim_node
但是你怎么知道这是正在运行的覆盖turtlesim,而不是你的主安装的turtlesim? [待校准@9329]
让我们在叠加层中修改turtlesim,以便您可以看到效果: [待校准@9330]
您可以单独修改和重建覆盖层中的包。 [待校准@9331]
覆盖层优先于衬底。 [待校准@9332]
7修改覆盖 [待校准@9333]
您可以通过编辑turtlesim窗口上的标题栏来修改叠加层中的 turtlesim
。为此,请在 “~/dev_ws/src/ros_tutorials/turtlesim/src” 中找到 turtle_frame.cpp
文件。使用您喜欢的文本编辑器打开 turtle_frame.cpp
。 [待校准@9334]
在第52行,您将看到函数 “setwindowtitle ( "TurtleSim" ); ``. Change the value `` ” TurtleSim “ `` to `` ” MyTurtleSim “”,并保存文件。 [待校准@9335]
回到你之前运行 colcon build
的第一个终端,然后再次运行它。 [待校准@9336]
返回到第二个终端 (其中覆盖是源文件d),然后再次运行turtlesim: [待校准@9337]
ros2 run turtlesim turtlesim_node
你会在turtlesim窗口上看到标题栏,上面写着 “MyTurtleSim”。 [待校准@9338]
即使您的主ROS 2环境早些时候在此终端中是源文件,您的 dev_ws
环境的覆盖优先于衬底的内容。 [待校准@9339]
要确保您的衬底仍然完好无损,请打开一个全新的终端,只为您的ROS 2安装提供源文件。再次运行turtlesim: [待校准@9340]
ros2 run turtlesim turtlesim_node
您可以看到覆盖层中的修改实际上并没有影响衬底中的任何内容。 [待校准@9341]
总结
在本教程中,您将主ROS 2发行版安装源文件作为参考底图,并通过在新工作区中克隆和构建包来创建覆盖图。覆盖物被放在路径的前面,并且优先于衬底,就像你用你的改良turtlesim看到的那样。 [待校准@9342]
建议在处理少量包时使用覆盖,因此您不必将所有内容放在同一个工作区中,也不必在每次迭代时重建一个巨大的工作区。 [待校准@9343]
下一步
既然你已经了解了创建、构建和采购自己的工作区背后的细节,你就可以学习如何 create your own packages 了。 [待校准@9344]