ROS学习之二:ROS文件系统及软件包

基本概念

软件包(Packages)

包是ROS代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或其他构件

清单(Manifest) 清单是对软件包的描述,它用于定义软件包之间的依赖观关系,并记录有关软件包的信息,如版本、维护者、许可证等

创建软件包

catkin软件包由以下部分组成:

  • 提供软件包元信息且符合catkin规范的package.xml文件
  • catkin版本的CMakeList.txt文件
  • 自己的目录(要求在同一个目录下不能有嵌套的或多个软件包存在)

一个简单的软件包示例为:

my_package/
    CMakeList.txt
    package.xml

开发catkin软件包的推荐方法是使用catkin工作空间,一个简单的工作空间示例为:

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

例如在workspace_folder工作空间文件夹下的名为my_package的软件包层次结构如下:

创建软件包的具体流程为:

  • 为软件包创建目录(假设当前路路径为~/Documents)
mkdir -p catkin_ws/src

注:上面创建的catkin_ws是一个ROS工作空间,在“ROS学习之一:ROS安装”的第5部分已经介绍了ROS工作空间的创建方法,一个ROS工作空间中可以包含多个软件包

  • 在创建的目录(~/Documents/catkin_ws/src)中创建软件包,该软件包依赖于std_msgs、roscpp及rospy
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

上述命令创建了一个名为beginner_turorials的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经部分填写了执行catkin_create_pkg命令时提供的信息

  •  构建catkin工作区并生效配置文件

在catkin_ws(工作空间)目录下执行下述命令(注意,创建软件包在工作空间文件夹的src文件夹中,而执行catkin_make命令在工作空间文件夹中)

catkin_make

待工作空间构建完成后,将工作空间添加到ROS环境中,即对工作空间中devel文件夹内生成的配置文件setup.bash执行source命令:

source ~/Documets/catkin_ws/devel/setup.bash

此时使用rospack find命令可以查找到创建的软件包所在路径

通过rospack depends1命令可以查询软件包的一级依赖包

软件包中还包含自动生成的package.xml文件,可以对文件中的注释和未使用的标签进行清理,使之更为简洁

注:采用以上方法添加工作空间到ROS环境,将在系统重启后实效,可将上述命令加入到文件~/.bashrc末尾,则每次系统运行前自动添加工作空间到ROS环境中(类似于安装ROS时添加环境变量)

构建软件包

在catkin工作空间文件夹(此处为~/Documets/catkin_ws)中,可以使用catkin_make命令可以对软件包进行编译

在catkin工作空间文件夹中,build目录是构建空间的默认位置,同时camke和make也是在此被调用来配置和构建软件包;devel目录是开发空间的默认位置,在安装软件包之前,在此可以存放可执行文件和库

基础命令

rospack find [package_name]

返回软件包的所在路径
rospack depends1 [package_name] 查询软件包的一级依赖包
roscd [locationname] 直接切换目录到某个软件包或软件包集当中
rosls [locationname] 直接按软件包的名称执行ls命令(无需绝对路径)
catkin_create_pkg <package_name> [depend1] [depend2] [depend3] 创建软件包及指出其依赖的软件包
catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

编译软件包

 

posted @ 2021-04-29 10:57  溪嘉嘉  阅读(554)  评论(0编辑  收藏  举报