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

news2025/1/23 3:08:32

目录

说明:

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.coloradmin.cn/o/1268506.html

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

相关文章

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护: 32为程序没有canary没有PIE,应该是简单的栈溢出。我们照着这个思路去找溢出点在哪,运行下程序看看什么情况: 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事: 主…

华为OD机试 - 园区参观路径(Java JS Python C)

题目描述 园区某部门举办了Family Day,邀请员工及其家属参加; 将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角; 家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条不同的参观路径。 输入描述 第一行为园区的长和宽; 后…

简化企业调查:掌握企业基本信息API的实用技巧

引言 在当今数字化的商业环境中,企业的成功往往取决于对关键信息的迅速获取和准确分析。为了简化企业调查过程,许多组织已经开始采用先进的技术工具,其中企业基本信息API成为了一项强大而实用的资源。 如何使用企业基本信息API 查询方式灵…

Go语言实现大模型分词器tokenizer

文章目录 前言核心结构体定义构造函数文本初始处理组词构建词组索引训练数据编码解码打印状态信息运行效果总结 前言 大模型的tokenizer用于将原始文本输入转化为模型可处理的输入形式。tokenizer将文本分割成单词、子词或字符,并将其编码为数字表示。大模型的toke…

Windows 10和11的一个专用的设置菜单,让清理空间变得方便快捷

需要在Windows电脑上释放一些磁盘空间吗?Windows 10和Windows 11都提供了一个专用的设置菜单,使过程更容易。从该菜单中,你可以查看设备上使用了多少空间以及内容类型。 Windows中的“存储”设置还允许你快速清除空间,并启用“存储感知”自动删除临时文件和回收站项目。这…

uniapp 打包的 IOS打开白屏 uniapp打包页面空白

uniapp的路由跟vue一样,有hash模式和history模式, 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。 如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。…

小间距LED屏幕需要解决的五大芯片问题

随着微距LED电子显示屏的像素间距逐渐缩小,对封装技术提出了更高的要求,LED灯珠和芯片尺寸也需要进一步减小。由此引发的显示性能、产品品质、一次性通过率、亮度和灰度等问题都需要通过先进芯片技术来解决。那么,什么是微距LED显示屏&#x…

【Android知识笔记】架构专题(一)

什么是 MVC 其实我们日常开发中的Activity,Fragment和XML界面就相当于是一个MVC的架构模式,但往往Activity中需要处理绑定UI,用户交互,以及数据处理。 这种开发方式的缺点就是业务量复杂的时候一个Activity过于臃肿。但是页面结构不复杂的情况下使用这种方式就会显得很简…

C++基础 -16- 类的继承

类的继承格式 派生可以通过构造函数给基类的私有成员赋值 #include "iostream"using namespace std;class person {public:person(int a,int b):a(a),b(b){cout << "person-build" << endl;}protected:int a;int b; };class newperson:publi…

面试:说一下深拷贝,浅拷贝,引用拷贝吧;Object类中的clone是哪种呢?

目录 深拷贝、浅拷贝、引用拷贝Object类的clone()方法 深拷贝、浅拷贝、引用拷贝 ● 浅拷贝&#xff1a; 对基本数据类型进行值传递&#xff1b; 对引用类型&#xff0c;复制了一份引用类型的变量 里面存储的内存地址一样 指向的对象也一样。 ● 深拷贝&#xff1a;对基本数据…

轻量封装WebGPU渲染系统示例<39>- emissive和arm纹理支持(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/DynamicShaderBuilding2.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export class DynamicShaderBuildi…

uniapp ios 授权弹窗 uniapp弹出框怎么实现

新版本的信息弹窗组件 可以弹出很多条信息&#xff0c;并单独控制消失时间、点击消失。 用循环来生成很多个弹窗&#xff0c;用this.$refs来传值&#xff0c;并添加数组。 1.布局 2.js 具体流程。需要一个弹窗&#xff0c;基本信息传入组件&#xff0c;处理后添加入数组&am…

Android关于杀掉进程的方案

《风波莫听穿林打叶声》—— 苏轼 〔宋代〕 三月七日&#xff0c;沙湖道中遇雨&#xff0c;雨具先去&#xff0c;同行皆狼狈&#xff0c;余独不觉。已而遂晴&#xff0c;故作此词。 莫听穿林打叶声&#xff0c;何妨吟啸且徐行。 竹杖芒鞋轻胜马&#xff0c;谁怕&#xff1f;一蓑…

“前端已死”?从ChatGPT与低代码平台看未来编程之路

每隔一段时间&#xff0c;“前端已死”的论调就会如潮水般重新涌现&#xff0c;引发行业内外的热议。这种论调背后&#xff0c;除了对于新技术&#xff0c;如ChatGPT、GPT-4对前端开发者影响的担忧&#xff0c;还反映了人们对于技术变革的焦虑。 作为前端开发者&#xff0c;我坚…

华清远见嵌入式学习——C++——作业2

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;class Rect { private:int width;int height;public:void init(int w,int h);void set_w(int w);void set_h(int h);void show(); };void Rect::init(int w,int h) {width w;height h;…

Elk:filebeat 日志收集工具和logstash

Elk:filebeat 日志收集工具和logstash Filebeat是一个轻量级的日志手机工具,所使用的系统资源比logstash部署和启动时使用的资源要小得多 Filebeat可以在非java环境使用&#xff0c;他可以代理logstash在非java环境上收集日志 缺点 Filebeat无法实现数据的过滤,一般是结合l…

修复 MyBatis 中空值引起的 SQL 语法错误

修复 MyBatis 中空值引起的 SQL 语法错误 背景 最近在查看别人的项目代码时&#xff0c;遇到了一个问题&#xff1a;数据库中的数据为空。在调试过程中&#xff0c;发现问题出现在调用 MyBatis 中的方法&#xff1a;listByIds(Collection<? extends Serializable> idL…

90基于matlab的无迹卡尔曼滤波器参数估计的非线性最小二乘优化

基于matlab的无迹卡尔曼滤波器参数估计的非线性最小二乘优化&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 90matlab无迹卡尔曼滤波器参数估计 (xiaohongshu.com)

详解Python中print和return的作用及区别

文章目录 关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 print的作用是输出数据到控制端,就是打印在你能看到的…

【接口技术】实验3:可编程并行接口8255

实验3 可编程并行接口8255实验 一、实验目的 1&#xff1a;了解8255芯片结构及编程方法。 2&#xff1a;了解8255输入/输出实验方法。 3&#xff1a;掌握8255控制键盘及显示电路的基本功能及编程方法。 4&#xff1a;掌握一般键盘和显示电路的工作原理。 二、实验内容 1&…