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.背景
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://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, 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
两个指令含义
这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.
#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈
以上是关于ROS2学习笔记24--用colcon对包进行编译的主要内容,如果未能解决你的问题,请参考以下文章
ROS2 colcon 构建未在 Windows 中显示任何错误消息