ROS 构建工具
colcon (ROS2)
编译工具 colcon 是在 ROS 构建工具 catkin_make , catkin_make_isolated, catkin_tools 和 ament_tools 上的再次迭代。
基础知识
ROS 工作空间是具有特定结构的目录。通常有一个 src 子目录,该子目录是 ROS 包的源文件的位置。通常一开始目录是空的。
colcon 在源代码(src)外进行构建(这与 CMake 默认在文件夹里不同)。默认情况下,它将在 src
同级目录下创建以下文件夹:
-
build
目录将是中间文件的存储位置。对于每个包,将在其中创建一个子文件夹。 -
install
目录是每个软件 包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中。 -
log
目录包含有关每个 colcon 调用的各种日志信息。
创建工作空间
首先,创建一个目录 ( dev_ws ) 来作为我们的工作空间:
mkdir -p ~/dev_ws/src
cd ~/dev_ws
此时,工作区包含一个空目录 src
。
添加一些代码
让我们将 examples 仓库克隆到工作区的 src
目录中:
如果你还没有配置 git,可以下载对应的压缩包,解压后自行放入 src。
git clone https://github.com/ros2/examples src/examples -humble
通过 source 添加依赖
source /opt/ros/humble/setup.bash
通常情况下,你应该将这条命令写入 ~/.bashrc 中,以后就不用手动执行这条命令了。(因为每个终端启动时会先source ~/.bashrc)(如果你是使用 fishros 一键安装的 ROS,那么这条命令已经在你的 bashrc 中了)
构建工作空间
也就是我们俗称的编译。
colcon build
# or colcon build --symlink-install
请务必在工作空间下编译,而非其他任何地方。
构建完成后,我们应该会看到 build
、install
和 log
目录。
source 环境
当 colcon 成功完成构建后,输出将在 install
目录中。在使用任何已安装的可执行文件或库之前,需要将它们添加到路径和库路径中。colcon 将在 install
目录中生成 bash/bat 文件,以帮助设置环境。
. install/setup.bash
# or source install/setup.bash
colcon build 编译选项
- --symlink-install :使用符号链接而不是复制文件,表现在于修改launch或yaml文件后无需重新编译即可运行最新配置
- --packages-select :只编译指定包
- --packages-ignore :忽略指定包
- --continue-on-error :在编译出错之后继续编译其他模块
catkin (这是 ROS 1 的构建工具 不用学)
1. catkin 编译系统
对于源代码包,编译后才能在系统上运行。
Linux 下,随着源文件的增多,用 gcc/g++ 命令的方式显得效率低下,人们开始用 Makefile 来编译。
然而随着工程体量增大,Makefile 也不能满足需求,于是便出现了 CMake 工具。
CMake 是对 make 工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。
ROS 这个大体量的平台,采用的就是 CMake,并且 ROS 对 CMake 进行了扩展,也就有了 Catkin 编译系统。
catkin 工作空间
catkin 编译流程
建立工作空间
mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace # 可以跳过这步,直接在 catkin_ws/ 下 catkin_make
cd ..
catkin_make
编译
cd catkin_ws
catkin_make
source ./devel/setup.bash # 编译完成后要source刷新环境
若要手动执行 catkin_make 操作,等效命令为:
cd catkin_ws/src
catkin_init_workspace
cd ..
mkdir build
cd build
cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
make
如果要在工作空间中编译指定的包,执行以下命令:
catkin_make -DCATKIN_WHITELIST_PACKAGES=“package1;package2”
如果要还原为编译所有包,执行以下命令:
catkin_make -DCATKIN_WHITELIST_PACKAGES=“”
创建功能包
cd catkin_ws/src
catkin_create_pkg <package> [depend1] [depend2] [depend3]
# e.g. catkin_create_pkg test_pkg roscpp rospy std_msgs
catkin_make 命令参数
catkin_make -h
自己看去吧。