ROS 工作空间及功能包

news2024/11/17 14:46:32

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

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

$ cd ~/catkin_ws/
$ catkin_make

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

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

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

$ source devel/setup.bash

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

$ echo $ROS_PACKAGE_PATH

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

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

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

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

2. 什么是ROS的功能包

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

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

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			# 运行启动文件

创建功能包

ROS中功能包的形式如下:

my_package/
 CMakeLists.txt
 package.xml
 ……

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

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

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

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

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

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

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

cd ~/catkin_ws/src
catkin_create_pkg learning_communication std_msgs rospy roscpp

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

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

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电表采集器采集的是哪些参数?

电表采集器是一种能够远程收集电表数据的设备&#xff0c;通常被用于电能计量和管理。电表采集器能够通过无线通信技术&#xff0c;如GPRS、CDMA、3G、4G、5G等&#xff0c;将电表数据传输到数据中心&#xff0c;以便进行数据分析和处理。 电表采集器采集的参数包括以下几个方面…

naco(替代Eureka)注册中心

Nacos初步学习 Nacos 是一个开源的服务注册和配置中心&#xff0c;它允许您注册、注销和发现服务实例&#xff0c;并提供了配置管理的功能。下面是Nacos的最基础用法&#xff1a; 1. 服务注册和发现&#xff1a; 首先&#xff0c;您需要将您的应用程序或服务注册到Nacos中。…

Android maven could not get http://192.xx

网页流程仓库ip都能访问&#xff0c;android 发包出现如上提示。原来我电脑自身使用了 vpn&#xff0c;导致 红色框内的代理打开了&#xff0c;注释点问题解决。android studio有自身的代理文件&#xff0c;不依赖windows系统的代理配置&#xff0c;即使set http_proxy也是无效…

【深入MaxCompute】人力家:借助Information Schema合理治理费用

简介&#xff1a; 人力家是由阿里钉钉和人力窝共同投资成立&#xff0c;帮助客户进入人力资源数字化&#xff0c;依靠产品技术创新驱动战略的互联网公司。本文将为大家带来MaxCompute与人力家客户案例深度解读。 作者&#xff1a;石玉阳 人力家 高级数据研发工程师 业务简介 …

“益路同行”栏目人物专访 第0010期——中国公益万里行发起人李现

中国善网在本届&#xff08;第十届&#xff09;慈展会上特别推出了《益路同行》采访栏目&#xff0c;《益路同行》栏目旨在寻觅公益之路上同行者的故事&#xff0c;挖掘公益更深层次的内涵&#xff0c;探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

腾讯发布《2023数字经济高质量发展报告》

导读 2018年9月30日&#xff0c;腾讯宣布“扎根消费互联网&#xff0c;拥抱产业互联网”的全新战略&#xff0c;并进行历史上第三次大规模组织变革&#xff0c;成立云与智慧产业事业群&#xff08;简称CSIG&#xff09;&#xff0c;开启ToB领域的深耕。也是在这一年&#xff…

有什么好用的站内搜索SaaS能帮网站实现站内搜索功能?

在当今数字时代&#xff0c;拥有一个用户友好且高效的网站对于企业在线发展至关重要。一个能够极大增强用户体验的关键功能就是网站内部搜索能力。这正是站内搜索SaaS发挥作用的地方。 站内搜索SaaS是指一种基于云的软件解决方案&#xff0c;使网站能够实现内部搜索功能。借助…

设计模式 - 迭代器模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 迭代器模式是一种行为型设计模式&#xff0c;它提供了一种统一的方式来访问集合对象中的元素&#xff0c;而不暴露集合内部的表示方式。简单地说&#xff0c;就是将遍历集合的责任封装到一个单独的对象中&#xff0c;我们可以按…

智能化之路:即时零售的崛起与线下商超的转型

