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

2023-05-16

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

文章目录

  • 一、工作空间介绍
  • 二、创建工作空间
    • 2.1 创建工作空间
    • 2.2 编译空代码的工作空间
    • 2.3 设置和检查环境变量
  • 三、创建功能包
    • 3.1 创建功能包
    • 3.2 编译新的功能包
    • 3.3 设置和检查环境变量
  • 四、功能包的两个重要文件
    • 4.1 package.xml
    • 4.2 CMakeLists.txt

一、工作空间介绍

使用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]...
  • <package_name>:文件夹名字
  • 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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS1学习笔记:创建工作环境与功能包(ubuntu20.04) 的相关文章

随机推荐

  • npm 安装Element组件发生报错

    npm 安装Element组件发生报错 npm安装Element插件 打开cmd输入 npm i element ui S 提示 npm WARN deprecated core js 64 2 6 12 core js 64 lt 3 2
  • 酒店管理系统-需求分析报告

    目录 1 引言 1 1编制的目的 1 2术语定义 1 3参考资料 1 4相关文档 2 概述 2 1项目的描述 2 2项目的功能 2 3用户特点 3 具体需求 3 1业务需求 3 1 1主要业务 3 1 2未来增长预测 3 2用户需求 3 3
  • 酒店管理系统-概要设计报告

    目录 1 引言 1 1编制的目的 1 2项目背景 1 3术语定义 1 4参考资料 1 5相关文档 2 总体设计 2 1项目的描述 2 2项目的功能 2 3概念设计和处理流程 2 4系统总体结构设计 2 5系统各功能模块详细说明 2 5 1住
  • 解决 Cannot find module‘[object Object]‘报错问题

    报错信息 xff1a 不可以找到一个module 模块 js中的模块大致与require挂钩 xff0c 可以查看是否有地方错误引用了文件或错误使用了require 修改后即可解决问题
  • Jmeter性能测试(3)---SOAP/XML-RPC Request

    jmeter xff08 三 xff09 SOAP XML RPC Request 项目背景 xff1a 公司的微信端H5界面新开发了会员注册功能 xff0c 需要对其进行压力测试 项目目标 xff1a 需要承受每分钟最少6000的压力 一
  • Pycharm 之Scipy聚类色彩

    一 利用第三方库Scipy聚类 1 可以在jupyter notebook里先尝试一下scipy的功能 聚类的思想为初始先确定均值 xff0c 分类 xff0c 其次计算每组的平均值 xff0c 再次进行分类 xff0c 反复进行使得结果更
  • TM4C123系列(一)————GPIO

    电赛准备搞飞机 xff0c 特地学了下TM4 xff0c 准备用TM4搞飞控 一 实验介绍 点亮TM4C123板载LED 二 原理图 三 所需函数 1 SysCtlClockSet uint32 t ui32Config 参数 xff1a
  • TM4C123系列(三)————PWM输出

    一 实验介绍 使用PWM控制板载LED绿灯与蓝灯交替呼吸闪烁 二 PWM介绍 TM4C123有两个PWM模块 xff0c 每个模块有四个发生器和一个控制模块 xff0c 每个发生器可以产生两路PWM输出 xff0c 一共可以输出16路PWM
  • STM32与K210串口通信的解码问题(基于正点原子源码)

    这次电赛做的声源定位 xff0c 用的麦克风阵列加k210采集声音 xff0c k210需要将数据传送stm32 xff0c 在这里涉及到一个解码问题 xff0c 这个解码是我在之前用stm32与其他设备串口通信中从来没有遇到过的 xff0
  • 【数据结构与算法】数据结构

    数据结构 1 基本概念和术语2 逻辑结构与物理结构3 抽象数据类型 1 基本概念和术语 数据 xff1a 是描述客观事物的符号 xff0c 是计算机中可以操作的对象 xff0c 是能被计算机识别 xff0c 并输入给计算机处理的符号集合 数
  • requests库在爬虫中最常用方法简析

    requests 前言一 安装二 使用方法1 引入库2 发起请求3 获取数据4 其他 三 简单示例总结 前言 requests是基于urlib3的用于发起http请求的python第三方库 xff0c 使用方便 xff0c 响应快速 一 安
  • 爬取英语六级高频词

    文章目录 任务一 指定url二 发起请求并获取响应数据三 对响应数据进行数据解析四 持久化存储总结 任务 将网站中所有英语六级高频词以及翻译获取 xff0c 然后进行存储 一 指定url 网站中单词被分开存放在1 7页中 第1页的url x
  • 基于tkinter的第一个GUI小项目:背英语六级单词软件

    文章目录 任务1 引入库2 读入数据3 打开窗口4 初始化5 放置标签和按钮6 按钮事件7 演示 任务 基于爬取到的英语六级高频词 xff0c 利用python中的tkinter做出一个能起到考察词汇掌握情况作用的GUI 1 引入库 spa
  • Linux 6.1/6.2发布新补丁:缓解AMD处理器fTPM间歇性卡顿问题

    导读早些时候 xff0c AMD承认 xff0c 在Linux系统中开启AMD锐龙处理器的fTPM xff0c 将可能导致系统出现间歇性的卡顿 死机等情况 据悉 xff0c 该Bug在Linux 6 1内核中表现得最为明显 xff0c 这是
  • RHCE. Stratis 管理分层存储

    通过Stratis xff0c 便捷的使用精简配置 xff08 thin provisioning xff09 xff0c 快照 xff08 snapshots xff09 和基于池 xff08 pool based xff09 的管理和监
  • Jmeter性能测试(5)--JDBC Request

    jmeter xff08 五 xff09 JDBC Request jmeter中取样器 xff08 Sampler xff09 是与服务器进行交互的单元 一个取样器通常进行三部分的工作 xff1a 向服务器发送请求 xff0c 记录服务器
  • jQuery获取或设置元素的属性值prop/attr

    获取元素的属性值 固有属性 39 div prop color 自定义属性 39 div attr index html代码 lt a href 61 34 www baidu com 34 title 61 34 百度 34 gt 百度
  • Aop小案例

    AOP小案例 AOP Aspect Oriented Programming 面向切面编程 00P Object Oriented Programming 面向对象编程 xff0c 用对象化的思想来完成程序 AOP是对0OP的一个补充 xf
  • 详细介绍在ubuntu20.04如何安装ROS系统,附常见错误的解决办法

    为保证在安装的过程中配置无误 xff0c 建议先打开软件与更新的界面 xff0c 检查框出的选项是否打上了 检查完成后 xff0c 就可以开始安装啦 xff01 1 添加ROS软件源 将以下两个命令任意选择一个复制到ubuntu的终端执行
  • ROS1学习笔记:创建工作环境与功能包(ubuntu20.04)

    参考B站古月居ROS入门21讲 xff1a 创建工作环境与功能包 基于VMware Ubuntu 20 04 Noetic版本的环境 文章目录 一 工作空间介绍二 创建工作空间2 1 创建工作空间2 2 编译空代码的工作空间2 3 设置和检