背景
基础准备
安装colcon
安装ROS 2
任务
创建工作空间
添加源码
编译工作空间
运行测试
source环境
运行demo
创建属于你的工作包
设置colcon_cd
设置colcon tab 补全
技巧
背景
ros1使用catkin_make编译,对应于ROS2,它的编译工具为colcon。
基础准备
安装colcon
sudo apt install python3-colcon-common-extensions
安装ros2
要构建本节项目,需要安装ROS 2,可以参考之前的教程进行安装。
任务
ROS工作区是一个具有特定结构的文件夹。通常有一个src子文件夹。在该子目录中是ROS包的源代码所在的位置。通常,文件夹开始时为空。
Colcon在源代码外构建。默认情况下,它将创建以下文件夹作为src文件夹的同级目录:
building文件夹是存储中间文件的地方。对于每个包,将创建一个子文件夹。
install文件夹是将每个包安装到的位置。默认情况下,每个包将安装到单独的子目录中。
log目录包含关于每个colcon调用的各种日志信息。
创建一个工作空间
首先,创建一个目录(ros2_ws)来包含我们的工作空间:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
此时,工作空间包含一个空目录src:
.
└── src
1 directory, 0 files
添加源码
将示例库克隆到工作区的src目录中:
git clone https://github.com/ros2/examples src/examples -b humble
现在工作区应该有ROS 2示例的源代码:
.
└── src
└── examples
├── CONTRIBUTING.md
├── LICENSE
├── rclcpp
├── rclpy
└── README.md
4 directories, 3 files
编译工作空间
在工作区的根目录下,运行colcon build。由于诸如ament_cmake之类的构建类型不支持devel空间的概念,并且需要安装包,因此colcon支持选项--symlink-install。这允许通过更改源空间中的文件(例如Python文件或其他未编译的资源)来更改已安装的文件,以便更快地迭代。
colcon build --symlink-install
构建完成后,我们应该看到构建、安装和日志目录:
.
├── build
├── install
├── log
└── src
4 directories, 0 files
运行测试
要为我们刚刚构建的包运行测试,请运行以下命令:
colcon test
source环境
当colcon成功完成构建时,输出将在安装目录中。在使用任何已安装的可执行文件或库之前,您需要将它们添加到您的路径和库路径中。Colcon将在安装目录中生成bash/bat文件,以帮助设置环境。这些文件将把所有必需的元素添加到您的路径和库路径中,并提供由包导出的任何bash或shell命令。
source install/setup.bash
运行demo
有了环境源,我们就可以运行由colcon构建的可执行文件。从示例中运行一个订阅者节点:
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
在另一个终端中,运行一个发布者节点(不要忘记source):
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
您应该看到来自发布者和订阅者的消息的数量在增加。
创建属于你的工作包
colcon使用REP 149中定义的package.xml规范(也支持格式2)。
Colcon支持多种构建类型。推荐的构建类型是ament_cmake和ament_python。也支持纯cmake包。
ament_python构建的一个例子是ament_index_python包,其中setup.py是构建的主要入口点。
demo_nodes_cpp等包使用ament_cmake构建类型,并使用CMake作为构建工具。
为方便起见,您可以使用工具ros2 pkg create基于模板创建新包。
设置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/humble/" >> ~/.bashrc
根据安装colcon_cd的方式和工作空间的位置,上面的命令可能会有所不同。要在Linux和macOS中撤消此操作,请找到系统的shell启动脚本并删除附加的源和导出命令。
设置colcon tab补全
如果安装了colcon-argcomplete包,命令colcon支持bash和类bash shell的命令补全。
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc
技巧
如果您不想构建特定的包,请在目录中放置一个名为COLCON_IGNORE的空文件,该文件将不会被索引。
如果你想避免在CMake包中配置和构建测试,你可以通过:--CMake -args -DBUILD_TESTING=0。
如果你想从一个包中运行一个特定的测试:
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG