【ROS】机械人开发四--ROS常用概念与Launch文件

2023-05-16

机械人开发四--ROS常用概念与Launch文件

  • 一、ROS常用概念
    • 1.1 ROS 的结构
    • 1.2 ROS 话题通信
    • 1.3 海龟仿真器 仿真 例程
  • 二、Launch文件
    • 2.1 功能
    • 2.2 文件语法
    • 2.3 参数服务器
    • 2.4 节点分组与重命名标签


一、ROS常用概念

1.1 ROS 的结构

ROS 中有一些很重要的基础概念:节点节点管理器工作空间功能包等,知道这些基础概念对后续的 ROS 的学习和理解会有很大的帮助。工作空间 和 功能包 上一节一节讲过了,这里讲一下节点节点管理器

  • 节点(node):在ROS机械人中,每一个功能由每一个结点实现,而每个 节点 则对应功能包中的 一个可执行文件。
  • 节点管理器(master):报告结点的注册信息,通过节点管理器,可以让节点和节点之间建立起联系。只有通过节点管理器注册,才能实现后续的节点间的通信。

1.2 ROS 话题通信

话题通信是ROS节点中最常用的通信方式。

  • 话题的概念(topic):节点可以发布消息到话题,也可以从话题订阅消息,一个节点可以订阅和发布多个话题。
  • 消息(message):一个 ROS 数据类型,节点之间通过话题承载的消息来互相通信。

发布者
其部分C++实现代码如下:
在这里插入图片描述
代码意思是 创建一个名为“test_info_pub”的发布者,发布一个名为“/pub_name”的话题,话题的消息类型为“topic::type”,消息的队列长度为 20。在创建完发布者后,我们需要实体化发布者发送的数据类型。如下图所示:
在这里插入图片描述
创建消息数据后将数据以消息结构的形式发送出去,如下图所示:
在这里插入图片描述

订阅者
在发布者将消息发布出来之后,订阅者需要通过订阅话题去订阅发布者发布的信息,代码如下:
在这里插入图片描述
创建一个订阅者,订阅名为“/pub_name”的话题,队列长度20,注册回调函数“callback”。当接收到消息后调用回调函数进行处理接收的消息。如下图所示:
在这里插入图片描述


1.3 海龟仿真器 仿真 例程

① 输入 roscore 启动 ROS
roscore 随后会启动 节点管理器节点管理器负责 ros 的节点注册,参数服务器,话题通信管理等等。

book@100ask:~$ roscore
在这里插入图片描述
程序运行

② 重新打开一个命令窗口,输入命令 rostopic list 查看节点列表

rostopic list
在这里插入图片描述
可以看到 跟随 roscore 一起启动的 “/rosout”“/rosout_agg” 两个系统话题

③ 使用 rosrun 命令运行一个节点

rosrun turtlesim turtlesim_node
在这里插入图片描述
在这里插入图片描述
可以看到出现了一个海龟

④ 再开一个命令窗口,输入控制海龟运动的节点。

rosrun turtlesim turtle_teleop_key
在这里插入图片描述
这时你就可以通过键盘的↑↓←→控制海龟运动了

⑤ 随后在打开一个命令窗口,输入 rostopic list 命令。

rostopic list
在这里插入图片描述
可以看到对比之前多了/turtle1/cmd_vel , /turtle1/color_sensor , /turtle1/pose,这三个话题。
其分别对应 键盘控制节点的话题通信、海龟仿真器的颜色话题、海龟的位姿话题。

⑥ 输入命令分别查看相应的话题内容,命令如下:

rostopic echo /turtle1/cmd_vel
rostopic echo /turtle1/color_sensor
rostopic echo /turtle1/pose
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

⑦ 输入命令查看当前运行的话题,以及显示该话题的发布者和订阅者。

rosrun rqt_graph rqt_graph
在这里插入图片描述
窗口内显示当前运行的话题,可以看到话题名是/turtle1/cmd_vel,话题的发布者是“/teleop_turtle”
话题的订阅者是“/turtlesim”


二、Launch文件

2.1 功能

launch 路径下包含的是.launch 文件,launch 文件里面封装好了要运行的节点,写入的参数,加载的参数文件等等。

在前面运行海龟仿真器的例程时用到的都是 rosrun 命令,rosrun 命令每次只能运行一个节点,但是当运行一个机器人时要同时运行多个节点就需要用到 roslaunch 了,roslaunch 命令运行一个 launch 文件一个 luanch 文件可以包多个节点

