ROS机器人操作系统基础

是故无冥冥之志者,无昭昭之明;无惛惛之事者,无赫赫之功。        —— 先秦_劝学_荀子

一、ROS文件系统和软件包简介

1、ROS文件系统介绍

——快速了解ROS文件系统概念

功能包集(Stack):如果你将几个具有某些功能的功能包组织在一起,那么你将会获得一个功能包集。在ROS系统中,存在大量的不同用途的功能包集,例如导航功能包集。

Package软件包:是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其他手动创建的东西。

packages.xml:清单文件,关于‘软件包’相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。

CMakeLists.txt:编译配置文件,使用cmake进行程序编译的时候,会根据CMakeList.txt这个文件进行一步一步的处理,然后形成一个MakeFile文件,系统再通过这个文件的设置进行程序的编译。

ROS机器人操作系统基础

——认识文件系统工具

程序代码是分布在众多ROS软件包当中,当使用命令行工具(比如ls和cd)来浏览时会非常繁琐,因此ROS提供了专门的命令工具来简化这些操作。

使用rospack:获取软件包的有关信息。

当ROS安装包越来越多时,该命令就非常有用,尤其是当安装包有上百个之多时,根本无法准确记清各个软件包的路径或是否存在某软件包等。

rospack list-names | wc -l

rospack list | grep voice

ROS机器人操作系统基础ROS机器人操作系统基础

2、创建和编译ROS软件包

所有的ROS软件,包括我们创建的软件,都被组织成软件包。在我们写任何程序之前,第一步是创建一个容纳我们的软件包的工作区,然后再创建软件包本身。

——创建工作空间

创建的工作空间其实就是一个文件夹,用于存储我们的软件包,工作空间可以任意命名成自己喜欢的名字,任意选择存储在home目录下的自己喜欢的位置。

mkdir -p ros_workspace/src

cd ros_workspace/src

catkin_init_workspace

cd ros_workspace

catkin_make

——创建软件包

创建一个新ROS软件包的命令应该在你工作区中的src目录下运行

catkin_create_pkg test_pkg std_msgs roscpp rospy

其实,这个功能包创建命令没有做太多工作,它只不过创建了一个存放这个功能包的目录,并在那个目录下生成了两个配置文件。

注:ROS包的命名遵循一个命名规范,只允许使用小写字母、数字和下划线,而且首字符必须是一个小写字母。一些ROS工具,包括catkin,不支持那些不遵守命名规范的包。

——软件包的依赖关系

—一级依赖:在使用catkin_create_pkg命令时提供了几个程序包作为依赖包,现在我们可以使用rospack命令工具来查看一级依赖包。

rospack depends1 test_pkg

roscpp

rospy

std_msgs

注:当新创建了工作空间时,ROS知道该工作空间的环境变量才能定位到该工作空间下的软件包,因此,为了方便每次打开终端都自动配置环境变量需要在home目录下的。bashrc文件最下面添加如下信息:

#ros config

source /opt/ros/kinetic(所用版本名)/setup.bash

spurce ~/ros_workspace/devel/setup.bash

或者使用命令

echo "source /opt/ros/kinetic(所用版本名)/setup.bash" >> ~/.bashrc

echo "spurce ~/ros_workspace/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc

rospack列出了在运行catkin_create_pkg命令时作为参数的依赖包,这些依赖包随后保存在package.xml文件中。

—间接依赖:在很多情况中,一个依赖包还会有它自己的依赖包,比如,rospy还有其它依赖包。

rospack depends1 rospy

******

——删除工作空间的软件包

删除不想要的工作空间的软件包很简单,直接rm整个软件包目录即可,然后重新编译整个工作空间。

——编写代码

***.cpp

——编译软件包

编译之前,主要需要修改CMakeLists.txt这个编译配置文件

当修改完CMakeLists.txt这个编译配置文件后,就可以在工作空间的根目录下使用catkin_make进行编译了。

——运行节点

使用rosrun命令来启动节点

在使用rosrun运行节点时,需要首先启动roscore,直接在terminal输入roscore回车即可启动master节点

rosrun test_pkg test_pkg_node




注:转载于ROS小课堂