• ROS1学习笔记:创建工作环境与功能包(ubuntu20.04)


    参考B站古月居ROS入门21讲:创建工作环境与功能包
    基于VMware Ubuntu 20.04 Noetic版本的环境

    一、工作空间介绍

    使用ROS实现机器人开发的主要手段当然是写代码,那么这些代码文件就需要放置到一个固定的空间内,也就是工作空间。

    什么是工作空间(workspace)?
    工作空间(workspace)是一个存放工程开发相关文件的文件夹。Fuerte版本之后的ROS默认使用的是Catkin编译系统,一个典型Catkin编译系统下的工作做空间结构如图所示:
    在这里插入图片描述
    典型的工作空间中一般包含包括以下四个目录空间:

    (1)src:代码空间(Source Space),开发过程中最常用的文件夹用来存储所有ROS功能包的源码文件。其实就是存放功能包和源码
    (2)build:编译空间(Build Space),用来存储工作空间编译过程中产生的缓存信息和中间文件。其实就是存放编译过程中产生的中间文件,平时不用关心的
    (3)devel:开发空间(Development Space),用来放置编译生成的可执行文件。其实就是存编译生成的可执行文件、库和脚本,有时候需要看看
    (4)install:安装空间(Install Space),编译成功后可以使用make install命令将可执行文件安装到该空间中运行该空间中的环境变量脚本即可在终端中运行这些可执行文件。安装空间并不是必需的很多工作空间中可能并没有该文件夹。其实就是文件安装的位置,与上面有所重复,因此ROS2对此做了调整

    二、创建工作空间

    2.1 创建工作空间

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

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src
    catkin_init_workspace
    

    注:“~/”意为当前用户名目录;“-p”意为递归创建目录,即直接创建多级目录。
    src文件夹即代码空间,不能自行用别的名称代替

    第3行catkin_init_workspace意为将当前文件夹变为工作空间,使其拥有工作空间的属性
    我们可以先创建catkin_ws文件夹,然后进入该文件夹继续创建src文件夹
    在这里插入图片描述
    然后再src文件夹下,将当前文件夹变为工作空间:
    在这里插入图片描述
    如果在src文件夹下看到生成的这个txt文件,则说明创建工作环境成功!

    2.2 编译空代码的工作空间

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

    cd ~/catkin_ws
    catkin_make
    

    在这里插入图片描述
    第二行命令为编译命令,将src文件夹下的源码都进行编译
    在这里插入图片描述
    编译过程中在工作空间的根目录里会自动产生builddevel两个文件夹及其中的文件。
    编译完成后在devel文件夹中已经产生几个setup.*sh形式的环境变量设置脚本。
    但是我们发现没有生成install文件夹,我们需要额外输入命令创建:

    catkin_make install
    

    在这里插入图片描述
    结果可以看到生成了install文件夹。
    这样一个空的工作空间创建好了并且空的代码空间编译完成。

    2.3 设置和检查环境变量

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

    source devel/setup.bash
    

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

    echo $ROS_PACKAGE_PATH
    

    如果打印的路径中已经包含当前工作空间的路径,则说明环境变量设置成功,如下图:
    在这里插入图片描述

    在终端中使用source命令设置的环境变量只能在当前终端中生效
    如果希望环境变量在所有终端中有效则需要在终端的配置文件中加入环
    境变量的设置echo "source/WORKSPACE/devel/setup.bash">>~/.bashrc
    请使用工作空间路径代替WORKSPACE

    三、创建功能包

    功能包是放置ROS源码的最小单元。
    在上面我们创建了一个空的工作空间,但是在src文件夹下并没有写东西,因此我们要创建一个功能包来放置自己的源码文件。
    注意同一工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
    ROS不允许在某个功能包中嵌套其他功能包,多个功能包必须平行放置在代码空间中。

    3.1 创建功能包

    ROS中功能包的形式如下:

    my_package/
    	CMakeLists.txt
    	package.xml
    	......
    
    格式:catkin_create_pkg <package_name> [depend1] [depend2] [depend3]...
    
    • :文件夹名字
    • depend:依赖文件,如编译的时候需要用到ROS的其他功能包,比如需要调用python、C++的库,就要指明是rospy、roscpp。还有其他的依赖包,比如std_msgs、geometry_msgs、turtlesim等等。

    在这里我们创建一个test_pkg功能包:

    cd ~/catkin_ws/src
    catkin_create_pkg test_pkg std_msgs rospy roscpp
    

    在这里插入图片描述
    创建成功后,我们进入到该文件夹里:
    在这里插入图片描述
    可以看到上图生成的一些文件夹和文件。

    3.2 编译新的功能包

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

    cd ~/catkin_ws
    catkin_make
    

    在这里插入图片描述

    3.3 设置和检查环境变量

    编译完功能包后,为了运行,我们先设置环境变量,以便系统找到我们的工作空间和功能包。

    source ~/catkin_ws/devel/setup.bash
    

    检查:

    echo $ROS_PACKAGE_PATH
    

    在这里插入图片描述

    四、功能包的两个重要文件

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

    4.1 package.xml

    在这里插入图片描述
    在这里插入图片描述

    4.2 CMakeLists.txt

    在这里插入图片描述

  • 相关阅读:
    高频面试题:谈谈你对 Spring Boot 自动装配机制的理解
    web前端网页设计期末课程大作业:旅游网页主题网站设计——紫色的旅游开发景点网站静态模板(4页)HTML+CSS+JavaScript
    数据结构之队列
    STM32F103 USART1串口使用DMA接收不定长数据和DMA中断发送
    Day44:Pinia和购物车案例准备
    java基于springboot+jsp高校物资采购管理系统maven项目附源码
    Flutter高仿微信-第48篇-群聊-图片
    自动化办公篇之python批量改名
    Java8的 Stream的 peek 和 foreach 方法区别 peek和foreach用法
    上周热点回顾(7.31-8.6)
  • 原文地址:https://blog.csdn.net/weixin_56197703/article/details/126915407