【ROS教程】ROS文件系统和基础架构

news/2024/9/22 6:55:45/文章来源:https://www.cnblogs.com/UnderTurrets/p/18384493

@

目录
  • 1.工作空间目录
    • 1.1 package.xml
  • 2.启动节点的方式
    • 2.1 一次启动一个
    • 2.2 一次启动多个
  • 3.ROS常用命令
    • 3.1 增
    • 3.2 查
    • 3.3 执行
      • 3.3.1 加载环境变量
      • 3.3.2 运行节点
    • 3.4 查看计算图
  • 4.创建功能包
    • 4.1 选择工作目录
    • 4.2 创建功能包目录
    • 4.3 建立功能包


1.工作空间目录

在这里插入图片描述

WorkSpace --- 自定义的工作空间|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。|--- src:源码|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成|-- CMakeLists.txt:配置编译规则,比如源文件、依赖项、目标文件|-- package.xml:包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)|-- scripts:存储python文件|-- src:存储C++源文件|-- include:头文件|-- msg:消息通信格式文件|-- srv:服务通信格式文件|-- action:动作格式文件|-- launch:可一次性运行多个节点 |-- config:配置信息|-- CMakeLists.txt:编译的基本配置

1.1 package.xml

  • 固定格式
<?xml version="1.0"?>
<!-- 格式: 以前是 1,推荐使用格式 2 -->
<package format="2"><!-- 包名 --><name><the name of package></name><!-- 版本 --><version>0.0.0</version><!-- 描述信息 --><description>The <the name of package> package</description><!-- One maintainer tag required, multiple allowed, one person per tag --><!-- Example:  --><!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --><!-- 维护人员 --><maintainer email="*">XXX</maintainer><!-- One license tag required, multiple allowed, one license per tag --><!-- Commonly used license strings: --><!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --><!-- 许可证信息,ROS核心组件默认 BSD --><license>TODO</license><!-- Url tags are optional, but multiple are allowed, one per tag --><!-- Optional attribute type can be: website, bugtracker, or repository --><!-- Example: --><!-- <url type="website">http://wiki.ros.org/demo01_hello_vscode</url> --><!-- Author tags are optional, multiple are allowed, one per tag --><!-- Authors do not have to be maintainers, but could be --><!-- Example: --><!-- <author email="jane.doe@example.com">Jane Doe</author> --><!-- The *depend tags are used to specify dependencies --><!-- Dependencies can be catkin packages or system dependencies --><!-- Examples: --><!-- Use depend as a shortcut for packages that are both build and exec dependencies --><!--   <depend>roscpp</depend> --><!--   Note that this is equivalent to the following: --><!--   <build_depend>roscpp</build_depend> --><!--   <exec_depend>roscpp</exec_depend> --><!-- Use build_depend for packages you need at compile time: --><!--   <build_depend>message_generation</build_depend> --><!-- Use build_export_depend for packages you need in order to build against this package: --><!--   <build_export_depend>message_generation</build_export_depend> --><!-- Use buildtool_depend for build tool packages: --><!--   <buildtool_depend>catkin</buildtool_depend> --><!-- Use exec_depend for packages you need at runtime: --><!--   <exec_depend>message_runtime</exec_depend> --><!-- Use test_depend for packages you need only for testing: --><!--   <test_depend>gtest</test_depend> --><!-- Use doc_depend for packages you need only for building documentation: --><!--   <doc_depend>doxygen</doc_depend> --><!-- 依赖的构建工具,这是必须的 --><buildtool_depend>catkin</buildtool_depend><!-- 指定构建此软件包所需的软件包 --><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend><!-- 指定根据这个包构建库所需要的包 --><build_export_depend>roscpp</build_export_depend><build_export_depend>rospy</build_export_depend><build_export_depend>std_msgs</build_export_depend><!-- 运行该程序包中的代码所需的程序包 -->  <exec_depend>roscpp</exec_depend><exec_depend>rospy</exec_depend><exec_depend>std_msgs</exec_depend><!-- The export tag contains other, unspecified, tags --><export><!-- Other tools can request additional information be placed here --></export>
</package>

2.启动节点的方式

2.1 一次启动一个

rosrun <the name of package> <the name of executable file>
  • executable file:对于C语言,这个文件就是CMakeLists.txt中用add_executable生成的可执行文件;对于python,这个文件就是CMakeLists.txt中用catkin_install_python指向的文件

对应语法:

