ROS工作空间与文件系统

1. 什么是ROS的工作空间

使用ROS实现机器人开发的主要手段是写代码,这些代码文件存放的空间就是工作空间。

工作空间(workspace)是一个用于存放工程开发相关文件的文件夹。目前,ROS默认使用的是Catkin编译系统(在CMake的基础上拓展得到的,将 cmake 与 make 指令做了一个封装从而完成整个编译过程)。在Catkin编译系统下,一个典型的工作空间一般包含四个目录空间srcdevelbuildinstall,结构如下:

workspace_folder/
|—— src/
    |—— CMakeLists.txt
    |—— package_1/
        |—— CMakeLists.txt
        |—— package.xml
        |—— ......
    |—— package_2/
        |—— CMakeLists.txt
        |—— package.xml
        |—— ......
|—— devel/  
    |—— setup.bash
    |—— ......
|—— build/
    |—— ......
|—— install/
  • src: 代码空间(Source Space),最常用、最重要的文件夹,用来存储所有ROS功能包(package)的源文件

  • build: 编译空间(Build Space)catkin_make命令自动生成,用来存储工作空间编译过程中产生的缓存信息和中间文件。

  • devel: 开发空间(Development Space)catkin_make命令自动生成,用来放置编译生成的可执行文件

  • install: 安装空间(Install Space),不是必需的,很多工作空间没有该文件夹。编译成功后,可以使用make install命令将可执行文件安装到该空间中,运行该空间中的环境变量脚本,即可在终端中运行这些可执行文件。

Catkin的软件包(package)必须要包括两个文件:

  • package.xml: 包括了package的描述信息

    • name, description, version, maintainer(s), license

    • opt. authors, url's, dependencies, plugins, etc...

  • CMakeLists.txt: 构建package所需的CMake文件

    • 调用Catkin的函数/宏

    • 解析package.xml

    • 找到其他依赖的catkin软件包

    • 将本软件包添加到环境变量

ROS工作空间与文件系统

catkin编译的工作流程如下:

  1. 首先在工作空间catkin_ws/src/下递归的查找其中每一个ROS的package。

  2. package中会有package.xmlCMakeLists.txt文件,Catkin(CMake)编译系统依据CMakeLists.txt文件,从而生成makefiles(放在catkin_ws/build/)。

  3. 然后make刚刚生成的makefiles等文件,编译链接生成可执行文件(放在catkin_ws/devel)。

也就是说,Catkin就是将cmakemake指令做了一个封装从而完成整个编译过程的工具。catkin有比较突出的优点,主要是:

  • 操作更加简单

  • 一次配置,多次使用

  • 跨依赖项目编译

工作空间并不是整个ROS开发所在的空间,不同的项目可以有各自的工作空间,只需要配置各自的环境变量即可(source devel/setup.bash)。

2. 什么是ROS的功能包

功能包(package)是ROS中的基本单元,包含ROS节点、库、配置文件等。

一个功能包下常见的文件、路径有:

  ├── CMakeLists.txt    #package的编译规则(必须)
  ├── package.xml       #package的描述信息(必须)
  ├── src/              #源代码文件
  ├── include/          #C++头文件
  ├── scripts/          #可执行脚本
  ├── msg/              #自定义消息
  ├── srv/              #自定义服务
  ├── models/           #3D模型文件
  ├── urdf/             #urdf文件
  ├── launch/           #launch文件
  • config:功能包的配置文件,用户创建。

  • include:需要用到的头文件。

  • scripts:可以直接运行的Python脚本。

  • src:需要编译的C++代码。

  • launch:所有启动文件。

  • msg:自定义的消息类型。

  • srv:自定义的服务类型。

  • action:自定义的动作指令。

  • CMakeLists.txt:Catkin编译器编译功能包的规则。

  • package.xml: 功能包清单,可得到该package的名称、版本号、信息描述、作者信息和许可信息等。更重要的,<build_depend> ... </build_depend>标签定义了代码编译所依赖的其它功能包,<exec_depend> ... </exec_depend>标签定义了可执行程序运行时所依赖的其它功能包。

上面的这些文件夹并不是每一个都要有,根据需要创建即可,比如不需要运行python文件,就不用scripts文件夹。此外,也可以自定义其他的文件夹。

ROS针对功能包的常用命令如下:

catkin_create_pkg   # 创建功能包
catkin_make         # 编译工作空间中的功能包
rospack             # 获取功能包的信息
rosdep              # 自动安装功能包依赖的其它包
roscd               # 功能包目录跳转
roscp               # 拷贝功能包中的文件
rosed               # 编辑功能包中的文件
rosrun              # 运行功能包中的可执行文件
roslaunch           # 运行启动文件

rospack

rospack是对package管理的工具,命令的用法如下:

rostopic命令作用
rospack help显示rospack的用法
rospack list列出本机所有package
rospack depends [package]显示package的依赖包
rospack find [package]定位某个package
rospack profile刷新所有package的位置记录

以上命令如果package缺省,则默认为当前目录(如果当前目录包含package.xml)

roscd

roscd命令类似与Linux系统的cd,改进之处在于roscd可以直接cd到ROS的软件包。

rostopic命令作用
roscd [pacakge]cd到ROS package所在路径

rosls

rosls也可以视为Linux指令ls的改进版,可以直接lsROS软件包的内容。

rosls命令作用
rosls [pacakge]列出pacakge下的文件

rosdep

rosdep是用于管理ROS package依赖项的命令行工具,用法如下:

rosdep命令作用
rosdep check [pacakge]检查package的依赖是否满足
rosdep install [pacakge]安装pacakge的依赖
rosdep db生成和显示依赖数据库
rosdep init初始化/etc/ros/rosdep中的源
rosdep keys检查package的依赖是否满足
rosdep update更新本地的rosdep数据库

一个较常使用的命令是rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y,用于安装工作空间中src路径下所有package的依赖项(由pacakge.xml文件指定)。

参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6018.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注