1_ROS基础

2023-05-16

ROS基础

本章讲解ROS中最基础的概念,不明白这些概念是没法学懂ROS的,学习了这些概念,后面我们将通过实操来在实践的过程中进一步体会


ROS是什么

ROS (Robot Operating System, 机器人操作系统)是一个提供一系列程序库和工具以帮助软件开发者创建机器人应用的软件。
它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。

简单的来说,ROS是一个机器人操作系统,是一系列软件的集合.这些软件加在一起能够实现控制机器人这个目的
在此基础上,我们可以选择合适的软件来辅助我们完成任务


1.ROS中的核心概念

节点Node

ROS将机器人需要执行的任务分解成多个小步骤,然后将每个步骤以进程的形式实现,而每个进程则称为节点

例如机器人视觉,我们将相机驱动程序打包成一个节点,然后将对相机采集到的图像处理程序打包成一个节点,最后将图像显示程序打包成一个节点,如下图

在这里插入图片描述

节点的特点

  1. 每个节点编写的编程语言不是固定的,有的可能是C++,有的可能是Python.
    对于节点而言我们并不关注其具体的实现方式,我们只关注这个节点实现的功能
  2. 为了保证节点在不同的机器上都能运行,节点不能依赖于当前的环境,因此所有的节点都是可执行的二进制文件
  3. 节点不能重名

节点管理器ROS Master

继续上面机器人视觉的例子,上面的例子中我们为了实现机器人视觉这个任务,我们一共有三个节点,分别是相机驱动节点,图像处理节点和图像显示节点,
这三个节点之间也存在关系,相机驱动节点会将采集到的图像给图像处理节点,而图像处理节点将处理好的数据给图像显示节点

然而通常来说完成一个真实世界中的任务需要的节点数量很多,可能高达一两百个节点,如果对这么多的节点没有很好地管理最后就会造成混乱,因此ROS中提供了用于管理节点的ROS Master,如下图

这三个节点想要被运行就必须要在ROS Master中注册

在这里插入图片描述

节点管理器的特点

  1. 节点管理器为节点提供命名和注册服务
  2. 节点管理器会跟踪和记录节点之间的关系,而节点之间的关系通常是以话题和通信的形式实现的数据传输,这点将在后面讲到
  3. 节点管理器负责提供全局的参数,即提供参数服务器,因为在某些时候,多个节点之间可能会共用某些参数,这个时候ROS Master负责记录这些参数,并且再需要的时候提供这些参数

参数

参数指的是节点之间共享的,存储在ROS Master中的字典

例如机器人的视觉不仅需要看到当前看到的图像,还需要当前看到的角度,来让机器人明白自己看的是那个地方的图像,换而言之相机的俯仰角等参数信息,而这个信息则是三个节点共享的

参数的特点

  1. 参数由ROS Master统一管理,具体管理事项有:参数的添加,参数的访问等等
  2. 参数可以通过网络访问
  3. 参数适合存储静态,非二进制的配置参数

在这里插入图片描述


2.ROS中的通信机制

话题通讯机制 – 异步通信机制

话题通讯机制类似于UDP协议,具体来说数据发布的节点只负责进行发布数据,而数据接收的节点只负责接受数据

具体哪个节点在发布数据,哪个在接受数据则互不关心

在这里插入图片描述

消息Message

我们继续回到刚才机器人视觉的例子,在上面的例子中三个节点之间进行了数据的传输,即图像的传递

但是节点可以是不同的语言编写的,而不同的语言之间的存储数据的方式不一样,例如Python的列表和字典,C++中的数组和向量
不同的节点之间往往又涉及到数据的传输,为此ROS定义了标准的节点之间数据的传输格式

这些节点之间传输的以ROS标准的格式书写的数据称为消息,节点之间数据的传输靠消息

消息的特点
  1. 消息的具体实现是使用了与编程语言无关的.msg文件,在编译的过程中生成相应的代码
  2. .msg文件本质是纯文本文件,但是就像html,xml和json等文件一样,具有一定的格式 / 数据类型
    ROS中为我们预定义好了很多数据,包括图像,雷达点云等等,当然我们也可以自己定义消息的类型

话题Topic

话题是节点之间用于传输数据的总线

他可以是一个文件夹,例如上面的摄像机的例子,相机驱动节点将采集到的图像放到一个文件夹下面,而图像处理节点读取这个文件夹的图片,这个时候这个文件夹就是一个话题

话题的特点
  1. 话题使用发布/订阅模型
  2. 一个话题的订阅者和发布者可以不唯一