文件的指令的结构是:

roslaunch 功能包名 launch文件名

运行 roslaunch 命令时,会自动检测是否开启了 roscore,如果没有开启则自动开启 roscore。
其官方网址如下:
roslaunch


2.2 文件语法

语法为标签语言,具体列表如下:
在这里插入图片描述

launch 文件中的根元素采用 <launch> 标签定义,文件中的其他内容都必须包含在这个标签之中。如下:

<launch> 
……
……
</launch>

启动 ROS 系统的核心是启动 ROS 节点,采用<node>标签定义,用法如下:

<node name="map_server_for_test" pkg="map_server" type="map_server" />

启动一个节点至少需要三个属性:name、pkg 和 type。

  • name:属性定义节点运行的名称,可自定义;
  • pkg:属性定义节点所在的功能包名称
  • type:属性定义节点的可执行文件名称,也可以是.py 文件

除了这三个标签属性外,另外还有一些其他的元素,例如:<param><arg>。这两个的作用都是写入参数,但是

param 是 ROS 系统运行中的参数,存储在参数服务器中。在 launch 文件中可以通过<param>标签加载 param
launch 文件执行后,param 就加载到 ROS 的参数服务器上了。

arg 标签用来在 launch 文件中定义参数,arg 不储存在参数服务器中,不能提供给节点使用,只能在 launch 文件中使用

<node>标签的属性列表如下:

属性作用
pkg节点所在的包名
type可执行文件名
name重定义节点名
args传递参数
output日志输出(log|screen)
respawn“true”,如果节点失效则重启(默认是false)
required“true”,如果节点失效则关闭整个launch文件(默认不设置)
ns在命名空间中运行此节点

launch 文件夹里面还有一个 inculde 文件夹,这个文件夹主要是存放一些被其他 launch 文件调用的 launch 文件 。如下图所示:
在这里插入图片描述


2.3 参数服务器

储存系统运行参数。使用命令和功能如下:

  • rosparam list : 列出参数服务器中的参数
  • rosparam get : 获取参数
  • rosparam set : 设置参数
  • rosparam delete : 删除参数
  • rosparam load : 从文件中加载参数到参数服务器
  • rosparam dump : 将参数服务器的参数写入文件

2.4 节点分组与重命名标签

<group>

使用 ① 将若干个节点划分进同一个命名空间

<group ns = “group_name”>
... 
</group>

使用 ② 条件判断执行

<group if = “condition”>
... 
</group>

<remap>

<remap from = "/different_topic" to = "/needed_topic" />

