2-建立工作空间

本文介绍了如何在ROS2环境中设置工作区,包括sourceROS2安装、创建新目录、克隆示例包、解决依赖关系、使用colcon构建工作区以及创建和管理覆盖层。覆盖层允许在不干扰底层环境的前提下添加新包。
摘要由CSDN通过智能技术生成

背景

    工作区是包含ROS 2包的目录。在使用ROS 2之前,有必要在您使用的终端中source您的ROS 2安装工作区。这使得您可以在该终端中使用ROS 2的包。

    你也可以选择source“覆盖层”(overlay),覆盖层运行你在在不干扰现有ROS 2工作区的情况下添加新包。您的下一层目录(underlay)必须包含覆盖层中所有包的依赖项。覆盖层中的包将覆盖底层中的包。当然,也存在几层底层和覆盖层的情况,每个后继的覆盖层使用其父底层的包。

任务

1 source ros2的工作环境

source /opt/ros/humble/setup.bash

2 创建一个新的文件夹目录

    实际工作中应当每个新工作区创建一个新目录,将工作空间中的所有包放入src目录,文件夹命名尽量见名知意。本节新建一个ros2_ws文件夹:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

3 clone一个demo仓库代码到src目录下

    在进行clone之前,确保您仍然在ros2_ws/src目录中。

    在“ros2_ws/src”目录下,执行如下命令:

git clone https://github.com/ros/ros_tutorials.git -b humble

    现在,在您的工作空间中克隆了ros_tutorials。ros_tutorials存储库包含turtlesim包,我们将在本节的其它部分中使用。目前没有构建此存储库中的其他包,因为它们包含COLCON_IGNORE文件。

    到目前为止,您已经用一个示例包填充了您的工作空间,但它还不是一个功能齐全的工作空间。您需要首先解决依赖关系,然后构建工作区。

4 解决依赖

    在构建工作区之前,您需要解析包依赖关系。您可能已经拥有了所有依赖项,但最佳实践是在每次克隆时检查依赖项。您不希望在长时间等待后才发现缺少依赖项的构建失败。

    在工作区(ros2_ws)的根目录下,运行以下命令:

# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro humble -y

    如果你已经有了所有的依赖项,控制台将返回:

#All required rosdeps installed successfully

    包在package.xml文件中声明它们的依赖关系(后续会介绍)。该命令遍历这些声明并安装缺少的声明。

5 使用colcon编译工作空间

    从你的工作空间(ros2_ws)的根目录,你现在可以使用下面的命令来构建你的包:

colcon build

    控制台将返回以下消息:

Starting >>> turtlesim
Finished <<< turtlesim [5.49s]

Summary: 1 package finished [5.58s]

    colcon构建的其他有用参数:

      --package -up-to构建你想要的包,加上它的所有依赖项,但不是整个工作区(节省时间)

      --symlink-install使您不必在每次调整python脚本时重新构建

      --event-handlers console_direct+在构建时显示控制台输出(可以在日志目录中找到)

    构建完成后,在工作区根目录(~/ros2_ws)中输入以下命令:

ls

    你会看到colcon已经创建了新的目录:

build  install  log  src

    install目录是您的工作空间的安装文件所在的位置,您可以使用它来source setup文件。

6 source 覆盖层

    在获取覆盖之前,打开一个新的终端,将其与构建工作区的终端分开,在新的终端中,将你的主要ROS 2环境作为“底层”,这样你就可以在它上面构建覆盖层:

source /opt/ros/humble/setup.bash

    进入到你的工作空间根目录下:

cd ~/ros2_ws

   在根目录中,source你的覆盖层:

source install/local_setup.bash

    或者你也可以直接使用如下命令(省略source /opt/ros/humble/setup.bash 这一步骤):

source install/setup.bash

    现在你可以从当前overlay中运行turtlesim包:

ros2 run turtlesim turtlesim_node

    但是你怎么知道这是覆盖层(overlay)的turtlesim在运行,而不是你ros2j基础安装的turtlesim呢?

    在覆盖层中修改turtlesim的名字,这样你就可以看到效果:

    可以在覆盖层中单独修改和重建包。覆盖层优先于底层。

7 修改覆盖层

    您可以通过编辑turtlesim窗口上的标题栏来修改叠加中的turtlesim。在~/ros2_ws/src/ros_tutorials/turtlesim/src中找到turtle_frame.cpp文件。用文本编辑器打开turtle_frame.cpp。

    在第52行,您将看到函数setWindowTitle("TurtleSim");将值“TurtleSim”改为“MyTurtleSim”,保存文件。

    返回到前面运行colcon build的第一个终端并再次编译。

    返回到第二个终端(已经source覆盖层)并再次运行turtlesim:

ros2 run turtlesim turtlesim_node

    你会看到turtlesim窗口的标题栏现在显示为“MyTurtleSim”。

    尽管我们现在的主要ROS 2环境是在前面的终端中source获取的,但是ros2_ws环境的覆盖层优先于底层的内容。

    要查看底层是否可用,可打开一个新的终端,并只source ROS 2的setup文件。再运行turtlesim:

source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_node

    你可以看到,在覆盖层的修改实际上并没有影响到底层的任何东西。

总结

    在本教程中,您将主要的ROS 2发行版安装作为底层,并通过在新工作区中克隆和构建包来创建一个覆盖层。覆盖层被预先添加到路径上,并且优先于底层,正如您在修改后的turtlesim中看到的那样。

    对于处理少量的包,建议使用覆盖层,这样您就不必将所有内容放在相同的工作空间中,并在每次迭代中重新编译一个巨大的工作空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值