【ROS第一讲】一、创建工作空间

【ROS第一讲】一、创建工作空间

  • 一、工作空间
    • 1.src:
    • 2.build:
    • 3.devel:
    • 4.install:
  • 二、创建工作空间
    • 1.工作空间的编译
    • 2.配置环境变量:
  • 三、创建功能包

一、工作空间

1.src:

放置所有功能包源码的空间

2.build:

所有在编译过程中产生的中间文件(使用的较少)

3.devel:

存放的所有编译完的可执行文件,环境变量的配置脚本(常用)

4.install:

和devel有点重复,存放的都是编译完成的可执行文件,ros2中把install和devel合并为同一个文件夹了.

二、创建工作空间

1.工作空间的编译

依赖于catkin_make工具,他的底层也是基于cmake的,只不过是基于cmake做了一点封装。
新建的工作空间内进行编译,并不会编译任何的代码(因为还没有写代码),只是会生成一些固定的文件:
在这里插入图片描述

2.配置环境变量:

配置ROS功能包的路径,使得ROS能够找到相应的环境包在什么位置。
可以用source devel/setup.bash这句来配置环境变量。在当前中断下,输入该指令,就可以告诉ros系统相应的功能包在改catkin_ws工作空间中。
但是该指令仅在当前终端生效,另外开辟一个终端的时候就会失效。
所以推荐把该命令放在终端的配置文件中即可不用每次打开都运行一遍这个命令,配置文件的位置是在home的根目录下,是一个名为.bashrc的文件脚本。
运用以下命令:vi
打开该脚本,在最后一行增加以下命令(即环境变量,功能包的路径名称): source ~/catkin_ws/devel/setup.bash
保存之后,运行命令:source -/.bashrc即可让刚才的配置在终端生效。

  • 可以用echo命令来打印出当前ros系统中的环境变量:echo $ROS_PACKAGE_PATH

在这里插入图片描述
可以看到当前有两个环境变量路径,一个是刚刚添加的,一个是安装ros系统之后添加的,终端要寻找ros相应的命令方法或者文件需要到第二个路径去找,因为第二个路径是ros系统安装的位置。

三、创建功能包

功能包中可以具体的写相关的代码,也要有各种包的依赖才行。创建功能包的时候可以写出这些具体的依赖包。
如下图所示,出现相应的反馈即代表该功能包创建完成。
在这里插入图片描述

可以看到在src目录下已经有了刚才创建的功能包:
在这里插入图片描述
点击进去之后可以看到已经初始化了该功能包:
在这里插入图片描述
这些都是默认会帮我们生成好的文件。CMakeLists文件和package文件这两个是很重要的。
CMakeLists文件会放置该功能包的一些编译选项。
package会放置描述功能包的一些具体信息,比如版本号,该功能包具体依赖哪些其他的功能包等等。
然后可以回到该工作空间的根目录,重新编译该工作空间,就可以看到编译反馈的信息已经找到了该包。
在这里插入图片描述

同一工作空间下,不可以有同名的功能包, 不同工作空间下可以有同名的功能包。
但是如果真的在不同工作空间下放着同名的功能包,ros 在运行某个功能包的时候,同名功能包运行的顺序是什么?这就要用到ros的overlaying机制了。即工作空间的覆盖。
可以用env命令来查找该系统中所有的环境变量。用env|grep ros来查找所有与ros相关的环境变量。
在这里插入图片描述
其中:ROS_PACKAGE_PATH=/home/geroge/catkin_ws/src:/opt/ros/melodic/share显示的就是ros在查找功能包的时候会去查找的两个路径。ros要查找功能包的时候会从这两个路径中依次开始查找,比如刚才建立的learning_ros功能包,如果他在第一个路径home/geroge/catkin_ws/src里面找到了这个功能包,就可以结束查找,运行该功能包中的相应节点了。
工作空间的路径依次在ROS PACKAGE PATH环境变量中记录
新设置的路径在ROS PACKAGE PATH中会自动放置在最前端
运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
如果不存在,就顺序向后查找其他工作空间

【例】
先安装一个roscpp-turtorial包,然后我们看一下他怎么找到这个包:

sudo apt-get install ros-melodic-roscpp-tutorials

然后我们开始找这个包:

 rospack find roscpp_tutorials 

在这里插入图片描述
可以看到他已经在第二个路径中找到了该功能包。

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

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

相关文章

vue中tab隐藏display:none(v-show无效,v-if有效)

目录 背景 原因:display: table-cell>display:none 解决: 方法A.获取元素设置display(适用于 简单场景) 方法B.自定义tabs​​​​​​​ (适用于 复杂场景) 背景 内联样式(style“ ”) /this.$…

redis群集(主从复制)

---------------------- Redis 主从复制 ---------------------------------------- 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的&#xf…

Docker 如何助您成为数据科学家

一、说明 在过去的 5 年里,我听到了很多关于 docker 容器的嗡嗡声。似乎我所有的软件工程朋友都在使用它们来开发应用程序。我想弄清楚这项技术如何使我更有效率,但我发现网上的教程要么太详细:阐明我作为数据科学家永远不会使用的功能&#…

5.定时器-间歇函数

网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发 例如:网页中的倒计时 ●要实现这种需求,需要定时器函数 5.1开启定时器 语法 setInterval(函数,间隔时间)作用:每隔一段时间调用这…

excel要如何自动累加某个单元格上方的所有单元格?

