1.什么是工作空间
工作空间(workspace)是用来存放ROS开发相关文件的一个文件夹
一个工作空间里面又分为四个主要文件夹
- src:代码空间(Source Space),用来放置所有功能包
- bulid:编译空间(Build Space),存放编译过程中产生的缓存信息和中间文件(这个文件夹基本不用关心)
- devel:开发空间(Development Space),放置编译生成的一些可执行文件(库、脚本等)
- Install:安装空间(Install Space),编译成功后可以使用make install命令将可执行文件安装到该空间中,运行该空间中的环境变量脚本,即可在终端中运行这些可执行文件(安装空间不是必需的)
WorkSpace --- 自定义的工作空间
|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
|--- src: 源码
|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
|-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
|-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
|-- scripts 存储python文件
|-- src 存储C++源文件
|-- include 头文件
|-- msg 消息通信格式文件
|-- srv 服务通信格式文件
|-- action 动作格式文件
|-- launch 可一次性运行多个节点
|-- config 配置信息
|-- CMakeLists.txt: 编译的基本配置
2.创建工作空间
首先新建一个文件夹test_workspace作为工作空间,这个工作空间的名字可以自定义
mkdir test_workspace
进入刚刚创建好的工作空间,再新建一个文件夹src用于存放功能包源码(代码空间)
cd test_workspace
mkdir src
在代码空间src中执行catkin_init_worksapce进行工作空间初始化
会在代码空间src下创建一个名为CMakeLists.txt的文件
cd src
catkin_init_workspace
3.编译工作空间
回到工作空间的根目录,对刚刚创建好的工作空间进行编译
能看到在工作空间的根目录下创建了bulid(编译空间)和devel(开发空间)
但是并没有开发空间Install
cd ..
catkin_make
单独创建Install(开发空间)
catkin_make install
4.创建功能包
进入代码空间src,并创建功能包,定义包名为“test_pkg”并添加相关的依赖
cd src
catkin_create_pkg test_pkg std_msgs rospy roscpp
上述命令,会在工作空间下生成一个功能包“test_pkg”,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。
5.编译功能包(重新编译工作空间)
由于创建了一个新的功能包,可以重新对工作空间进行编译,即使功能包中并没有实际内容
不过如果功能包里写了代码,就要先配置CMakeLists.txt,然后再编译
同理,必须编译工作空间必须回到工作空间的根目录下
cd ..
catkin_make
6.设置环境变量
设置环境变量:在工作空间的根目录下,source一下开发空间devel下的的setup.bash脚本文件
只有设置了环境变量之后,才能让系统找到工作空间和工作空间中对应的一些功能包
source devel/setup.bash
检查环境变量
echo $ROS_PACKAGE_PATH
但是要注意,source devel/setup.bash只在当前终端生效
如果打开一个新终端,不重新设置环境变量,系统就找不到对应的功能包了
要想永久生效,可以把工作空间的环境变量写入 .bashrc文件
gedit ~/.bashrc
在 .bashrc文件文件的最后,写入
source /home/yao/My_Ros_WorkSpace/test_workspace/devel/setup.bash(每个人路径不同)
ROS工作空间目录中不允许有中文,比如"桌面"这种,如果有中文的话,后面用launch文件启动多个节点可能有问题
重启终端生效
这样每次编译(catkin_make)之后就不需要再写source devel/setup.bash了
7.运行节点
在运行节点之前,首先需要打开ROS Master
新建一个终端
roscore
再新建一个终端
进入工作空间的根目录
每次新建一个终端,都要重新设置一下环境变量
启动节点
cd <工作空间>
source devel/setup.bash
rosrun <功能包名> <可执行文件名>