ROS从入门到放弃第三篇(创建工作空间和功能包)

前面两篇文章大概了解了一下ROS的基本概念和如何使用命令行工具。这一篇文章我们大概聊一聊如何创建工作空间与功能包。

3.1 创建工作空间与功能包

工作空间(workspace)是一个存放工程开发相关文件的文件夹:

  1. src:代码空间(Source Space)用于放置功能包。
  2. build:编译空间(Build Space)用于放置编译过程中产生的中间文件。
  3. devel:开发空间(Development Space)用于放置编译生成的可执行文件。
  4. install:安装空间(Install Space)用install指令安装的东西存放在这里。

ps:开发空间和安装空间里面的内容有一定重复,所以ROS2里面做了一些修正,只保留了安装空间。

3.1.1 创建工作空间:

  1. 打开终端输入以下指令来创建文件夹:
    mkdir catkin_ws
    

    ROS从入门到放弃第三篇(创建工作空间和功能包)

    可以看到上图出现了名为“catkin_ws”的文件夹 

  2. 先输入以下指令定位到catkin_ws文件夹:

    cd catkin_ws/

    然后输入如下指令创建src文件夹:

    mkdir src

    ROS从入门到放弃第三篇(创建工作空间和功能包)

    如上图我们看到了名为“src”的文件夹。

  3. 先输入以下指令定位到catkin_ws文件夹:

    cd src/

    然后输入如下指令把src文件初始化成ROS的工作空间:

    catkin_init_workspace

    ROS从入门到放弃第三篇(创建工作空间和功能包)

    确认之后会出现这样的一个txt文件,说明当前这个路径已经成为了ROS的工作空间了。

  4. 先输入如下指令回到上一级:

    cd ..

    然后输入如下指令进行编译:

    catkin_make

    ROS从入门到放弃第三篇(创建工作空间和功能包)

    我们可以看到产生了编译空间和开发空间,但是没有安装空间,我们需要另外运行一个命令来产生:

    catkin_make install

    ROS从入门到放弃第三篇(创建工作空间和功能包)

    现在四个文件夹就齐全了。

3.1.2 创建功能包:

功能包是放置ROS源码的最下单元,创建代码的时候一定要先创建功能包,所有的源码必须放在功能包下面,不能直接放在src文件夹下面去编译。

同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。

创建功能包的指令为:

catkin_create_pkg<package_name>[depend1][depend2][depend3]
  1. 首先我们通过上面的方法定位到src文件夹,然后再输入如下指令创建功能包:
    catkin_create_pkg test_pkg std_msgs rospy roscpp

    ROS从入门到放弃第三篇(创建工作空间和功能包) 运行结果如上图 ROS从入门到放弃第三篇(创建工作空间和功能包)

     在src文件下我们可以看到生成了对应名字的功能包ROS从入门到放弃第三篇(创建工作空间和功能包)

     

  2. 通过上述方法回到catkin_ws文件夹,输入如下指令编译功能包:

    catkin_make

    ROS从入门到放弃第三篇(创建工作空间和功能包)

     

3.1.3 运行程序

  1. 要运行功能包里面的某个程序的话,我们需要先设置以下工作空间的环境变量,在catkin_ws终端下输入如下指令:
    source devel/setup.bash

    只有设置了环境变量我们才能让系统找到我们的工作空间,并且找到工作空间下对应的功能包。我们可以输入如下指令来查看环境变量:

    echo $ROS_PACKAGE_PATH

    说明一下:ROS_PACKAGE_PATH是ROS本身的环境变量,它会通过这个环境变量来查找一下所有ROS功能包里面的路径。ROS从入门到放弃第三篇(创建工作空间和功能包)

     可以看到只要把功能包放在src文件下面,系统就可以通过环境变量找到功能包。所以环境变量设置是非常重要的。

3.1.4 讲解功能包下面的两个重要文件

  •  package.xml

我们打开这个文件,下面对一些信息已经做好了标注。ROS从入门到放弃第三篇(创建工作空间和功能包)

 ROS从入门到放弃第三篇(创建工作空间和功能包)

 所以我们如果一开始依赖信息没填好的话可以在这里进行扩展。

  • CMakeLists.txt

这个文件主要用来描述功能包的编译规则,后续会讲解怎么修改这个文件来让代码成功编译。

上一篇:vue管理后台项目导出Excel表格,前端处理后台返回的二进制文件流


下一篇:OCP-052考试题库汇总(36)-CUUG内部解答版