• ROS 工作空间及功能包


    ROS工作空间(workspace)是一个存放工程开发相关文件的文件夹。

    1. 什么是ROS的工作空间

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

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

    工作空间结构

    Fuerte版本之后的ROS默认使用的是Catkin编译系统,一个典型Catkin编译系统下的工作空间结构如图所示。
    在这里插入图片描述

    典型的工作空间中一般包括以下四个目录空间。

    1)src:代码空间(Source Space),开发过程中最常用的文件夹,用来存储所有ROS功能包的源码文件。

    2)build:编译空间(Build Space),用来存储工作空间编译过程中产生的缓存信息和中间文件。

    3)devel:开发空间(Development Space),用来放置编译生成的可执行文件。

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

    创建工作空间

    创建工作空间的命令比较简单,首先使用系统命令创建工作空间目录,然后运行ROS的工作空间初始化命令即可完成创建过程:

    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
    
    • 1
    • 2
    • 3

    创建完成后,可以在工作空间的根目录下使用catkin_make命令编译整个工作空间:

    $ cd ~/catkin_ws/
    $ catkin_make
    
    • 1
    • 2

    编译过程中,在工作空间的根目录里会自动产生build和devel两个文件夹及其中的文件。

    编译完成后,在devel文件夹中已经产生几个setup.*sh形式的环境变量设置脚本。

    使用source命令运行这些脚本文件,则工作空间中的环境变量可以生效。

    $ source devel/setup.bash
    
    • 1

    为了确保环境变量已经生效,可以使用如下命令进行检查:

    $ echo $ROS_PACKAGE_PATH
    
    • 1

    如果打印的路径中已经包含当前工作空间的路径,则说明环境变量设置成功,如下图所示:

    在这里插入图片描述
    在终端中使用source命令设置的环境变量只能在当前终端中生效,如果希望环境变量在所有终端中有效,则需要在终端的配置文件中加入环境变量的设置:

    echo"source/WORKSPACE/devel/setup.bash">>~/.bashrc
    
    • 1

    ,请使用工作空间路径代替WORKSPACE。

    2. 什么是ROS的功能包

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

    一个功能包的典型文件结构如下:

    config:功能包的配置文件,用户创建。
    include:需要用到的头文件。
    scripts:可以直接运行的Python脚本。
    src:需要编译的C++代码。
    launch:所有启动文件。
    msg:自定义的消息类型。
    srv:自定义的服务类型。
    action:自定义的动作指令。
    CMakeLists.txt:Catkin编译器编译功能包的规则。
    package.xml: 功能包清单
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

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

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

    创建功能包

    ROS中功能包的形式如下:

    my_package/
     CMakeLists.txt
     package.xml
     ……
    
    • 1
    • 2
    • 3
    • 4

    package.xml文件提供了功能包的元信息,也就是描述功能包属性的信息。
    CMakeLists.txt文件记录了功能包的编译规则

    ROS不允许在某个功能包中嵌套其他功能包,多个功能包必须平行放置在代码空间中

    ROS提供直接创建功能包的命令catkin_create_pkg,该命令的使用方法如下:

    catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
    
    • 1

    在运行catkin_create_pkg命令时,用户需要输入功能包的名称(package_name)和所依赖的其 他 功 能 包 名 称 (depend1、 depend2、 depend3)。

    例 如, 我 们 需 要 创 建 一 个learning_communication功能包,该功能包依赖于std_msgs、roscpp、rospy等功能包。

    首先进入代码空间,使用catkin_create_pkg命令创建功能包:

    cd ~/catkin_ws/src
    
    • 1
    catkin_create_pkg learning_communication std_msgs rospy roscpp
    
    • 1

    创建完成后,代码空间src中会生成一个learning_communication功能包,其中已经包含
    package.xml和CMakeLists.txt文件。

    然后回到工作空间的根目录下进行编译,并且设置环境变量:

    cd ~/catkin_ws
    catkin_make
    source ~/catkin_ws/devel/setup.bash
    
    • 1
    • 2
    • 3

    以上便是创建一个功能包的基本流程。 在同一个工作空间下,不允许存在同名功能包,否则在编译时会报错。

    那么是不是同名功能包就一定不能在ROS中存在?
    如果我们想要覆盖或重写系统已有的功能包,又该怎样做?

  • 相关阅读:
    怎么压缩word文档的大小?
    Docker安装部署Nexus3作为内网镜像代理缓存容器镜像
    Java并发——锁()
    DAIDAI.IO-让DAO重新定义 Web3 NFT平台
    MyBatis逆向工程
    Docker 离线安装(2022/11/08)
    【直扩通信】直扩通信系统信号捕获性能分析附matlab代码
    关于OpenCV打开摄像头默认分辨率是640*480的问题
    PHP各种老版本下载方式
    人工神经网络原理及应用,深度神经网络应用实例
  • 原文地址:https://blog.csdn.net/hai411741962/article/details/133752160