ROS机器人操作系统基础
是故无冥冥之志者,无昭昭之明;无惛惛之事者,无赫赫之功。 —— 先秦_劝学_荀子
一、ROS文件系统和软件包简介
1、ROS文件系统介绍
——快速了解ROS文件系统概念
功能包集(Stack):如果你将几个具有某些功能的功能包组织在一起,那么你将会获得一个功能包集。在ROS系统中,存在大量的不同用途的功能包集,例如导航功能包集。
Package软件包:是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其他手动创建的东西。
packages.xml:清单文件,关于‘软件包’相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。
CMakeLists.txt:编译配置文件,使用cmake进行程序编译的时候,会根据CMakeList.txt这个文件进行一步一步的处理,然后形成一个MakeFile文件,系统再通过这个文件的设置进行程序的编译。
——认识文件系统工具
程序代码是分布在众多ROS软件包当中,当使用命令行工具(比如ls和cd)来浏览时会非常繁琐,因此ROS提供了专门的命令工具来简化这些操作。
使用rospack:获取软件包的有关信息。
当ROS安装包越来越多时,该命令就非常有用,尤其是当安装包有上百个之多时,根本无法准确记清各个软件包的路径或是否存在某软件包等。
rospack list-names | wc -l
rospack list | grep voice
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小课堂