Ament 编译 教程

从ROS 2 Bouncy开始colconcolcon教程中描述了推荐的编译工具。

概述

这将为您提供如何使用ament工作区启动和运行的快速摘要。这将是一个实用的教程,并非旨在取代核心文档。

背景

Ament是catkin元编译工具的迭代。有关设计的更多信息,请参阅此文档

源代码可以在GitHub组织中找到

前期准备

开发环境

确保根据源代码编译指令设置开发环境。

基本

ament工作空间是具有特定结构的目录。通常有一个src子目录。在该子目录中是源代码所在的位置。通常,目录开始否则为空。

Ament不受源代码编译的影响。默认情况下,它将创建一个buildinstall目录作为src目录的对等项。该build目录将存储中间文件。对于每个包,将创建一个子文件夹,例如调用CMake。该install目录是每个软件包将安装到的目录。

注意:与catkin相比,没有devel目录。

创建目录结构

要在目录中创建基本结构~/ros2_ws

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

这是~/ros2_ws您可以预期的目录结构:

.
└── src

1 directory, 0 files

添加一些源代码

首先,我们需要在没有安装任何ROS2的情况下设置底层。

wget https://raw.githubusercontent.com/ros2/ros2/master/ros2.repos
vcs import src < ros2.repos

注意:vcs import src < ros2.repos 需要安装vcstool 等包,参考https://github.com/dirk-thomas/vcstool  以及 https://github.com/ros2/ros2/wiki/Linux-Development-Setup ,执行以下指令后可行。

sudo apt update && sudo apt install -y \
  build-essential \
  git \
  python3-colcon-common-extensions \
  python3-pip \
  python-rosdep \
  python3-vcstool \
  wget
# install some pip packages needed for testing
sudo -H python3 -m pip install -U \
  argcomplete \
  flake8 \
  flake8-blind-except \
  flake8-builtins \
  flake8-class-newline \
  flake8-comprehensions \
  flake8-deprecated \
  flake8-docstrings \
  flake8-import-order \
  flake8-quotes \
  pytest-repeat \
  pytest-rerunfailures
# [Ubuntu 16.04] install extra packages not available or recent enough on Xenial
python3 -m pip install -U \
  pytest \
  pytest-cov \
  pytest-runner \
  setuptools
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
  libasio-dev \
  libtinyxml2-dev



sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
sudo apt-get update
sudo apt-get install python3-vcstool

这是~/ros2_ws添加源后可以预期的目录结构(请注意目录/文件的确切结构和数量可能随时间而变化):

.
├── ros2.repos
└── src
    ├── ament
    │   ├── ament_cmake
    │   ├── ament_index
    |   ...
    │   ├── osrf_pycommon
    │   └── uncrustify
    ├── eProsima
    │   ├── Fast-CDR
    │   └── Fast-RTPS
    ├── ros
    │   ├── class_loader
    │   └── console_bridge
    └── ros2
        ├── ament_cmake_ros
        ├── common_interfaces
        ├── demos
        ...
        ├── urdfdom
        ├── urdfdom_headers
        └── vision_opencv

51 directories, 1 file

运行build

由于这是一个引导环境,我们需要通过其完整路径调用ament.py。

注意:将来一旦安装在您的系统或底层工作区中,就不再需要了。

由于没有devel空间,并且需要安装每个包,因此它支持该选项--symlink-install。这允许通过更改source空间中的文件(例如Python文件或其他未编译的资源)来更改已安装的文件,以便更快地进行迭代。

src / ament / ament_tools / scripts / ament.py build --build-tests --symlink-install

运行测试

要运行刚刚编译的测试,请使用--build-tests上面的选项运行以下命令:

src / ament / ament_tools / scripts / ament.py test

如果在包含测试(使用build --build-tests)之前编译(并安装)了工作区,则可以跳过编译和安装步骤以加快进程:

src / ament / ament_tools / scripts / ament.py test --skip-build --skip-install

source环境

当ament成功完成编译后,输出将在install目录中。要使用可执行文件和库,例如将install/bin目录添加到路径中。Ament将在install目录中生成bash文件以帮助设置环境。这些文件将向路径和库路径添加所需的元素,并提供由包导出的任何导出的bash或shell命令。

. install/ local_setup.bash

注意:这与catkin略有不同。该local_setup.*文件与setup.*文件略有不同,因为它只应用当前工作区的设置。使用多个工作空间时,您仍需要source setup.*以获取包括所有父工作空间在内的环境。

试试一个demo

有了源环境,您现在可以运行由ament编译的可执行文件。

ros2 run demo_nodes_cpp listener &
ros2 run demo_nodes_cpp talker

你会看到数字递增输出。

让我们停止节点并尝试创建自己的覆盖工作区。

^-C
kill %1

开发自己的包

Ament使用的package.xml规格REP 140中 为catkin 定义的一样。

您可以在src目录中创建自己的包,但是当您要仅在几个包上进行迭代时,建议使用覆盖空间。

工作空间的覆盖

现在你已经设置了引导程序底层,你也会发现ament已经存在path路径中。

下面让我们创建一个新的覆盖工作空间~/ros2_overlay_ws

mkdir -p ~ / ros2_overlay_ws / src
 cd  ~ / ros2_overlay_ws / src

首先,我们将覆盖ros2 / examples存储库

# If you know that you're using the latest branch of all
# repositories in the underlay, you can also get the latest
# version of the ros2/examples repository, with this command:
#   git clone https://github.com/ros2/examples.git
# Otherwise, clone a copy from the underlay source code:
git clone ~ / ros2_ws / src / ros2 / examples

然后,编译覆盖工作空间,我们使用debug进行编译,这样可以确保获得调试符号:

cd  ~ / ros2_overlay_ws
ament build --cmake-args -DCMAKE_BUILD_TYPE = Debug

现在,此工作空间位于现有工作空间之上,因此您可以发现which talker是当前覆盖空间中的

如果您执行 source  ~/ros2_overlay_ws/install/local_setup.bash,它将更改为引用覆盖空间的中talker

如果您使用新终端返并想要在覆盖空间上进行开发,则可以简单地执行 source  ~/ros2_overlay_ws/install/setup.bash,将自动获取所有父工作空间环境的源。

创建自己的包

您可以创建自己的包。类似于catkin_create_package的命令将被移植到ament中,但还没有提供。

ROS 2 Bouncy 版本提供了 ros2 pkg create 命令

Ament支持多种编译类型。推荐的编译类型是ament_cmakeament_python。还支持纯cmake包。预计会增加对更多编译类型的支持。

ament_python编译的一个示例是ament_tools,其中setup.py是编译的主要入口点。

诸如demo_nodes_cpp使用ament_cmake编译类型的包,并使用CMake作为编译工具。

提示

  • 如果您不想编译特定的包,请在目录中指定一个命名为AMENT_IGNORE的空文件,则不会将其编入索引。

    “Catch all”选项,如--cmake-args应该放在其他选项之后,或者用 '--'分隔:

ament build . --force-cmake-configure --cmake-args -DCMAKE_BUILD_TYPE=Debug -- --ament-cmake-args -DCMAKE_BUILD_TYPE=Release
  • 如果要从某个包中运行单个特定测试:
ament test --only-packages YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG

猜你喜欢

转载自blog.csdn.net/wsc820508/article/details/81290465