ROS命令 catkin_init_workspace 分析

2023-05-16

ros版本: Ubuntu18.04 Melodic

之前在调试ros工作空间环境变量的问题的时候修改了工作空间src文件夹下的CMakeLists.txt以进行打印消息分析出错的原因。

在我新建另外一个工作空间,执行catkin_make的过程中,同样打印了之前在修改后的CMakeLists.txt添加的打印消息。而CMakeLists.txt是由命令catkin_init_workspace生成的,因此特地对catkin_init_workspace的工作过程进行简单的分析。

catkin_init_workspace位置

首先要找到catkin_init_workspace的位置,通过以下命令:

$ which catkin_init_workspace

发现位于/opt/ros/melodic/bin/catkin_init_workspace,打开后发现catkin_init_workspace是python代码文件,使用gedit打开进行查看

catkin_init_workspace源码分析

打开catkin_init_workspace源码分析后发现,关键的代码为

try:
    init_workspace(workspace)

通过print后发现,输入的参数workspace就是运行catkin_init_workspace的路径,即工作空间src文件夹的路径。

而init_workspace函数由以下语句导入:

from catkin.init_workspace import init_workspace

我们通过find命令搜索一下包含init_workspace的文件,筛选出上级目录名称是catkin的文件。

$ sudo find / -name init_workspace*

在输出结果中找到了/opt/ros/melodic/lib/python2.7/dist-packages/catkin/init_workspace.py,这个应该就是我们想要找到的文件

使用gedit打开init_workspace.py,在这个文件中我们可以找到init_workspace函数,分析这个函数可以发现,关键的代码在最后一行:

_symlink_or_copy(src_file_path, dst)

通过print函数打印可以发现

src_file_path = /opt/ros/melodic/share/catkin/cmake/toplevel.cmake
dst = workspace/CMakeLists.txt #workspace为工作空间src文件夹路径

_symlink_or_copy函数(init_workspace.py 第42行)的代码为(仅关键代码):

def _symlink_or_copy(src, dst):
    try:
        os.symlink(src,dst)
    ...

所以_symlink_or_copy是创建dst作为src的软链接(在windows中相当于快捷方式)。

结论

综上所述,在工作空间src文件夹中执行catkin_init_worksapce进行工作空间初始化时,会在src文件夹下创建一个名为CMakeLists.txt的指向/opt/ros/melodic/share/catkin/cmake/toplevel.cmake软链接,因此,打开CMakeLists.txt时,实际上相当于打开了toplevel.cmake,此时对它进行修改的话,所有工作空间由catkin_init_worksapce创建的CMakeList.txt都会受到影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS命令 catkin_init_workspace 分析 的相关文章

随机推荐