ROS2入门教程-Ament编译指南
ROS2入门教程-Ament编译指南
说明:
- 介绍如何快速配置和使用一个ament工作空间。
背景
开发环境
- 确保你已经按照之前从源代码编译文档的要求配置好你的开发环境。
基础知识
一个Ament工作空间,是一个有着特定目录结构的文件夹。
通常会有一个src子文件夹。
在这个子文件夹下是各个软件包的源代码。
通常这个文件夹初始情况下是空的。
Ament脱离源代码进行编译。
默认情况下它会在src文件夹旁创建一个build和一个install文件夹。
build文件夹会用来存放编译过程中产生的中间文件。
对于每个软件包都会创建一个对应的文件夹,然后cmake在对应的文件夹下运行。
install文件夹是软件包的安装位置
注意:和catkin相比这里没有devel文件夹
创建目录结构
- 下面在 ~/ros2_ws 下创建一个基本的工作空间目录结构
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
- 下面就是你所预想的目录结构
.
└── src
1 目录, 0 文件
- 添加一些源代码
- 在开始之前我们需要先配置一些依赖
wget https://raw.githubusercontent.com/ros2/ros2/master/ros2.repos
vcs import ~/ros2_ws/src < ros2.repos
- 下面是在添加源代码之后~/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
开始编译
由于我们把ament源代码放在了工作空间中,我们需要执行ament.py的全路径。
注意:在未来ament将会默认安装在系统中,或者在一个底层的工作空间中。
这样就不需要再执行上面的步骤了。
在安装时每个软件包都支持--symlink-install安装选项。
这样可以通过创建符号链接进行安装。
当源码发生变化时,安装位置的文件也会跟着发生变化。
(例如python或者其他不需要编译的文件)这样可以实现更快的软件迭代开发。
src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install
运行测试程序
- 为了能够运行测试程序,你需要在编译的时候增加--build-tests选项。
- 之后运行下面的指令
src/ament/ament_tools/scripts/ament.py test
- 如果你在之前编译的时候没有添加--build-tests选项
- 在编译测试的时候,你可以直接跳过编译和安装的步骤来加速编译测试程序的过程
src/ament/ament_tools/scripts/ament.py test --skip-build --skip-install
source 你的环境
- 当ament编译完成之后,生成的文件会在install文件夹里面。
- 为了能够使用你编译的文件,你需要把install/bin添加到你的系统路径里面去。
- Ament会在install文件夹中自动生成bash文件,用来帮助你配置环境变量。
- 这些文件会向你的系统路径和库路径添加必要的元素。
. install/local_setup.bash
- 注意:这里和catkin有一些不同 这里的local_setup.文件和setup.文件有一些不同。
- local_setup.*文件只会应用当前工作空间的设置。
- 当你在使用多个工作空间时,你仍然需要source setup.*文件。
- 这样所有父工作空间的设置也能添加进来。
运行一个例子
- 当你source 环境之后你可以执行下面的指令。
- 这是由ament编译生成的。
ros2 run demo_nodes_cpp listener &
ros2 run demo_nodes_cpp talker
- 你会看到数字在不断地增加。
- 下面我们先停止这两个节点,然后来创建我们自己的工作空间
^-C
kill %1
开发你自己的软件包
- Ament 使用和catkin一样的package.xml文件。
- (这个文件在REP 140中定义)
- 你可以直接在src文件夹内创建自己的软件包。
- 但是如果你只是想写几个软件包,推荐你重新创建一个工作空间。
创建一个工作空间
- 首先创建一个新的文件夹 ~/ros2_overlay_ws
mkdir -p ~/ros2_overlay_ws/src
cd ~/ros2_overlay_ws/src
- 然后开始之前我们要先下载ROS2例子。
- 我们会这基础上进行修改。
git clone https://github.com/ros2/examples.git
- 开始编译,我们用debug模式编译,这样就可以获取到debug的相关文件。
cd ~/ros2_overlay_ws
ament build --cmake-args -DCMAKE_BUILD_TYPE=Debug
- 现在我们看看talker程序到底指向那个工作空间的文件。
- 因为系统自身有一个talker程序,之前的工作空间也有一个talker程序,现在的工作空间同样也有一个talker程序。
- 如果你source了~/ros2_overlay_ws/install/local_setup.bash,那么talker程序会指向当前工作空间的文件。
- 如果你打开了一个新的终端程序,然后想要使用刚才创建的工作空间,那么你只需要 source ~/ros2_overlay_ws/setup.bash,这个程序会自动的设置好所有的父工作空间的环境变量。
创建你自己的软件包
- 你可以开始创建自己的软甲包了。
- catkin_create_package的等效软件会被移植到ament里面,但是目前还没有完成。
- Ament支持多种编译方式。
- 推荐的方式是 ament_cmake和ament_python。
- 同样还支持纯粹的cmake软件包 将来还会添加更多的编译方式。
- 一个像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
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号