订阅者Subscriber / 发布者Publisher

发布者指的是一个话题中消息的发出方,在机器人视觉的例子中就是相机驱动节点

订阅者指的是一个话题中消息的接收方,上面的例子中指的是相机驱动节点和图像处理节点

下面的图片的例子中Topic是example文件夹,话题名也是example,message是符合ROS标准的字符串

在这里插入图片描述

服务通信机制 – 同步通信机制

ROS中的另外一种通信机制是服务通信机制,类似于TCP协议,服务通信机制中数据的发布节点和接受节点之间必须建立稳定的联系

在这里插入图片描述

请求Request / 应答Answer

和消息一样,ROS对使用服务通信机制的节点之间传输的数据也定义了数据的格式

类似的,是以.srv为后缀的纯文本文件,在编译中产生对应的代码文件

服务端Server / 客户端Client

服务端指的是发布数据的节点,而客户端指的是接受数据的节点

两种通信机制对比

在这里插入图片描述

ROS的文件系统

文件系统指的是文件之间的层级组织结构,在ROS中指的就是各种功能包的层级组织结构

我们可以把几个可以完成独立任务的节点打包为一个功能包,例如独立完成看和抓取和行走的功能包

然后我们将这几个功能包组成一个大的元功能包,例如上面的三个功能包打包成寻找这个元功能包

除了寻找之外,我们还可以制作跑步等元功能包,最终所有的元功能包组合在一起形成一个软件仓库

诸多软件仓库的组合就是ROS社区

在这里插入图片描述

功能包的组成

一个功能包通常是一个文件夹,其下有如下内容:

  • 功能包清单:描述功能包的作用,作者和更新信息,第三方依赖等等
  • 消息类型:功能包中自定义的消息类型
  • 服务类型
  • 代码
  • 其他
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1_ROS基础 的相关文章

  • gazebo通过sdf搭建仿真环境和机器人Husky

    具体格式要求可参考 http sdformat org spec ver 1 6 elem sdf
  • V-REP安装

    小知识 是当前目录 是父级目录 是根目录 1 下载V REP 官网地址 http www v rep eu downloads html 我用ubuntu16 04下载V REP PRO EDU V3 5 0 Linux tar 2 解压安
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • Hypervisor介绍及在智能驾驶的应用

    转自Hypervisor 智能座舱和智能驾驶融合的关键技术 腾讯新闻
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • 在Ubuntu 14.04.2 LTS上安装Qt

    Qt是一个跨平台的应用程序框架 广泛用于开发具有GUI界面的应用软件以及命令行工具 几乎所有操作系统都可以使用Qt 如Windows Mac OS X Android等 用于开发Qt应用程序的主要编程语言是C 但是可以使用诸如Python
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • 什么是 void `std::allocator`?即:`std::allocator`

    自动生成ROS 机器人操作系统 message C 头文件包含如下类型定义 typedef std msgs Header
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc

随机推荐

  • STM32 电压采集上位机 C#

    工具箱中添加progressBar 添加一个事件函数 xff0c 用于串口接收数据 xff0c 并显示电压值 private void PortDataReceivedEvent object sender SerialDataReceiv
  • cmake使用教程(一)多目录下多个文件的构建

    1 采用 out of source 外部构建多个目录多个文件 这里的文件存储方式如下 xff1a 其中build是构建目录 xff0c 即构建的结果和中间产物都在该目录下 include是包含目录 src是子函数的目录或是依赖文件的目录
  • vue 实现遍历后端接口数据并展示在表格中

    用前端的vue遍历接口 首先就需要有后端的JSON数据 这里可以自己去写接口 可以伪造JSON数据 整理是伪造的JSON数据 34 userId 34 1 34 deptId 34 103 34 userName 34 34 admin 3
  • STM32的存储器映射中的指针操作

    例如 xff1a GPIOB的端口输出数据寄存器ODR的地址是0x4001 0C0C 并且ODR寄存器是32位的 那么我们可以用如下代码对寄存器进行操作 xff1a unsigned int 0x4001 0C0C 61 0xFFFFFFF
  • Mac 启动Redis报错 没有指定的conf文件

    报错如下 xff1a Warning no config file specified span class token punctuation span span class token keyword using span the de
  • java 优化双重for循环

    首先我们要有两个对象分别是 学生信息 和 学生住宿信息 span class token keyword class span span class token class name Student span span class toke
  • 微服务 - gateway网关配置

    server port 10010 网关端口 spring application name gateway 服务名称 cloud nacos server addr localhost 8848 nacos地址 gateway route
  • 如何在手机或平板上编写代码?

    下面给大家推荐一款免费的 在线协作式 基于浏览器的 IDE的在线编程网站 支持语言包括 Java C 43 43 C C JavaScript CSS PHP等50多种主流开发语言 地址 The collaborative browser
  • 羊了个羊, 低配版开源代码来啦~

    前几天朋友圈突然被一个小游戏 羊了个羊 刷屏了 xff0c 出于好奇我也打算小玩一把试试 xff0c 结果没想到上头了 游戏的玩法非常简单 xff0c 类似 消消乐 xff0c 从一堆方块中找到相同图案的 3 个方块并消除即可 但没想到 x
  • MySQL 使用索引和不使用索引的区别(附17W条数据SQL文件)

    MySQL 使用索引可以减少查询的时间 xff0c 而不使用索引的查询会更加耗时 xff0c 因为MySQL需要扫描整个表 此外 xff0c 使用索引可以提高查询的性能 xff0c 同时也可以提高查询的可读性和可维护性 换句话来说 使用索引
  • 如何使用AI来帮你写代码(Cursor使用教程)

    x1f4ac 产品介绍 cursor是一个新的Ide xff0c 它使用Ai来帮助您重构理解调试并使用Cursor编写代码我们的目标是使构建软件的过程更快 更愉快 我们从头开始构建了一个代码编辑器 xff0c 对我们的第一个功能进行了原型设
  • [Java多线程-基础] 如何定位线程中的死锁问题?

    x1f512 死锁代码 下面提供的代码演示了死锁的情况 程序创建了两个线程 xff0c 线程1和线程2 xff0c 它们都试图以不同的顺序获取两个不同的资源 xff0c resource1和resource2 线程1首先获取resource
  • [Java多线程-基础] 避免线程死锁问题(ReentrantLock的使用)

    ReentrantLock 的设计初衷是为了提供一种比 synchronized 更加灵活和可控的锁机制 与 synchronized 相比 xff0c ReentrantLock 提供了更多的功能 xff0c 如可重入性 公平锁和中断锁等
  • IDEA插件:智能代码生成器,附带注释和性能/安全检测功能

    x1f680 1 安装插件 在插件中搜索关键字 biot 点击安装 x1f680 2 代码生成 右侧的侧边栏点击biot后 在下方的输入框中输入你要问的内容 x1f680 3 biot AI 选中选区中的代码 点击鼠标右键让ai来帮你改代码
  • 安装Windows Server 2016 服务器 标准版

    注意事项 xff1a 安装带桌面版的 管理员密码设置 xff0c 要 注意大小写加数字 xff0c 不然会设置失败 安装文件下载 xff1a MSDN 我告诉你 PE U盘 微PE 服务器的驱动 xff0c 可以自己到对应服务器厂家的官网上
  • 第五节:基于Pytorch的相关可视化

    第五节 xff1a 基于Pytorch的相关可视化 在Pytorch发布后 xff0c 网络及训练过程的可视化工具也相应的被开发出来来帮助用户监督所建立的模型的结构和训练过程 本章将讲解HiddenLayer库 xff0c HiddenLa
  • 第六节:Pytorch实现全连接神经网络

    第六节 xff1a Pytorch实现全连接神经网络 前面的五节中 xff0c 我们讲解了使用PyTorch搭建一个神经网络中需要的需要各种技巧 xff0c 包括 xff1a 网络的搭建 选择不同的实践技巧 xff08 优化器选择 学习率下
  • 使用Visual Studio Code开发Arduino踩坑日记(持续更新)

    使用Visual Studio Code开发Arduino踩坑日记 持续更新 文章目录 使用Visual Studio Code开发Arduino踩坑日记 持续更新 1 在browse path中未找到包含文件问题描述问题分析解决思路解决过
  • 小白安装Ubuntu 18.04 LTS

    文章目录 小白安装Ubuntu 18 04 LTS作者 xff1a 王仕鸿日期 xff1a 2020 10 10 前言 xff08 可跳过 xff09 Ubuntu介绍操作系统介绍Ubuntu介绍 安装Ubuntu 18 04 LTS步骤一
  • 1_ROS基础

    ROS基础 本章讲解ROS中最基础的概念 不明白这些概念是没法学懂ROS的 学习了这些概念 后面我们将通过实操来在实践的过程中进一步体会 ROS是什么 ROS Robot Operating System 机器人操作系统 是一个提供一系列程