最近两年&#xff0c;线下商超骤然迎来“闭店潮”&#xff0c;集体陷入了经营泥潭&#xff0c;其中包括家乐福和永辉超市&#xff0c;以及步步高等大型传统商超。 今年6月底&#xff0c;家乐福中国关闭了深圳的所有门店&#xff1b;8月底&#xff0c;家乐福关闭了广州的最后一…

设计行业中如何保证图纸设计稿在数据传输中不会泄密

设计行业是一个充满创意和专业的行业&#xff0c;图纸设计稿是设计师的心血和财富&#xff0c;也是和客户和合作伙伴沟通和交流的桥梁。可是&#xff0c;现在互联网技术发展得很快&#xff0c;设计师在传输图纸设计稿的时候&#xff0c;会遇到很多安全问题和挑战&#xff0c;怎…

软件开发项目管理工具盘点:探索多种选择

人们常问&#xff1a;“软件研发项目有专门的项目管理软件吗&#xff1f;”你可能会在早期使用更多Office协助项目研发管理&#xff0c;进而使用通用项目管理软件&#xff0c;在一定程度上解决了项目进度跟进问题.资源分配.合作与沟通存在问题&#xff0c;但最终软件研发项目的…

前端js调试如何复制console.log打印的对象或数组

在使用console.log()打印我们的内容时&#xff0c;时常需要将打印的内容复制粘贴使用&#xff0c;然而控制台打印出来的对象是经过格式化处理且直接选择粘贴会有格式问题&#xff0c;此时我们可以通过控制台的 copy() 方法来进行打印结果的复制&#xff0c;如图所示&#xff1a…

Redis 分布式锁 @Klock 注解详解及使用教程

文章目录 一、作用二、参数三、锁的流程四、SpringBoot 集成1. pom 依赖2. yaml 配置3. 使用方式 五、变量级锁和方法级锁六、常见应用场景1. 页面重复提交2. 定时任务3. 核心业务 七、锁的粒度与锁的时间 一、作用 注解 klock 是基于 Redis 的分布式锁&#xff0c;作用在分布…

数据结构--》解锁数据结构中树与二叉树的奥秘(二)

数据结构中的树与二叉树&#xff0c;是在建立非线性数据结构方面极为重要的两个概念。它们不仅能够模拟出生活中各种实际问题的复杂关系&#xff0c;还常被用于实现搜索、排序、查找等算法&#xff0c;甚至成为一些大型软件和系统中的基础设施。 无论你是初学者还是进阶者&…

PHP会话技术跟踪和记录用户?使用cookie会话你必须掌握

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言会话技术的概述一. Cookie简介二. Cookie基本使用——创建Cookie2.1 创建Cookie演示实例&am…

Zinquin ethyl ester(CAS NO. 181530-09-6),TSQ的类似物

Zinquin ethyl ester&#xff08;CAS NO. 181530-09-6&#xff09;&#xff0c;是广泛使用锌离子荧光探针TSQ的类似物&#xff0c;也是一种细胞渗透性、基于喹诺酮结构的锌离子&#xff08;Zn2&#xff09;荧光探针&#xff0c; 该探针可以用于在细胞中检测和定位锌离子。它具…

软件公司的项目管理软件选择指南

我们经常在项目推进中经常遇到各种各样的问题&#xff0c;最常见的是因团队工作效率低而无法在截止日期之前按时完成工作。但是如果能合理使用项目管理软件&#xff0c;可以有效监控项目进程&#xff0c;提高工作效率&#xff0c;从而保证按时完成任务。那么软件公司适合什么项…

Qt编程-QTableView同时冻结行和列

前言 Qt编程-QTableView同时冻结行和列。如题&#xff0c;先看效果是不是你需要的。网上找到的代码片段要么不全要么不是想要的。如果你只需要需要冻结行或冻结列&#xff0c;请看上篇博客 Qt编程-QTableView冻结行或冻结列或冻结局部单元格 &#xff0c;代码更少一些。 同时…

ansible 调研

参考&#xff1a;自动化运维工具——ansible详解&#xff08;一&#xff09; - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xf…