【古月居《ros入门21讲》学习笔记】07_创建工作空间和功能包

目录

说明:

1. 工作空间(workspace) 结构:

2. 创建工作空间和功能包

创建工作空间

编译工作空间

创建功能包

设置环境变量

3. 注意

同一个工作空间下,不能存在同名的功能包;

不同工作空间下,可以存在同名的功能包。


说明:

1. 本系列学习笔记基于B站:古月居《ROS入门21讲》课程,且使用的Ubuntu与ROS系统版本与      课程完全一致;

虚拟机版本Linux系统版本ROS系统版本
VMware WorkStation Pro 16Ubuntu18.04Melodic


2. 本节是整个笔记的第7节,对应视频课程的第9节,请自行对应学习;

3. 整个系列笔记基本已经完结,但部分章节仍需润色修改 ,后面会陆续发布,请大家持续关注,      创作不易,感谢支持!


1. 工作空间(workspace) 结构:

存放工程开发相关文件的文件夹,包含以下4个主要文件夹:

1. src: 代码空间(Source Space),

用来放置功能包所有源码、配置文件、launch文件等;

2. build: 编译空间(Build Space),

用来放置编译过程中所产生的一些中间文件(二进制文件),基本用不到,不用操作;

3. devel: 开发空间(Development Space),

用来放置开发过程中编译生成的一些可执行文件、库、脚本,所以以后可能会查看里面的一些内容;

4. install:安装空间(Install Space),

通过install命令安装成功的一些东西,最终开发编译生成的可执行文件,都是在Install这个空间里;

(注意:devel 开发空间和 install 安装空间的功能类似,内容有一定程度的重复,install是开发完成后分享给客户使用的结果文件,但在ROS2里,对这一点做了修正,只保留了install 空间)

2. 创建工作空间和功能包

创建工作空间

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

  • -p:创建一个多级目录,若其父目录不存在,则系统会自动创建,而不是报错,比如,mkdir -p /home/a/b/c,如果没有a和b文件夹或者没有b文件夹,系统则会自动创建,并在b文件夹下创建c文件夹。

  • ~:代表用户的home目录。

第(1)步:mkdir -p ~/catkin_ws/src,创建一个工作空间,

第(2)步: cd ~/catkin_ws/src, 切换到创建工作空间的src文件夹下,

第(3)步:catkin_init_workspace, 初始化当前文件夹,将创建的工作空间变成一个具有ROS属性的workspace,

这是一个属性的变化,然后会在catkin_ws/src下产生一个CMakeLists.txt文件,

代表初始化成功。

image-20230302113433524

编译工作空间

cd ~/catkin_ws
catkin_make
catkin_make install

第(1)步:cd ~/catkin_ws, 先切换到catkin_ws功能空间根目录下,

第(2)步:catkin_make , 会在catkin_ws目录下生成,devel开发空间和build编译空间的文件夹,

第(3)步:catkin_make intsall, 产生install安装空间的文件;

  • 注意:第二步catkin_make之后并不会在catkin_ws目录下生成Install安装空间的文件夹,install安装空间的文件夹需要再输入,catkin_make intsall命令

image-20230302125553875

创建功能包

ROS里源码不可以直接放在工作空间下的src文件夹中直接编译,必须要创建功能包,因此功能包是ROS里源码的最小单元,

存放路径:home/catkin_ws/src

cd ~/catkin_ws/src
catkin_create_pkg package_name 依赖1 依赖2 依赖3
cd ~/catkin_ws
catkin_make

示例:

第(1)步:cd ~/catkin_ws/src, 先切换工作路径到catkin_ws/src目录下,

第(2)步:catkin_create_pkg test_pkg roscpp rospy std_msgs, 创建catkin_ws工作空间下的功能包,

创建功能包命令说明: rospy: 调用python的依赖库,

roscpp: 调用c++的依赖库

std_msgs: 调用ros定义的一些标准的消息结构的依赖

根据自己创建的功能包需要的用到哪些库,后面就跟哪些依赖,且数量不止可以调用3个,

顺序不分先后,

第(3)步:cd ~/catkin_ws, 再切换到catkin_ws功能空间根目录下,

第(4)步:catkin_make, 编译功能包

image-20230522141952948

打开我们创建的test_pkg功能包文件夹如下:

image-20230522142450898

