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

news2024/11/17 0:06:56

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

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

相关文章

Unity XML3——XML序列化

一、XML 序列化 ​ 序列化:把对象转化为可传输的字节序列过程称为序列化,就是把想要存储的内容转换为字节序列用于存储或传递 ​ 反序列化:把字节序列还原为对象的过程称为反序列化,就是把存储或收到的字节序列信息解析读取出来…

再见 MyBatis-Plus !

一、Mybatis-Flex是什么? Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时…

odoo16-domain

odoo16-domain 参考:https://blog.csdn.net/u013250491/article/details/86699928 domain的使用注意以下几点: 是在py文件中使用还是在xml中使用,py文件是在后端使用可以利用orm, 而xml是在前端渲染,使用的是js,没有办法使用orm如果在xml中使用,domain的格式建议为[[]], 二维…

LeetCode32.Longest-Valid-Parentheses<最长有效括号>

题目: 思路: 遍历括号.遇到右括号然后前一个是左括号 那就res2,然后重定位 i 的值 并且长度减少2; 但是问题在于无法判断最长的括号.只能得到string内的全部括号长度. 错误代码: 写过一题类似的,那题是找括号数.记得是使用的栈,但是死活写不出来. 看完…

【Visual Studio Code】加载saved_model.pb时报错缺失‘cudart64_110.dll‘等

如果报错Could not load dynamic library cudart64_110.dll; dlerror: cudart64_110.dll not found, 将对应的cudart64_110.dll复制到C:\Windows\System32下即可 如果VScode仍继续报错,重新启动软件即解决问题。 同理,若仍有相同报错 Cou…

ios私钥证书的创建方法

ios私钥证书是苹果公司为ios开发者打包app,推出的一种数字证书,只有同一个苹果开发者账号生成的ios私钥证书打的包,才能上架同一个开发者账号的app store。因此不要指望别人给你共享私钥证书和描述文件,因为别人的证书和描述文件打…

Ubuntu Server版 之 apache系列 安装、重启、开启,版本查看

安装之前首先要检测是否安装过 apt list --installed | grep tool tool:要检测的名称,如mysql、apache 、ngnix 等 安装 apache sudo apt install apache2 安装apache 默认是开启的 可以通过浏览器 检测一下 service apache stop # apache 停止服务…

道本科技||全面建立国有企业合规管理体系

为全面深化国有企业法治建设,不断加强合规管理,防控合规风险,保障企业稳健发展,近日,市国资委印发《常州市市属国有企业合规管理办法(试行)》(以下简称《办法》)&#xf…

包装设计软件 CubeDesigner[CubeMaster] 10.0 Crack

CubeDesigner 是一款包装设计软件,旨在支持包装专业人员创建最佳的包装设计和托盘图案。借助 CubeDesigner,您可以轻松确定优化的船箱尺寸、布置、托盘配置和卡车装载。CubeDesigner提供不同级别的服务,以满足不同用户的需求。CubeDesigner f…

Go语法入门 + 项目实战

👂 Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 第3个小项目有问题,不能在Windows下跑,懒得去搜Linux上怎么跑了,已经落下进度了.... 目录 😳前言 🍉Go两小时 🔑小项目实战 …

深度学习:BatchNorm、LayerNorm、InstanceNorm、GroupNorm和SwitchableNorm的理解

深度学习:BatchNorm、LayerNorm、InstanceNorm、GroupNorm和SwitchableNorm的理解 深度学习中的NormBatchNormLayerNormInstanceNormGroupNormSwitchableNorm 附录 深度学习中的Norm 在深度学习中会经常遇到BatchNorm、LayerNorm、InstanceNorm和GroupNorm&#xf…

queue

文章目录 定义分类链式队列静态队列循环队列静态队列为什么必须是循环队列?循环队列需要几个参数?循环队列入队伪代码循环队列出队伪代码判断循环队列是否为空判断循环队列是否已满 循环队列的代码实现队列的应用 定义 一种可以实现“先进先出”的存储结…

postcss-pxtorem适配插件动态配置rootValue(根据文件路径名称,动态改变vue.config里配置的值)

项目背景:一个项目里有两个分辨率的设计稿(1920和2400),不能拆开来打包 参考: 是参考vant插件:移动端Vant组件库rem适配下大小异常的解决方案:https://github.com/youzan/vant/issues/1181 说明: 因为vue.c…

Java代码审计7之XSS

文章目录 1、漏洞代码2、修复XSS2.1、单个文件修复2.2、通用过滤 3、一些补充 之前的文章, php代码审计14之XSS 1、漏洞代码 xssServlet.java package com.example.demo; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; im…

windows安装Elasticsearch8.9.0

官网解压安装好路径(非中文,无空格) 可参考 言之有李LAX csdn http://t.csdn.cn/S2oju本人使用jdk17 修改配置elasticsearch.yml xpack.security.enabled: false xpack.security.http.ssl:enabled: false直接点击bin\elasticsearch.bat…

二叉树的链式结构 - 遍历 - C语言递归实现

前序、中序以及后序遍历 二叉树遍历 (Traversal) 是按照某种特定的规则,依次对二叉 树中的节点进行相应的操作,并且每个节点只操作一次 。 按照规则,二叉树的遍历有: 前序/中序/后序 的递归结构遍历 : 1. 前序遍历(P…

2023天津Java培训学校分享!Java培训班

近年来,各类培训机构如雨后春笋般涌现,其中,Java培训机构可谓是风头正盛,许多想踏入这行的小伙伴选择这个方式来学习Java技能,今天我们一起来讨论一下:学Java有门槛吗,Java培训的好处&#xff0…

问题解决:VS Code环境调试多文件C++程序

在VS code环境下默认可以调试单文件的C程序,如果是多文件的程序,则会出现编译不通过的问题,无法进行调试 解决方法 在VS Code的工程目录下,有一个tasks.json文件 修改tasks.json文件 其中,"args"子项里面…

android app控制ros机器人三(android登录界面)

接下来是二次开发的具体环节了,由于存在用户需求,用到ros-mobile不多,更偏向于android开发。 用ppt画了简单的展示界面,与用后交流界面的功能布局。先开发一代简易版本的app,后续可以丰富完善。ctrlcv上线。 登录界面…

图数据库Neo4j学习三——cypher语法总结

1MATCH 1.1作用 MATCH是Cypher查询语言中用于从图数据库中检索数据的关键字。它的作用是在图中查找满足指定条件的节点和边,并返回这些节点和边的属性信息。 在MATCH语句中,通过节点标签和边类型来限定查找范围,然后通过WHERE语句来筛选符合…