到这里就结束啦!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ROS】机械人开发四--ROS常用概念与Launch文件 的相关文章

  • mybatis在IDEA里实现模糊查询的SQL语法格式

    Navicat版本 xff1a 10 1 7 版本比较旧 xff0c 一些语法格式可能跟新版的不太一样 xff0c 不过模糊查询格式还是一样的 长这个样子 xff1a 在Navicat里查询 xff1a select from user f
  • 解决IDEA报错:Ambiguous handler methods mapped for ‘……‘路径冲突

    IDEA报错 xff1a Ambiguous handler methods mapped for 39 funds E5 9B BD 39 这是因为controller层的两个不同方法的访问路径设置得一样 xff0c 虽然 后面的传入参数
  • 前端控制台怎么打开

    去点击右上角三个点 更多工具 开发者工具 成功打开控制台 xff1a
  • 数据库的某个字段在前端表格里没显示出来

    当前卖出费率一栏全部为空 那问题肯定是出在数据库这方面 vue文件里的表格字段必须跟数据库的对应字段一致才行 vue里的NowRate必须修改为sellRate xff0c 跟数据库的字段名一致 修改之后记得重启 xff0c 正常显示
  • 2023年3月计算机三级网络技术备考

    一 专项练习 网络系统结构与设计的基本原则 1 1基础知识 1 1 1 广域网技术的发展 下列关于光以太网技术特征的描述中 xff0c 错误 的是 A 能够根据用户的需求分配宽带 B 以信元为单位传输数据 C 具有保护用户和网络资源安全的认
  • Vue3项目使用 wow.js 让页面滚动更有趣~

    wow js是一个可以在页面滚动的过程中逐渐释放动画效果 xff0c 让页面滚动更有趣的一个插件库 官网 xff1a wow js Reveal Animations When Scrolling 本文就演示一下如何在Vue3项目使用 wo
  • Failed to start bean ‘documentationPluginsBootstrapper ‘; nested exception is java.lang.NullPointer

    在配置使用swagger的时候启动报错 xff0c 如下 xff1a 原因在于我在swagger配置里加上了 64 EnableSwagger2注解 xff0c 在加上它之前可以正常启动 解决方法 xff1a 在配置文件里加上 spring
  • 串口发送float类型数据

    STM32串口发送float类型数据 一 代码 1 发送 span class token keyword void span span class token function send gyro span span class toke
  • STM32 F4串口空闲中断 + DMA实现数据发送

    STM32 F4串口空闲中断 43 DMA实现数据发送 前言文章目录一 空闲中断二 DMA三 代码部分1 串口配置2 DMA配置 前言 最近在做 STM32 43 ROS车的项目 xff0c STM32与ROS之间通信由于数据量大 xff0
  • Darknet YoloV4编译+训练(避免踩坑)

    AlexAB darknet yolov4编译 43 训练 时间间隔好几天今天来更新一下yolov4的训练 训练篇 在训练之前需要对大佬的源码进行编译本本机编译 xff0c 编译过程可查看下述链接 xff1a https blog csdn
  • ubuntu下如何创建ros工作空间、创建ros功能包、创建ros节点

    1 打开终端进入存放ros工作空间的目录 xff08 比如我这里将它放在home目录下的test文件夹中 xff09 cd test 2 开始创建ros工作空间 mkdir p catkin ws src cd catkin ws src
  • STM32串口通信 (采用链表接收不定长数据帧)

    STM32串口通信 链表接收不定长数据帧 数据帧说明不太恰当的比方 数据缓冲链表结构效果展示工程文件 数据帧说明 STM32数据寄存器为USARTx gt DR寄存器 可以看到DR寄存器只有 8 0 位可以使用 xff0c 第8位用于奇偶校
  • A*寻路算法

    目录 1 动画演示2 游戏中的自动寻路A 算法3 A 寻路算法原理4 调试代码分析代码5 代码 1 动画演示 2 游戏中的自动寻路A 算法 随着3D游戏的日趋流行 在复杂的3D游戏环境中如何能使非玩家控制角色准确实现自动寻路功能成为了3D游
  • 2022数学建模国赛B题和C题高质量论文代码数据

    目录 B题论文 5 1 问题一的建模与求解 5 1 1 使用极坐标求解具体位置 C题论文 1 1 研究背景 1 2 问题的提 5 1 问题一的建模与求解 5 1 1 数据的预处理 B题论文 5 1 问题一的建模与求解 5 1 1 使用极坐标
  • stm32小白学习之寄存器名称

    IDR输入只读寄存器 xff0c ODR输出可读可写寄存器 BSRR xff08 置位寄存器 xff09 与BRR xff08 复位寄存器 xff09 CRL xff08 端口配置低位寄存器 xff09 与CRH xff08 端口配置高位寄
  • 使用Vite创建Vue3+TS项目并整合Element Plus框架等一条龙服务

    记录一下使用Vite创建Vue3 43 TS项目以及整合Element Plus框架 xff0c 还有Less Pinia Vue router monaco editor等插件或组件 一 使用Vite创建Vue3 43 TS项目 第一步
  • Qt学习 第37节:QString

    在阅读QString文档时 xff0c 出了一个词 implicit sharing copy on write xff0c 不是很懂 xff0c 下面链接解释的表明白 QT的隐式共享 Implicit Sharing 道路与梦想 CSDN
  • 下载Postman并且汉化使用

    下载Postman并且汉化使用 一 下载postman postman有不同的版本 xff0c 如果要汉化就要下载的版本与汉化包一致 下载地址 xff1a postman官网下载地址 xff1a https www postman com
  • 【Vue】postman汉化教程 保姆级教程 包教会

    下载链接 xff1a Win64 Win32 历史版本下载 请把下面链接的 34 版本号 34 替换为指定的版本号 xff0c 例如 xff1a 8 8 0 版本链接Windows32位https dl pstmn io download
  • 操作系统实验——进程与线程

    目录 1 使用GCC xff08 1 xff09 参数 xff08 2 xff09 自定义头文件 xff08 3 xff09 makefile脚本 xff08 4 xff09 gdb调试 2 进程 xff08 1 xff09 新建进程 xf