src: 放置功能包源码

include: 放置头文件,如c++里面的.h头文件

CMakeLists.txtpackage.xml 是每个功能包文件夹中必须存在的两个文件,有这两个文件的存在才标志着你这个文件夹是功能包文件的属性而不是一个普通的文件夹。

编译功能包后如下:

image-20230522145844014

因为功能包内并没有什么代码,所以也并没有什么编译的效果。

编译完成之后,如果我们要运行我们创建的功能包中的某一个程序的话,

我们还需要去设置一下我们创建的工作空间的环境变量,如下:4

设置环境变量

cd ~/catkin_ws
source devel/setup.bash
echo $ROS_PACKAGE_PATH

第(1)步:cd ~/catkin_ws , 先切换到catkin_ws功能空间根目录下,

第(2)步:source devel/setup.bash, 对我们创建的catkin_ws工作空间进行环境变量设置,

setup.bash文件在home/catkin_ws/devel下,

只有对catkin_ws工作空间进行环境变量设置之后,

ROS系统才能找到我们创建的catkin_ws工作空间及其里面一些对应的功能包

第(3)步:echo $ROS_PACKAGE_PATH

ROS_PACKAGE_PATH 是ROS本身的环境变量,

ROS系统里所有的功能包路径都是通过ROS_PACKAGE_PATH这个环境变量查找的,

所以只有上一步对我们创建的catkin_ws工作空间设置了环境变量之后,

我们创建的catkin_ws工作空间的路径才会加到ROS_PACKAGE_PATH中的PATH中。

image-20230522134500363

3. 注意

同一个工作空间下,不能存在同名的功能包;
不同工作空间下,可以存在同名的功能包。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习程序员必知必会的基础算法(收藏)

近年来学习python的程序员愈来愈多,有的同学选择了python培训机构,也有的人觉得自己天赋好选择了自学不管大家怎么去学习,在学习python基础的过程中,肯定离不开的就是基础算法,今天就为大家介绍几大学习中的基础算法。…

ffmpeg开发 环境配置

ffmpeg开发简图 1 下载ffmpeg开发包 https://ffmpeg.org/download.html 包含三个版本:Static、Shared以及Dev Static --- 包含3个应用程序:ffmpeg.exe , ffplay.exe , ffprobe.exe,体积都很大,相关的DLL已经被编译到exe里面去…

TDA4VM EVM开发板调试笔记

文章目录 1. 前言2. 官网资料导读3. 安装 Linux SDK4. 制作SD 启动卡5. 验证启动1. 前言 TDA4作为一般经典的车规级SOC芯片,基于它的低阶智驾方案目前成为各家智驾方案公司的量产首选,这也使得基于TDA4的开发需求陡增,开发和使用TDA4既要熟悉Linux驱应用开发,还要熟悉传统…

自建CA实战之 《0x02 Nginx 配置 https双向认证》

自建CA实战之 《0x02 Nginx 配置 https双向认证》 上一章节我们已经实现了Nginx上配置https单向认证,主要场景为客户端验证服务端的身份,但是服务端不验证客户端的身份。 本章节我们将实现Nginx上配置https双向认证,主要场景为客户端验证服…

基于Java SSM框架+Vue实现汉服文化平台网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现汉服文化平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将…

在gazebo里搭建一个livox mid360 + 惯导仿真平台测试 FAST-LIO2

在gazebo里搭建一个livox mid360 惯导仿真平台测试 FAST-LIO2 前言立方体平台加入 livox mid360 激光雷达加入IMU模块调整底盘大小 并设计调用接口测试 Fast-Lio2 前言 livox mid360 在官网一直没有货,在gazebo里可以仿真该雷达形式的点云。 但是其只发布雷达的数…

【电源专题】DC/DC电源FB分压电阻设计注意事项

在DC/DC电源中我们不可避免的会遇到FB分压电阻的取值,PCB设计等问题。如下所示随意打开一份同步降压稳压器规格书TPS56320X,规格书中的简化电路原理图就已经存在VFB管脚上的两个分压电阻。 很多工程师朋友们会误认为分压电阻只是简单的将输出电压缩小到参考电压,通过此电压来…

电子学会C/C++编程等级考试2023年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数(2023.3) 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中…

【接口自动化】selenium库也有大用场(获取cookie)

