前面两篇文章大概了解了一下ROS的基本概念和如何使用命令行工具。这一篇文章我们大概聊一聊如何创建工作空间与功能包。
3.1 创建工作空间与功能包
工作空间(workspace)是一个存放工程开发相关文件的文件夹:
- src:代码空间(Source Space)用于放置功能包。
- build:编译空间(Build Space)用于放置编译过程中产生的中间文件。
- devel:开发空间(Development Space)用于放置编译生成的可执行文件。
- install:安装空间(Install Space)用install指令安装的东西存放在这里。
ps:开发空间和安装空间里面的内容有一定重复,所以ROS2里面做了一些修正,只保留了安装空间。
3.1.1 创建工作空间:
- 打开终端输入以下指令来创建文件夹:
mkdir catkin_ws
可以看到上图出现了名为“catkin_ws”的文件夹
-
先输入以下指令定位到catkin_ws文件夹:
cd catkin_ws/
然后输入如下指令创建src文件夹:
mkdir src
如上图我们看到了名为“src”的文件夹。
-
先输入以下指令定位到catkin_ws文件夹:
cd src/
然后输入如下指令把src文件初始化成ROS的工作空间:
catkin_init_workspace
确认之后会出现这样的一个txt文件,说明当前这个路径已经成为了ROS的工作空间了。
-
先输入如下指令回到上一级:
cd ..
然后输入如下指令进行编译:
catkin_make
我们可以看到产生了编译空间和开发空间,但是没有安装空间,我们需要另外运行一个命令来产生:
catkin_make install
现在四个文件夹就齐全了。
3.1.2 创建功能包:
功能包是放置ROS源码的最下单元,创建代码的时候一定要先创建功能包,所有的源码必须放在功能包下面,不能直接放在src文件夹下面去编译。
同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
创建功能包的指令为:
catkin_create_pkg<package_name>[depend1][depend2][depend3]
- 首先我们通过上面的方法定位到src文件夹,然后再输入如下指令创建功能包:
catkin_create_pkg test_pkg std_msgs rospy roscpp
运行结果如上图
在src文件下我们可以看到生成了对应名字的功能包
-
通过上述方法回到catkin_ws文件夹,输入如下指令编译功能包:
catkin_make
3.1.3 运行程序
- 要运行功能包里面的某个程序的话,我们需要先设置以下工作空间的环境变量,在catkin_ws终端下输入如下指令:
source devel/setup.bash
只有设置了环境变量我们才能让系统找到我们的工作空间,并且找到工作空间下对应的功能包。我们可以输入如下指令来查看环境变量:
echo $ROS_PACKAGE_PATH
说明一下:ROS_PACKAGE_PATH是ROS本身的环境变量,它会通过这个环境变量来查找一下所有ROS功能包里面的路径。
可以看到只要把功能包放在src文件下面,系统就可以通过环境变量找到功能包。所以环境变量设置是非常重要的。
3.1.4 讲解功能包下面的两个重要文件
- package.xml
我们打开这个文件,下面对一些信息已经做好了标注。
所以我们如果一开始依赖信息没填好的话可以在这里进行扩展。
- CMakeLists.txt
这个文件主要用来描述功能包的编译规则,后续会讲解怎么修改这个文件来让代码成功编译。