【古月居《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.mzph.cn/news/179897.shtml

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

相关文章

达索系统3DEXPERIENCE WORKS 2024 结构仿真功能增强

simulia结构仿真是什么? 不仅能对结构进行力学、热学、声学等多学科计算,辅助于设计方案的优化;还能采用数字化技术模拟产品性能,大幅节约试验和样机迭代成本。达索系统3DEXPERIENCE WORKS 2024 结构仿真为企业提供随需应变、精准…

centos7-docker安装与使用

文章目录 一、docker简介1.1docker应用场景1.2docker的优点1.2.1快速,一致地交付应用程序1.2.2响应式部署和扩展1.2.3在同一硬件上运行更多工作负载 1.2docker的架构 二、docker的安装2.1新系统的环境搭建2.1.1更换yum源 2.2安装docker与卸载2.2.1yum安装docker2.2.…

看懂YOLOv7混淆矩阵的含义,正确计算召回率、精确率、误检率、漏检率

文章目录 1、准确率、精确率、召回率、误报率、漏报率概念及公式1.1 准确率 Accuracy1.2 精确率 Precision1.3 召回率 Recall1.4 F1-Score1.5 误检率 false rate1.6 漏检率 miss rate 2、YOLOv7混淆矩阵分析 1、准确率、精确率、召回率、误报率、漏报率概念及公式 重点参考博文…

.net7.0中把exe和dll分开打包

之前写过 C#把dll分别放在指定的文件夹_wpf core dll 放文件夹-CSDN博客 C#把dll打包到exe_c# 打包exe_故里2130的博客-CSDN博客 这都是老技术了,可以进行参考。 现在的.netcore系列有单独支持把exe和dll分开打包的功能了,当然也支持.net7.0和.net8.…

Phpstudy v8.0/8.1小皮升级Apache至最新,同时升级openssl版本httpd-2.4.58 apache 2.4.58

1.apache官网下载最新版本的apache 2.4.58 2.phpstudy下apache停止运行,把原来的Apache文件夹备份一份 复制图中的文件替换apache目录下文件 3.phpstudy中开启apache

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层(或图层的矢量蒙版)上的多个形状还是同一路径层上多个路径,只要对应“路径”面板的一个路径层,可以将这些路径称为该路径层的“子路径”,也称为“组件”。 当一个路径层上有两个以上的子路径时&…

uniapp微信小程序中阻止事件冒泡

开发场景:列表中展示地块的数据信息,用户可以点击列表进入地块的详情界面,也可以点击列表中的星星按钮进行收藏 遇到的问题:每次点击星星的时候,都会触发父级的点击事件,从而进入到详情界面 原本的代码&am…

docker镜像管理命令

镜像管理命令 docker build : 命令用于使用 Dockerfile 创建镜像 docker build [OPTIONS] PATH | URL | - OPTIONS说明: --add-host :向hosts文件中添加自定义 host:ip 映射 --build-arg[] :设置镜像创建时的变量; --cache-from :指定镜像用作当前构建…

STK Components 二次开发- 卫星地面站

前期卫星地面站创建已经说过,本次说一下卫星和地面站可见性时卫星名称和轨迹线变色问题。 1.创建卫星 // Get the current TLE for the given satellite identifier. var tleList TwoLineElementSetHelper.GetTles(m_satelliteIdentifier, JulianDate.Now);// Us…

MFC容器中使用标准库容器,内存违规

问题描述 CArray中元素不管是直接或间接使用标准库容器&#xff0c;会引发内存违规。与CArray内部实现有关。测试代码如下&#xff1a; struct tagData {std::vector<int> m_Values; }; CArray<tagData, tagData> mIntVecArray; {tagData mData;mData.m_Values.p…

类和对象——(2)类

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 只虽然夜晚很长&#xff0c;但天…

Spark_Spark高阶特性

wscg filter导致断链 Codegen 向量化 simdjson Orc Parquet 支持批量读取 spark本身对parquet支持比较好&#xff0c;因为parquet

“PredictingChildrenHeight“ app Tech Support(URL)

Using our app, we can predict a childs height through formulas. Because there are many factors that affect a childs height, it is for reference only. ​​​​​​​ If you have any questions, you can either leave a message or send the questions to our em…

msng病毒分析

这是一个非常古老的文件夹病毒&#xff0c;使用XP系统的文件夹图标&#xff0c;采用VB语言开发&#xff0c;使用了一种自定义的壳来保护&#xff0c;会打开网址http://www.OpenClose.ir,通过软盘、U盘和共享目录进行传播&#xff0c;会在U盘所有的目录下生成自身的副本&#xf…

Linux常用命令----shutdown命令

文章目录 命令概述参数解释使用示例及解释 命令概述 shutdown 命令用于安全地关闭或重启 Linux 系统。它允许管理员指定一个时间点执行操作&#xff0c;并可发送警告信息给所有登录的用户。 参数解释 时间参数 ([时间]): now: 立即执行关闭或重启操作。m: 在 m 分钟后执行操作…

Android控件全解手册 - 任意View缩放平移工具-实现思路和讲解

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

数字阅读用户规模持续增长 5.3亿人享受数字化阅读便利

近日,鲁迅长孙周令飞在接受采访时表示,自己“现在90%的时间刷视频,10%的时间看书”,引发网友热议。不少网友表示,鲁迅的孙子都花90%的时间刷视频,难怪现在没人看书了,其实这并不奇怪,也并不表明没人看书,而是读屏与读书并重的时代,纸质阅读与数字阅读共同构成了日常的阅读模式。…

webpack具体实现--未完

1、前端模块打包工具webpack webpack 是 Webpack 的核心模块&#xff0c;webpack-cli 是 Webpack 的 CLI 程序&#xff0c;用来在命令行中调用 Webpack。webpack-cli 所提供的 CLI 程序就会出现在 node_modules/.bin 目录当中&#xff0c;我们可以通过 npx 快速找到 CLI 并运行…

web:NewsCenter

题目 打开页面显示如下 页面有个输入框&#xff0c;猜测是sql注入&#xff0c;即search为注入参数点&#xff0c;先尝试一下 返回空白显示错误 正常显示如下 是因为单引号与服务端代码中的’形成闭合&#xff0c;输入的字符串hello包裹&#xff0c;服务端代码后面多出来一个‘导…

Linux僵死进程及文件操作

1.僵死进程(僵尸进程)&#xff1a; 1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进…