理解ROS功能包(三):创建功能包和ROS环境
上一篇中创建好了工作空间,现在开始在工作空间中创建具有实际功能的功能包
1.创建功能包:
//创建指令
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
//之后就会生成一个功能包
package/
CMakeLists.txt
package.xml
...
进入后会发现里面有两个文件:
CMakeLists.txt和一般的cmake文件完全一样,但是都默认设置好了和ROS相关的一些文本。
package.xml可以理解为ROS专用的一种cmake,专门给ROS看的。
//回到工作空间起始位置
catkin_make
//之后会在功能包内自动产生两个文件夹src和include,这里可以先完全不去管它们
2.ROS环境:
ROS环境是由一个个工作空间组成的。
大家都熟悉使用apt-install来安装功能包,这些功能包并不会像一般软件那样安装,因为既然是用于ROS的功能包,必然要放置在一个工作空间中才行,因此它们会被放在ROS的默认工作空间里。
关于工作空间的注册在上一篇中已经说到了,其实就是在bashrc中加入自动source的指令,使得ROS可以知道目标工作空间的存在。
关于工作空间还有一个有意思的问题是:如果两个功能包同名,在ROS阅读了package.xml后它会看到两个一样的功能包,它会选择执行哪个?
这个问题的解决方式是避而不答,也就是不要这么做。但是对于apt-install安装的功能包,如果后来又在用户自己创建的工作空间里用源码安装了相同的功能包,那么可以通过env | grep ros查找到有关ROS_PACKAGE_PATH的信息,就会发现默认工作空间中的功能包会被用户自定义的工作空间中的同名功能包覆盖。