ROS基础,创建工作空间,创建功能包
1.工作空间
工作空间(work space)是ROS系统中存放工程开发相关的文件夹,其目录结构如下:
src:代码空间(Source Space),用于存放开发代码
build:编译空间(Build Space)
devel:开发空间(Development Space),存放编译后生成的二进制代码(C++)
install:安装空间(Install Space)
一个最小的项目结构如图所示
1.1 如何创建并编译一个工作空间
创建工作空间
在根目录下创建一个叫catkin_ws的工作空间,并进入到src目录下进行初始化
$ source /opt/ros/kinetic/setup.bash
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
编译工作空间
catkin_make相当于cmake编译器,ROS对其进行改造(加入CMakeLists.txt进行功能包索引)。一般在修改了src下的程序代码或配置文件后需要进行编译。
$ cd ~/catkin_ws
$ catkin_make
设置环境变量
在这里记住一点,但凡编译过工作空间,一定要重新source环境变量,否则代码不会更新。
这里使用的是setup.bash,还有两个文件为setup.sh和setup.zsh,要source哪个文件取决于你的默认解释程序(echo $SHELL)
$ souce ~/catkiin_ws/devel/setup.bash
补充:工作空间的覆盖
ROS系统中工作空间存在Overlaying机制,即工作空间覆盖机制,符合以下规则:
1)工作空间的路径记录在ROS_PACKAGE_PATH环境变量中
2)新设置的路径(source后)会放在ROS_PACKAGE_PATH变量的最前端
3)运行程序时,ROS会优先在靠近前端的工作空间中查找指定的功能包
4)只有当前端工作空间不存在该功能包时才向后查找
如图所示
可以观察到source当前工作空间后,将当前工作空间的绝对路径放到了系统工作空间之前
2.创建功能包
ROS里的功能包用于区分某个文件夹下代码的功能,如机器人有移动,导航,视觉等功能,我们为整个机器人创建工作空间,也可称为一个项目,接来要开发它的各个功能,于是我们使用功能包来分隔一类别代码。下面是创建功能包的方式:
下面命令创建了一个叫做test1个功能包,导入了rospy roscpp依赖包,ROS支持python和c++开发,所以导入这两个依赖包让功能包可以通过这两种语言开发。
创建完功能包后需要catkin_make进行编译,编译后需要source当前工作空间,这样就完成了功能包的创建
$ cd ~/catkin_ws/src
$ catkin_create_pkg test1 rospy roscpp
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
注意:同一个工作空间不能存在相同名称的功能包,不同工作空间可以存在相同名称的功能包
下一篇: JPEG原理分析及JPEG解码器的调试