概要:这篇内容主要介绍用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.背景
colcon 是ros 编译工具catkin_make ,catkin_make_isolated ,catkin_tools 和ament_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:
现在,工作空间应该有一些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, install 和log 目录:
.
├── build
├── install
├── log
└── src
4 directories, 0 files
3.5运行测试案例
为了运行测试方才我们创建的包.运行下面指令:
linux:
colcon test
3.6source环境变量
当colcon 已成功编译,这些输出会放在install 目录.在你可以使用任何安装可执行文件或者库之前,colcon 会在install 目录生成bash/bat 文件,目地是帮助配置环境.这些文件将所有必需的元素添加到你的路径和库路径,以及提供包导出的任何bash 或shell 命令。
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_cmake 和ament_python ,也支持纯cmake 包.
ament_python 编译的一个例子是ament_index_python (https://github.com/ament/ament_index/tree/foxy/ament_index_python )包,文件setup.py 是编译的入口点.
一个包,如demo_nodes_cpp (https://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 两个指令含义
这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.
##################### 不积硅步,无以至千里 好记性不如烂笔头 感觉有点收获的话,麻烦大大们点赞收藏哈
|