相信有些童鞋在做接口、或者说接口自动化测试的过程中会遇到这样的场景:测试的接口,必须是需要登录后才能发起请求成功的。 那么怎么解决呢? 本着团队协作的精神,我们就去让开发同学开个后门,给你个“万能”值&#x…

AntDB“超融合+流式实时数仓”——颠覆50年未变的数据库内核

流式处理引擎,颠覆50年未变的数据库内核 流式处理的概念 2001年9月11日,美国世贸大楼被袭击,美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司,承担了大量基础支撑软件研发的任务。其中200…

R语言单因素方差分析+差异显著字母法标注+逐行详细解释

R语言单因素方差分析 代码如下 df <- read.csv("data.csv",header TRUE,row.names 1) library(reshape2) df <- melt(df,idc()) names(df) <- c(trt, val) df aov1 <- aov(val~trt,datadf) summary(aov1)library(agricolae) data <- LSD.test(aov…

双指针算法总结

双指针算法分为两类&#xff1a;第一类指向一个序列&#xff08;更多的情况&#xff09;&#xff0c;第二类指向两个序列。 基本的代码框架是&#xff1a; for (i 0, j 0; i < n; i) {while (j < i && check(i, j)) j;// 每道题目的具体逻辑 } 核心思想&…

探索使用Quarkus和MicroProfile 构建Kubernetes原生微服务的秘诀!

Kubernetes Native Microservices with Quarkus and MicroProfile 是一个基于Kubernetes原生微服务的开发框架&#xff0c;它结合了Quarkus和MicroProfile的优点&#xff0c;提供了一个高效、可扩展、易于管理的微服务解决方案。 Quarkus是一个针对Java虚拟机&#xff08;JVM&…

代码demo-内部订单批量投料

为了简化用户操作&#xff0c;开发内部订单批量投料功能 用户可以批量上传&#xff0c;或者选择对应的物料&#xff0c;输入库位和内部订单号后进行过账操作 对用户选择的内部订单做校验&#xff0c;内部订单是否正确 内部订单的公司是否和工厂对应的公司一致等等 下面展示…

[NOIP2016 普及组] 回文日期

枚举好题&#xff0c;直接枚举答案 看看在不在范围内就行了 注意二月份 92200229是合法的~ 82200228也是合法的&#xff01; #include<bits/stdc.h> using namespace std;map<int,int>mp;int main() {mp[1] mp[3] mp[5] mp[7] mp[8] mp[10] mp[12] 31;mp[…

MMdetection3.0 问题

MMdetection3.0 问题 希望各位路过的大佬指教一下&#xff1a; 问题&#xff1a; 1、NWPU-VHR-10有标注的数据一共650张&#xff0c;我将其分为了455张训练集&#xff0c;195张验证集。 2、然后使用MMdetection3.0框架中的Faster-rcnn网络进行训练&#xff0c;设置训练参数b…

微信小程序体验版提交审核,提示接口未配置在app.json文件且无权限

在火狐浏览器 打开微信公众平台 发布小程序 弹窗一闪而过 是因为 放开这里就可以了

selenium元素定位方法之xpath

什么是xpath&#xff1f; XPath是XML的路径语言&#xff0c;通俗一点讲就是通过元素的路径来查找到这个标签元素XPath使用路径表达式在XML文档中进行导航 普通语法 注意&#xff01; 1.xpath中的值用引号引起来时&#xff0c;在代码中要注意区分&#xff0c;内单外双&#xf…

Intellij IDEA 的安装和使用以及配置

IDE有很多种&#xff0c;常见的Eclipse、MyEclipse、Intellij IDEA、JBuilder、NetBeans等。但是这些IDE中目前比较火的是Intellij IDEA&#xff08;以下简称IDEA&#xff09;&#xff0c;被众多Java程序员视为最好用的Java集成开发环境&#xff0c;今天的主题就是IDEA为开发工…

【Qt基础之QPalette实例电子时钟】

# 简介 借助`QLCDNumber`实现电子时钟,可以随意拖拽到桌面任意位置,鼠标右键进行关闭,用于实践`QPalette`类、`QTimer`的使用以及`mousePressEvent`\`mouseMoveEvent`\`mouseDoubleClickEvent`事件处理函数的使用。可在此基础上扩展其他应用,参看Qt帮助手册。 # QPalette …