ROS2 学习笔记12:使用 colcon 构建软件包

Background 背景

colcon 是对ROS 构建工具 catkin_makecatkin_make_isolatedcatkin_toolsament_tools 的迭代。有关 colcon 设计的更多信息,请参阅本文档https://design.ros2.org/articles/build_tool.html

colcon 源代码可在GitHub 中找到 https://github.com/colcon

思考及疑问: 组合工作空间,可以同时运行不同发行版本的ROS吗,还是可只能切换?

Prerequisites 前提

1 Install colcon

sudo apt install python3-colcon-common-extensions   

查看 colcon-core版本:colcon version-check查看 colcon-core 是否是最新的

2 Install ROS 2

备注: 可在终端通过 sudo apt install ros-<distro>-<package> 直接安装; 默认路径:opt/ros/<distro>

Basics 基础

ROS 工作区是一个具有特定结构的目录。通常会有一个 src 子目录。在该子目录中,存放着 ROS 软件包的源代码。通常情况下,该目录一开始是空的。

colcon 会进行源代码外编译。默认情况下,它将创建以下目录作为 src 目录的同级目录:

  • build目录将存放中间文件。每个软件包都将创建一个子文件夹,例如 CMake 将在其中调用。

  • install目录是每个软件包的安装目录。默认情况下,每个软件包都将安装到一个单独的子目录中。

  • log目录包含有关每次调用 colcon 的各种日志信息。

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

1 Create a workspace

首先,创建一个包含的工作区目录 (ros2_ws)

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

此时,工作区只包含一个空目录 src

.
└── src   

1 directory, 0 files   

2 Add some sources

让我们将示例库克隆到工作区的 src 目录中:

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

现在,工作区中应该有 ROS 2 示例的源代码:

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

4 directories, 3 files  

3 Source an underlay

重要的是,我们要为现有的 ROS 2 安装提供环境,以便为我们的工作区提供示例软件包所需的构建依赖项。这可以通过二进制安装或源安装(即另一个 colcon 工作区)提供的设置脚本来实现(请参阅 “安装”)。我们称这种环境为 “底层”。

我们的工作区 ros2_ws 将是现有 ROS 2 安装的顶层。一般来说,当你计划迭代少量软件包时,建议使用顶层,而不是把所有软件包都放到同一个工作区。

4 Build the workspace

在工作区的根目录下运行 colcon build。由于 ament_cmake 等联编类型不支持开发空间的概念,需要安装软件包,因此 colcon 支持选项 --symlink-install。这允许通过更改源代码空间中的文件(如 Python 文件或其他非编译资源)来更改已安装的文件,从而加快迭代速度。

colcon build --symlink-install 

编译完成后,我们应该能看到buildinstalllog目录:

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

4 directories, 0 files  

5 Run tests

要运行我们刚刚构建的软件包的测试,请运行以下程序:

colcon test  

6 Source the environment

colcon 成功完成构建后,输出结果将出现在安装目录中。在使用任何已安装的可执行文件或库之前,您需要将它们添加到路径和库路径中。colcon 会在安装目录中生成 bash/bat 文件,以帮助设置环境。这些文件会将所有必要元素添加到路径和库路径中,并提供软件包导出的任何 bashshell 命令。

source install/setup.bash    

7 Try a demo

有了源环境,我们就可以运行由 colcon 构建的可执行文件。让我们运行示例中的一个用户节点:

ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function

在另一个终端,让我们运行一个发布节点(别忘了源设置脚本):

ros2 run examples_rclcpp_minimal_publisher publisher_member_function

您应该会看到来自发布者和订阅者的信息,数字会递增。

Create your own package

colcon 使用 REP 149 中定义的 package.xml 规范(也支持格式 2)。

colcon 支持多种构建类型。推荐的构建类型是 ament_cmakeament_python。此外还支持纯 cmake 软件包。

ament_python 构建的一个例子是 ament_index_python 软件包,其中 setup.py 是构建的主要入口。

demo_nodes_cpp 等软件包使用 ament_cmake 构建类型,并使用CMake 作为构建工具。

为方便起见,你可以使用 ros2 pkg create 工具根据模板创建新软件包。

注:对于catkin 用户,这相当于 catkin_create_package

Setup colcon_cd

使用 colcon_cd 命令可以快速将 shell 的当前工作目录更改为软件包的目录。例如,colcon_cd some_ros_package 可以快速将你带到 ~/ros2_ws/src/some_ros_package 目录。

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/iron/" >> ~/.bashrc

根据您安装 colcon_cd 的方式和工作区的位置,上述说明可能会有所不同,详情请参考文档。要在 LinuxmacOS 中撤销此操作,请找到系统的 shell 启动脚本并删除附加的源代码命令。

Setup colcon tab completion

如果安装了 colcon-argcomplete 软件包,命令 colcon 将支持 bash 和类 bash shell 的命令完成。

echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc

根据您安装 colcon 的方式和工作区的位置,上述说明可能会有所不同,详情请参考文档。要在 LinuxmacOS 中撤销此操作,请找到系统的 shell 启动脚本并删除附加的源代码命令。

Tips

  • 如果不想构建特定软件包,请在目录中放置一个名为 COLCON_IGNORE 的空文件,这样它就不会被索引。

  • 如果不想在 CMake 软件包中配置和编译测试,可以通过 --cmake-args -DBUILD_TESTING=0

  • 如果您想从软件包中运行一个特定的测试:

colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值