输入公式 SUM(INDIRECT("A1:A"&ROW()-1)) 运行实例如下图 注意图中b4,和b5单元格都输入相同的公式。 此方法可以避免写vba,以前此类问题的解决都是通过vba代码进行处理 对函数进行解析 主要使用了 INDIRECT() 2、公式说明:…

Windows实现端口转发(附配置过程图文详解)

文章目录 1. 前言2. 命令提示符3. 防火墙4. netsh 命令4.1 查看已有的转发规则4.2 新增转发规则4.3 删除转发规则 5. 图解汇总6. 欢迎纠正~ 1. 前言 利用Windows端口转发,实现本地设备 ⬅➡ 公网主机 ⬅➡ 远端服务器 2. 命令提示符 以管理员身份打开“命令提示…

成本中心修改或者创建保存时增强的实现

成本中心修改或者创建保存时增强 用户出口程序为:EXIT_SAPLKMA1_003。 可以通过SMOD 或者 CMOD来添加增强代码。 CMOD->COOMKS02 ->EXIT_SAPLKMA1_003 按公司要求,写了段代码检查 创建利成本中心时,业务范围要规范输入。 data PRCTR…

2023年 React 最佳学习路线

CSS CSS JavaScript JavaScript TypeScript 目前没有找到比其他文档好很多的文档地址 可以先看官网 React 新版 React 官方文档无敌 React React-router-dom V5 V6 Webpack webpack Antd antd

Docker 镜像构建 搭建分布式LNMP论坛 实践

地址规划 nginx 172.18.0.10 mysql 172.18.0.20 php 172.18.0.30 宿主机准备 拉取镜像,下面以此镜像为基础 docker pull centos:7 创建自定义网段以便指定 IP 不变动 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.na…

百题千解计划【CSDN每日一练】Ctrl+X,Ctrl+V(附解析+多种实现方法:Python、Java、C、C++、go、C#、JavaScript)

你要变成什么样子,全看你自己的选择。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工智能领域优质创作者🏆 📝…

直播带货app开发开发流程分析

随着小视频管理体系愈来愈变成人们的生活中的一部分,也随之短视频卖货逐步形成岗位内主流的转现方式,将短视频平台生产制造变成短视频带货体系计划愈来愈多,那样,把小视频管理体系开发设计变成短视频带货体系必须两步?…

红黑树深入剖析【C++】

目录 一、红黑树概念 二、红黑树节点结构设计 三、插入操作 处理情况1 处理情况2 处理情况3 插入总结: 四、插入操作源码 五、红黑树验证 一、红黑树概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色&#xff0…

入门Linux基本指令(2)

这篇文章主要提供一些对文件操作的Linux基本指令&#xff0c;希望对大家有所帮助&#xff0c;三连支持&#xff01; 目录 cp指令(复制) mv指令(剪切) nano指令 cat指令(打印文件内容) > 输出重定向 >> 追加重定向 < 输入重定向 more指令 less指令(推荐) …

AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明

部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好&#xff0c;我是风雨无阻。众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;需要详细了解StableDiffusion的朋友&#xff0c;可查看我之前的这篇文章&#xff1a; 最…

读《全球科技通史》总结——历史总在重演,科技永远向前

今天和大家分享一下吴军老师的《全球科技通史》。大部分人谈到历史的时候&#xff0c;关注的是国家的兴衰、王朝的更替&#xff0c;往往忽视了科技的力量。“文津图书奖”得主吴军博士&#xff0c;从科技视角串联历史&#xff0c;首次以能量和信息两条主线&#xff0c;系统阐述…

全方位支持图文和音视频、100+增强功能,Facebook开源数据增强库AugLy

Facebook 近日开源了数据增强库 AugLy&#xff0c;包含四个子库&#xff0c;每个子库对应不同的模态&#xff0c;每个库遵循相同的接口。支持四种模态&#xff1a;文本、图像、音频和视频。 最近&#xff0c;Facebook 开源了一个新的 Python 库——AugLy&#xff0c;该库旨在帮…

git的clone,上传,mirror与upstream同步

文章目录 clone日志信息的同步子树合并同步 clone clone他人项目&#xff0c;git到自己的项目 rm -rf .git .git存放原始项目的日志信息&#xff0c;这里需要添加自己的日志信息&#xff0c;需要删除重写。也可手动删除 git init 初始化文件&#xff0c;依据本地日志信息生产.…

【RabbitMQ】之高可用集群搭建

目录 一、RabbitMQ 集群原理 1、默认集群原理2、镜像集群原理3、负载均衡方案 二、RabbitMQ 高可用集群搭建 1、RabbitMQ 集群搭建2、配置镜像队列3、HAProxy 环境搭建4、Keepalived 环境搭建 一、RabbitMQ 集群简介 1、默认集群原理 3-1、RabbitMQ 集群简介 单台 RabbitM…

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

一、TableTreeLevel组件 <template><div classmain><div class"btns"><el-button type"primary" click"expandLevel(1)">展开一级</el-button><el-button type"primary" click"expandLevel(2…

JVM-提问纯享版

一、内存区域 介绍下 Java 内存区域&#xff08;运行时数据区&#xff09;内存分配方式内存分配并发问题对象的访问定位的两种方式&#xff08;句柄和直接指针两种方式&#xff09; 二、垃圾回收 如何判断对象是否死亡&#xff08;两种方法&#xff09;。简单的介绍一下强引…