随机推荐

  • 串口应用(USART)

    串行口应用 1 USART介绍 通用同步异步收发器 USART 提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的 外部设备之间进行全双工数据交换 USART利用分数波特率发生器提供宽范围的波特率选择 它支持同步单向通信和半双工单线
  • cpp-httplib 避免阻塞主线程, c++封装httplib,httplib面向对象开发

    目录 说明 前言原生的httplib会阻塞你的主线程解决httplib阻塞主线程的问题BashController 面向对象风格使用httplib自定义controller MyController h文件自定义controller Tes
  • 数据结构——结构体的5种定义方式及对比

    以下仅为定义结构体的方式 xff0c 具体使用在后续的文章中介绍 span class token macro property span class token directive hash span span class token d
  • 【C++】STL应用(详解)

    一 泛型程序与STL1 泛型程序设计的基本概念2 STL简介 二 迭代器1 输入流迭代器2 输出流迭代器 三 STL应用1 撰写自己的算法和函数 xff0c 结合容器和迭代器解决序列变换 xff08 如取反 平方 立方 xff09 xff0
  • 模块学习(二)——MPU6050

    去年电赛备赛期间 xff0c 学的STM32标准库 xff0c 那一整个繁琐直接给我劝退了 xff0c 当时学习MPU6050时就非常痛苦 xff0c 代码也看不懂 xff0c 无非抄来抄去 xff0c 然后就是编译 xff0c 改错 xf
  • 【嵌入式面试题】常见的面试题梳理一

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 使用Python+openpyxl实现导出自定义样式的Excel文件

    之前项目中的导出Excel文件操作都是在前端完成的 xff0c 项目是由vue 43 vite构建的 xff0c 效果还不错的 xff0c 所需依赖包如下所示 npm i xlsx 64 0 18 5 npm i xlsx style vi
  • 【嵌入式面试题】常见面试题梳理二

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理三

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理四

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理五

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理六

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 我的创作一周年纪念日--收获与成长与展望

    机缘 2022年10月11日 xff0c 是我创作的一周年纪念日 xff0c 1年前 xff0c 刚到大三的我开启了我的创作之旅 xff0c 那个时候 xff0c 我选择重新学习C语言和数据结构 xff0c 将我的基础在进行巩固 在那个时候
  • 【Linux】特别篇--SMBus 协议

    Linux 特别篇 SMBus 协议 一 SMBus 简介二 SMBus 与 I2C 区别三 SMBus协议分析3 1 符号含义3 2 SMBus Quick Command3 3 SMBus Receive Byte3 4 SMBus S
  • 【Linux】特别篇--GNU C编译器扩展语法

    前言 xff1a 本章是我参考 嵌入式C语言自我修养 的GUN C编译器扩展语法这一章 xff0c 对其中的内容进行了摘录 总结与归纳 xff0c 并写了一些关于自己的理解 xff0c 这边还是推荐大家去购买原作的 xff0c 因为里面用通
  • 【ROS】机械人开发一--树莓派安装ubuntu18.04

    前言 xff1a 安装了一天的树莓派系统 xff0c 遇到了很多坑 xff0c 这里将教程详细分享一下 xff0c 方便大家快速的安装系统 目录 一 操作环境硬件软件 二 资源下载链接三 具体步骤烧入修改镜像文件问题修改重启时间PC端使用x
  • 【ROS】机械人开发二--ROS环境安装

    机械人开发二 ROS环境安装 一 运行环境二 ROS melodic安装2 1 设置软件源2 2 设置密钥2 3 安装ROS2 4 环境设置2 5 安装ROS的依赖环境2 6 初始化rosdep 三 建立工作空间测试 一 运行环境 树莓派4
  • Android应用程序开发期末大作业(1)

    一 简答题 每小题5分 xff0c 4小题 xff0c 共20分 1 1 android大众常用的五种布局 xff08 5分 xff09 答 xff1a FrameLayout 框架布局 xff0c LinearLayout 线性布局 xf
  • 【ROS】机械人开发三--ROS工作空间与功能包

    机械人开发三 ROS工作空间与功能包 一 ROS工作空间1 1 概念1 2 创建工作空间1 3 编译工作空间1 4 设置环境变量1 5 添加环境变量 二 功能包2 1 概念2 2 功能包的内容2 3 创建功能包 三 CMakeLists t
  • 【ROS】机械人开发四--ROS常用概念与Launch文件

    机械人开发四 ROS常用概念与Launch文件 一 ROS常用概念1 1 ROS 的结构1 2 ROS 话题通信1 3 海龟仿真器 仿真 例程 二 Launch文件2 1 功能2 2 文件语法2 3 参数服务器2 4 节点分组与重命名标签