使用colcon构建包
目录
这是一个关于如何使用 colcon
创建和构建ROS 2工作区的简要教程。这是一个实用的教程,并非旨在取代colcon核心文档。 [小鱼@6976]
背景
编译工具 colcon
是在ROS 构建工具 catkin_make
, catkin_make_isolated
, catkin_tools
和 ament_tools
上的再次迭代。关于设计colcon思路 在这篇文章中可以找到 。 [小鱼@6977]
colcon代码源文件可以在 colcon GitHub 开源组 中找到。 [小鱼@6978]
先决条件
基础知识
ROS工作区是具有特定结构的目录。通常有一个 src
子目录。在该子目录中是ROS包的源文件的位置。通常一开始目录是空的。 [小鱼@6985]
colcon在源代码外进行构建(这与Cmake默认在文件夹里不同)。默认情况下,它将在 ``src``同级目录下创建以下文件夹: [小鱼@6986]
build
目录将是中间文件的存储位置。对于每个包,将创建一个子文件夹,在其中调用例如CMake。 [小鱼@6987]install
目录是每个软件包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中。 [小鱼@6988]log
目录包含有关每个colcon调用的各种日志信息。 [小鱼@6989]
注解
与catkin相比,没有 devel
目录。
创建工作空间
首先,创建一个目录 ( ros2_example_ws
) 来包含我们的工作区:
mkdir -p ~/ros2_example_ws/src
cd ~/ros2_example_ws
mkdir -p ~/ros2_example_ws/src
cd ~/ros2_example_ws
md \dev\ros2_example_ws\src
cd \dev\ros2_example_ws
此时,工作区包含一个空目录 src
:
.
└── src
1 directory, 0 files
添加一些代码文件 [小鱼@6994]
让我们将 examples 仓库克隆到工作区的 src
目录中:
git clone https://github.com/ros2/examples src/examples -b foxy
现在工作区应该有 ROS 2 examples 的源代码了: [小鱼@6996]
.
└── src
└── examples
├── CONTRIBUTING.md
├── LICENSE
├── rclcpp
├── rclpy
└── README.md
4 directories, 3 files
通过source添加依赖 [小鱼@6997]
在编译之前,一定记得要用source指令运行ROS 2安装目录下的setup脚本,通过该脚本为我们的工作区示例功能包提供必要构建依赖项。这是通过source二进制安装或源码文件安装的ROS2提供的安装脚本来实现的,在另一个colcon工作区 (见 Installation) 。我们称这个环境未为底层环境依赖。 [小鱼@6998]
我们的工作区 ros2_examples_ws
将覆盖现有ROS 2安装目录。一般来说,当您计划迭代少量包时,建议使用覆盖,而不是将所有包放入同一个工作区。 [小鱼@6999]
构建工作空间
注意
Windows构建包你需要在Visual Studio环境,具体请看 Building the ROS 2 Code 详情。 [小鱼@7001]
在工作区的根目录下,运行 colcon build
。由于建造类型 ament_cmake
不支持 devel
空间的概念,需要安装软件包,colcon支持 --symlink-install
选项。这使得安装文件通过改变文件 source
空间 (例如Python文件或其他不编译重新源文件) 更快的迭代。 [小鱼@7002]
colcon build --symlink-install
colcon build --symlink-install
colcon build --symlink-install --merge-install
Windows不允许长路径,因此 merge-install
会将所有路径合并到 install
目录中。
构建完成后,我们应该会看到 build
、 install
和 log
目录:
.
├── build
├── install
├── log
└── src
4 directories, 0 files
运行测试
要对我们刚刚构建的包运行测试,请运行以下命令:
colcon test
colcon test
请记住使用 x64 Native Tools Command Prompt for VS 2019
执行以下命令,因为我们将构建工作区。
colcon test --merge-install
你还需要在这里指定 --merge-install
,因为我们在上面使用它。
创建您自己的包
colcon使用 package.xml
定义在 REP 149 规范 (format 2 也被支持)。 [小鱼@7017]
colcon支持多种构建类型。推荐的构建类型是 ament_cmake
和 ament_python
,还支持纯 cmake
包。 [小鱼@7018]
[需手动修复的语法] ament_python
建筑的一个例子是 ament_index_python package ,其中setup.py是建筑的主要入口。 [待校准@7019]
像 demo_nodes_cpp 这样的包使用 ament_cmake
构建类型,并使用CMake作为构建工具。 [待校准@7020]
为方便起见,您可以使用工具 ros2 pkg create
基于模板创建新的包。
注解
对于 catkin
使用者,这相当于 catkin_create_package
。
设置 colcon_cd
通过命令 colcon_cd
,您可以快速将shell的当前工作目录更改为包的目录。例如, colcon_cd some_ros_package
会很快将您带到目录 ~/ros2_install/src/some_ros_package
。 [小鱼@7024]
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/foxy/" >> ~/.bashrc
echo "source /usr/local/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=~/ros2_install" >> ~/.bashrc
尚不可用
根据您安装 colcon_cd
的方式和工作区的位置,上述说明可能会有所不同,详情请参考 the documentation 。要在Linux和macOS中撤消此操作,请找到系统的shell启动脚本,并删除附加的源文件和导出命令。 [待校准@7026]
设置 colcon
标签完成 [待校准@7027]
命令 colcon
supports command completion bash和bash类似贝壳如果 colcon-argcomplete
包安装。 [待校准@7028]
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc
echo "source $HOME/.local/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bash_profile
尚不可用
根据您安装 colcon
的方式和工作区的位置,上述说明可能会有所不同,详情请参考 the documentation 。要在Linux和macOS中撤消此操作,请找到系统的shell启动脚本并删除附加的源文件命令。 [待校准@7029]
提示
如果您不想构建特定的包,请在目录中放置一个名为
COLCON_IGNORE
的空文件,它将不会被索引。 [待校准@7031]如果你想避免在CMake包中配置和构建测试,你可以通过:
--cmake-args -DBUILD_TESTING=0
。 [待校准@7032]如果要从包中运行单个特定测试: [待校准@7033]
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG