ROS2学习笔记24--用colcon对包进行编译

Posted 鸿_H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS2学习笔记24--用colcon对包进行编译相关的知识,希望对你有一定的参考价值。

概要:这篇内容主要介绍用colcon对包进行编译

环境:ubuntu20.04,ros2-foxy,vscode

最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现

3.6用colcon对包进行编译(原文:https://docs.ros.org/en/foxy/Tutorials/Colcon-Tutorial.html

>>教程>>colcon对包进行编译

你正阅读的是ros2较老版本(Foxy),但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/Tutorials.html

colcon对包进行编译

目录

1.背景
2.预备知识
2.1安装colcon
2.2安装ros2
3.基础
3.1创建工作空间
3.2添加源码
3.3source环境变量
3.4编译工作空间
3.5运行测试案例
3.6source环境变量
3.7测试demo
4.创建自己的包
5.小技巧

1.背景

colconros编译工具catkin_makecatkin_make_isolatedcatkin_toolsament_tools的迭代品.想了解更多colcon的设计信息,可以看这篇文档(https://design.ros2.org/articles/build_tool.html).

源码可以在colcon github组织(https://github.com/colcon)找到.

2.预备知识

2.1安装colcon

linux:

sudo apt install python3-colcon-common-extensions

2.2安装ros2

为了构建样例,你需要安装ros2.

跟着这个安装教程(https://docs.ros.org/en/foxy/Installation.html)进行安装.

注意:

如果从发行包安装,这个教程需要的是桌面安装版本(https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html#linux-install-debians-install-ros-2-packages).

3.基础

ros工作空间是一种具有独特结构的目录.一般情况下,会有一个叫src子目录.该子目录放着ros包的源码.一般情况下,目录一开始都是空的.

colcon是从源代码开始编译.默认情况下,会创建如下几个跟src同级的目录.

*build目录放的是中间文件.例如调用CMake时,每个包都会生成一个子文件夹.

*install目录是放包的安装文件.默认情况下,每个包会被安装到一个独立的子目录.

*log目录包含每次执行colcon的各种日志信息.

注意:

对比catkin,这里是没有devel目录的.

3.1创建工作空间

首先,创建一个目录(ros2_example_ws)覆盖我们工作空间:

linux:

mkdir -p ~/ros2_example_ws/src
cd ~/ros2_example_ws

此时,工作空间单纯只包含一个空目录src

.
└── src

1 directory, 0 files

3.2添加源码

拉取例子(https://github.com/ros2/examples)仓库到工作空间的src目录下:

git clone https://github.com/ros2/examples src/examples -b foxy

现在,工作空间应该有一些ros2案例源码:

.
└── src
    └── examples
        ├── CONTRIBUTING.md
        ├── LICENSE
        ├── rclcpp
        ├── rclpy
        └── README.md

4 directories, 3 files

3.3source一下ros2环境变量

source一下ros2环境变量非常重要,这会为案例包提供必要的编译依赖.这步操作可以通过source一下二进制包或者源码安装提供的配置脚本来完成,即另外colcon一次工作空间(https://docs.ros.org/en/foxy/Installation.html).我们称这个环境为底层.

我们工作空间,ros2_examples_ws,是覆盖在已安装的ros2上面的.一般情况下,少量包放到一个工作空间是值得推荐的,把所有包都放到一个工作空间是不可取的.

3.4编译工作空间

注意

Windows上面构建包,你需要配置Visual Studio环境,可以看构建ros2代码课程(https://docs.ros.org/en/foxy/Installation/Windows-Development-Setup.html#windows-dev-build-ros2)获取更多细节.

在工作空间的根目录,运行colcon build进行编译.由于编译类型如ament_cmake并不支持devel空间概念和不保证包可被安装的,而colcon支持选项是--symlink-install.这得更改安装文件,通过修改源空间的文件(如Python文件或其他未编译的资源)可以更快实现.

linux:

colcon build --symlink-install

编译完成后,我们应该看到build, installlog目录:

.
├── build
├── install
├── log
└── src

4 directories, 0 files

3.5运行测试案例

为了运行测试方才我们创建的包.运行下面指令:

linux:

colcon test

3.6source环境变量

colcon已成功编译,这些输出会放在install目录.在你可以使用任何安装可执行文件或者库之前,colcon会在install目录生成bash/bat文件,目地是帮助配置环境.这些文件将所有必需的元素添加到你的路径和库路径,以及提供包导出的任何bashshell命令。

linux:

. install/setup.bash

3.7测试demo

source一下环境变量,我们可以运行使用colcon构建的执行文件.让我们运行案例里面的订阅器节点:

ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function

另一个终端,运行发布器节点(别忘了source一下配置脚本):

ros2 run examples_rclcpp_minimal_publisher publisher_member_function

你应该会看见发布器或订阅器消息数目不断增加.

4.创建自己的包

colcon使用了package.xml,其格式在REP 149有定义(https://www.ros.org/reps/rep-0149.html)(这格式(https://www.ros.org/reps/rep-0140.html)也是支持的).

colcon支持多编译类型,推荐的类型有ament_cmakeament_python,也支持纯cmake包.

ament_python编译的一个例子是ament_index_pythonhttps://github.com/ament/ament_index/tree/foxy/ament_index_python)包,文件setup.py是编译的入口点.

一个包,如demo_nodes_cpphttps://github.com/ros2/demos/tree/foxy/demo_nodes_cpp),采用ament_cmake编译类型,也使用CMake作为编译工具.

方便起见,在模板基础上,你可以使用ros2 pkg create工具创建一个新包.

注意:

对于catkin使用者,这(ros2 pkg create)指令等同于catkin_create_package指令.

5.小技巧

如果不想编译特定的包,在该包目录里面创建一个名为COLCON_IGNORE文件,这样子这包就不会被索引到了.

如果你想在CMake包避免配置和构建测试,你可以传入:--cmake-args -DBUILD_TESTING=0

如果你想对包运行一个特定的测试方案:

colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG

其他

个人认为重点:

colcon build --symlink-install,colcon test两个指令含义

这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.

#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈

以上是关于ROS2学习笔记24--用colcon对包进行编译的主要内容,如果未能解决你的问题,请参考以下文章

OpenEuler21.03 ROS2打包指南

ROS2 colcon 构建未在 Windows 中显示任何错误消息

ROS2学习笔记0--ROS2:Foxy学习目录

ROS2学习笔记10--使用ros2 bag进行录制和回放数据

ROS2学习笔记25--ros2话题统计编写教程(C++)

构建一个 docker 镜像 ros2 ,当尝试运行时。在 dockerfile 中安装/setup.bash 无效