add_executable(<the name of executable file>src/<the name of the source>.cpp)
catkin_install_python(PROGRAMS scripts/<the name of the source>.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

2.2 一次启动多个

如果想要一次性启动一个包里的多个节点,而不是一行行地输入rosrun指令...

  • 我们需要一个launch文件,它的固定格式是这样的:
<launch><node pkg="helloworld" type="demo_hello" name="hello" output="screen" /><node pkg="turtlesim" type="turtlesim_node" name="t1"/><node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
  • node:包含的某个节点
  • pkg:功能包
  • type:被运行的节点文件
  • name:为节点命名
  • output:设置日志的输出目标

然后,在终端输入:

roslaunch <the name of package> <the name of launch file>

3.ROS常用命令

3.1 增

创建新的ROS功能包:

catkin_create_pkg 自定义包名 依赖包

3.2 查

列出所有功能包:

rospack list

查找某个功能包是否存在,如果存在返回安装路径:

rospack find 包名

3.3 执行

3.3.1 加载环境变量

先进入工作目录,然后:

source ./devel/setup.bash

3.3.2 运行节点

roscore:ROS的系统先决条件节点和程序的集合,必须运行 roscore 才能使 ROS 节点进行通信。新开一个终端并输入

roscore #用法一
roscore -p xxxx #用法二,指定端口号

roscore 将启动:

  • ros master
  • ros 参数服务器
  • rosout 日志节点

3.4 查看计算图

在节点正在运行的情况下,终端输入:

rosrun rqt_graph rqt_graph

在这里插入图片描述

4.创建功能包

4.1 选择工作目录

首先,选择一个路径作为工作目录。这里我选择了如下路径作为工作目录
在这里插入图片描述

4.2 创建功能包目录

mkdir src

然后,在工作空间目录下

catkin_make

src目录下会多出一个锁定的CMakeLists.txt文件,不用管它。

4.3 建立功能包

先进入src目录

cd src

然后使用ROS提供的指令直接创建功能包即可:

catkin_create_pkg <the name of your package> roscpp rospy std_msgs message_generatio

roscpp、rospy、std_msgs、message_generatio是你所需要的依赖,你可以自由决定想要哪些依赖

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

沉浸式体验吸尘器产品的3D可视化盛宴

在这个科技日新月异的时代,每一个细微之处都蕴含着创新的火花,而家居清洁作为我们日常生活中不可或缺的一环,也正在经历一场前所未有的变革。大家可以想象一下,无需亲临实体店,只需轻点鼠标或滑动屏幕,一款款精心设计的吸尘器便以3D形态跃然眼前,仿佛触手可及。这不仅仅…

Valid注解

文章链接地址:https://blog.csdn.net/m0_58680865/article/details/127817779文章目录前言 一、@Valid注解1、源码解析 2、所属的包 3、参数校验使用注解(1)空校验 (2)Boolean校验 (3)长度校验 (4)日期校验 (5)数值校验 (6)其他校验4、具体使用使用 @Valid 进行参…

【ACMMM2024】Multi-Scale and Detail-Enhanced Segment Anything Model for Salient Object Detection

论文:https://arxiv.org/pdf/2408.04326 代码:https://github.com/BellyBeauty/MDSAM论文的研究动机就是使用SAM来解决显著性检测(SOD)问题,主要有两个改进:提出了Lightweight Multi-Scale Adapter, LMSA来微调SAM 提出了Multi-Level Fusion Module, MLFM 和 Detail Enha…

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型,快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程,将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有…

题解:P11000 [蓝桥杯 2024 省 Python B] 数字串个数

P1100,纪念这个特别的数字,来水一篇。用 \(1 \sim 9\) 没有任何特殊情况的方法数:\(9^{10000}\)。 排除没有 \(3\) 和 \(7\) 的方法。 \(9^{10000} - 8^{10000} - 8^{10000}\) 加上 \(3\) 和 \(7\) 混一起的方法数。 \(9^{10000} - {(9 - 1)}^{10000} - {(9 - 1)}^{10000} +…

【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话

引言在三年前,写智能小车的时候,当时小车上有一个摄像头需要采集,实现推拉流的操作,技术选型当时第一版用的是nginx的rtmp的推拉流,服务器的配置环境是centos,2H4G3M的一个配置,nginx的rtmp的延迟是20秒,超慢,后来研究了SRS以及ZLMediaKit这两个开源的推拉流服务器,没…

免费、开源、详细完整的unity游戏、游戏源码、教程:人工智能分析和处理对话的美好三维世界(定期更新)

免费、开源、详细完整的unity游戏、游戏源码、教程:人工智能分析和处理对话的美好三维世界。这份unity游戏、游戏源码、教程:完全免费,完全开源,完整详细,通俗易懂,适合初学者入门,定期更新。 我不想和任何人说话,任何人不要跟我说话,不要打扰我,我要安安静静的写。我…

小企业必备:优选局域网文档管理软件推荐

国内外主流的10款局域网文档管理软件对比:1.PingCode;2.Worktile;3.语雀;4.联想Filez企业网盘;5.亿方云;6.黑域基地;7.Joplin;8.MediaWiki;9.TiddlyWiki;10.Zim Wiki。在处理局域网文档时,企业常常面临着文件管理不系统、数据安全性差等问题,这不仅影响团队协作效率…

机器学习之——决策树信息熵计算[附加计算程序]

0 前言本文主要讲述了决策树背后的信息熵的公式含义及计算方式,并列举出多道例题帮助理解。1 信息熵的定义 1.1 信息熵公式笔者使用下图(1-1)直观理解信息熵的含义。信息熵越大,表示该随机变量的不确定性越高。对于均匀分布,信息熵达到最大值。 1.2 证明:对于均匀分布,信息…

phpinclude-labs做题记录

Level 1 file协议payload:?wrappers=/flag Level 2 data协议 去包含data协议中的内容其实相当于进行了一次远程包含,所以data协议的利用条件需要 php.ini 中开启 allow_url_fopen 和 allow_url_include GET: ?wrappers=, 然后 POST:helloctf=system(cat /flag); Level 3 dat…

数据结构学习第一周

本文需要掌握的知识 1.认识数据结构 2.了解数据结构(逻辑结构)的分类 3.内存储器模型以及分配方式(物理结构) 4.认识Node类 5.简单了解泛型1 .数据结构(D-S/Data Structure) 1.1简介 1.1.1数据 分为原子数据和复合数据 1.1.2结构 分为逻辑结构和物理结构数据结构是由数据和数…

用 Higress AI 网关降低 AI 调用成本 - 阿里云天池云原生编程挑战赛参赛攻略

我们要在 Higress 网关中编写 WebAssembly(wasm)插件,使得在 http 请求的各个阶段(requestHeader,requestBody,responseHeader,responseBody)能够将相应的请求或返回捕获进行业务逻辑的处理。具体到本比赛,主要需要实现的是缓存对大模型的请求(openai 接口的形式)在…