ROS学习笔记(二)——文件系统、创建并编译程序包

ROS学习笔记系列是对 ROS中文教程的记录总结。
笔记二包括:

  • 2.1 ROS文件系统
  • 2.2 创建 ROS 程序包
  • 2.3 编译 ROS 程序包

2.1 ROS文件系统

2.1.1 ROS文件系统简介
ROS 文件系统包含 Package(软件包)Manifest (清单)。其中,软件包包括可执行文件、脚本文件、程序库这些,例如自己创建的 .cpp 文件就是软件包的一部分。清单是对软件包的描述,实际上是一个名为 package.xml 的文件,根据需要取消注释或者添加即可。此外,Stack 是Package的集合,包含多个Package,遇到知道即可。
一会儿建立文件之后,我们可以打开文件夹得到类似结构
ROS学习笔记(二)——文件系统、创建并编译程序包_第1张图片

2.1.2 ROS文件系统指令

指令 用法 功能 示例
rospack rospack find [包名称] 获取软件包信息 rospack find roscpp
roscd roscd [本地目录] 切换目录 roscd roscpp
rosls rosls [本地目录] 罗列目录 roscd roscpp_tutorials

注:roscd只能切换到保存有ROS软件包的环境变量中,输入

$ echo $ROS_PACKAGE_PATH

返回的路径就是包含环境变量的目录
以上三条指令测试输入如下:
ROS文件系统指令测试
2.2 创建 ROS 程序包
创建ROS程序包什么意思呢?用其他行业比如C++的话来说,其实就是新建一个工程,只是这里条条框框多一些。

2.2.1 创建catkin工作空间
首先推荐在所谓的 catkin 工作空间里来建工程,没有的话先建立,命令如下:

$ source /opt/ros/kinetic/setup.bash

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make

$ source devel/setup.bash
$ echo $ROS_PACKAGE_PATH

效果部分如下:
ROS学习笔记(二)——文件系统、创建并编译程序包_第2张图片
顺便说一句,catkin 的意思是“柳絮”,不理解为什么叫这个名字。

2.2.2 创建程序包
首先选择程序包路径,就放在刚才创建的 catkin_ws/ src 路径下就好
然后使用 cat_create_pkg <程序包名称> <依赖的其他程序包>

$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

依赖其他包,有点类似C++添加头文件或者库的意思。这里我们就添加了 std_msgs等文件,后面我们会看到 std_msgs 里面有 String,就像C++的一样。当然,std_msgs等也可能会依赖其他包,C++里头文件的包含也是常见的。直接包含的包叫直接依赖,否则叫间接依赖。
运行结果如下:
ROS学习笔记(二)——文件系统、创建并编译程序包_第3张图片
可以稍微读一读下面的英文,发现自动创建了 CMakeLists.txt 和 package.xml 两个文件,它们十分重要。可以打开了看看,虽然第一次看起来感觉有些困难。

简单说,CMakeLists.txt 给了很多个模块(很多注释了),告诉Linux终端要执行哪些东西,比如我们自己加了一个.cpp文件,要运行了,并没有windows的点击运行按钮,我们也不可能直接输入文件名在linux终端,该怎么运行我们的 C++程序呢?我们就可以在这个文件里添加,并且最终进行编译运行。具体后面慢慢道来。

而package.xml 文件之前也说过,描述整个package的关系,那么多文件,到底是谁包含谁,我们就可以在package.xml里面看到。后面我们会修改来满足我们的需求。

2.3 编译程序包
编译很简单,执行以下两句即可,catkin_make 是编译指令。

$ source /opt/ros/groovy/setup.bash
$ catkin_make

运行截图如下:
ROS学习笔记(二)——文件系统、创建并编译程序包_第4张图片
代码似曾相识,是的,我们已经用过,不过就像C++每次修改代码后都需要重新编译,这里也是,每次我们修改CMakeLists.txt 或 package.xml 后都需要重新编译。编译指令对整个工程的,在工作空间下的目录实施这个指令是很合理的。

小结一下
ROS文件系统是什么样的呢?创建和编译程序包的关键指令分别是什么?深度回忆吧,让大脑建立新的突触!

你可能感兴趣的:(ROS)