catkin:ros定制的编译构建系统,是对cmake的扩展。涉及到编译系统的概念,想了解的话可以先了解一下编译系统的基础知识。
建立工作空间:
当写完代码的时候可以使用catkin_make进行编译,编译完之后要souce一下环境(source ~/工作空间名/devel/setup.bash)刷新环境,把编译好的文件添加到环境变量中,这样才能正常使用编译好的可执行文件。
如果不进行source的话使用rospack list命令系统就找不到这个工作空间下的功能包,所以每次功能包变化的时候都要进行source命令。
rospack list grep | 关键字 使用rospack list 可以使用关键字进行过滤
例如:
rospack list grep | first_ws 就会筛选出所有带有first_ws 的包
source的生命周期很短,只在一个终端中有效,另开一个终端的话还要重新进行source一遍。
所以有一个比较好的解决办法
echo "source ~/工作空间名/devel/setup.bash " >>~/ .bashrc
catkin_ make的一级子目录的解释:
src存放编写的源代码:包括各种功能包,catkin编译的对象就是一个又一个的功能包,功能包的存放目录方式如下:
功能包可以一个一个的放在src文件夹下,也可以放在src下面的子文件夹下,是可以找到的。
build和devel是catkin文件编译系统自动进行的,不用自己去管理。
功能包package的使用:
package的内容架构:
Cmakelists的使用:
package.xml的使用
这个就相当于包的自我介绍。
依赖就是这个包依赖的外部程序,依赖就在这个文件中定义,当在github中下载别人的代码进行调试的时候,有些依赖项自己电脑上就没有安装,所以现在就需要自己手动安装一些依赖项,安装方法如下:
1,回到工作空间目录下
2,命令rosdep install 命令进行安装,这个安装原理是检查这个包里面的xml文件里面的builddepend和rundepend,然后检查本机是否安装,然后进行自动安装。
rosdep install --from-path src --ignore-src --rosdistro=kinetic -y 这个是kinetic下的安装
rosdep install --from-path src --ignore-src --rosdistro=melodic -y 这个是medlodic下的安装
这个命令是用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)。
manifest是rosbuild文件编译系统下的写法,和rosbuild一样,现在基本上不使用了。
那么介绍完这两个文件之后,package的核心代码文件放在哪呢?
首先就是可执行文件的来源:
shell是linux下的shell脚本
然后他们存放的路径如下:
package除了放上述的一些文件之外也可以存放自定义的内容:
他们在文件系统的架构如下:
除了上面的内容,package还还还可以放一下的内容:
launch文件可以帮助我们一次运行多个可执行文件。
同样他们在package的文件架构如下:
以上就是package存放的所有可能的文件内容了。
下面就介绍一些常用的包管理指令了:
Metapackge:
实际上是一个虚包,并没有实质性的内容,但是依赖了很多其他的软件包,其中安装ros的时候 sudo apt-get install roskintic -destop-full 就是一个虚包。
stack:软件包集
现在很多软件包的安装都是通过虚包进行安装的,虚包相当于一个功能包集。这样就将很多依赖的功能包一同进行安装了。
devel存放的内容:
还有一个相较于catkin_make比较老的编译系统:
catkin就是解决可移植性的问题。所以现在基本上就是使用catkin_make,很少使用rosbuild。