一起自学SLAM算法:1.5 ROS节点通信

 连载文章,长期更新,欢迎关注:


写在前面

第1章-ROS入门必备知识

        1.1 ROS简介

        1.2 ROS开发环境搭建

        1.3 ROS系统架构

        1.4 ROS调试工具

        1.5 ROS节点通信

        1.6 ROS其他重要概念

        1.7 ROS2.0展望

第2章-C++编程范式

第3章-OpenCV图像处理

第4章-机器人传感器

第5章-机器人主机

第6章-机器人底盘

第7章-SLAM中的数学基础

第8章-激光SLAM系统

第9章-视觉SLAM系统

第10章-其他SLAM系统

第11章-自主导航中的数学基础

第12章-典型自主导航系统

第13章-机器人SLAM导航综合实战


前面已经学习了大量ROS的基础知识,到这里终于可以开始编写ROS代码了,并在实战中体验和理解ROS的真正面容。ROS代码的编写围绕节点通信过程中的消息机制消息类型两个核心点展开,因此先详细阐述话题(topic)、服务(service)和动作(action)三种消息机制的原理,然后介绍这三种消息机制中使用的消息类型,最后利用C++编写分别使用这三种消息机制通信的代码实例。

话题通信方式是单向异步的,发布者只负责将消息发布到话题,订阅者只从话题订阅消息,发布者与订阅者之间并不需要事先确定对方的身份,话题充当消息存储容器的角色,这种机制很好地实现了发布者与订阅者程序之间的解耦。由于话题通信方式是单向的,即发布者并不能确定订阅者是否按时接收到消息,所以这种机制也是异步的。话题通信一般用在实时性要求不高的场景中,比如传感器广播其采集的数据。如图1-10所示,是一个通过话题消息机制传递hello消息内容的实例。

 图1-10  话题消息机制的过程

服务通信方式是双向同步的,服务客户端向服务提供端发送请求,服务提供端在收到请求后立马进行处理并返回响应信息。如图1-11所示,是一个通过服务消息机制计算两个数之和的实例。服务通信一般用在实时性要求比较高且使用频次低的场景下,比如获取全局静态地图。

 图1-11  服务消息机制的过程

动作通信方式是双向异步的,动作客户端向动作提供端发送目标后,要达到目标需要一个过程,在执行目标的过程中实时地反馈消息,并且在目标完成后返回结果。动作通信用在一个过程性的任务执行场景下,比如导航任务。如图1-12所示,是一个通过动作消息机制实现倒计时任务的实例。

 图1-12  动作消息机制的过程

进一步探究消息机制的底层实现,能够帮助大家更深入地理解ROS的性能特点。ROS的消息机制基于XMLRPC(XML Remote Procedure Call,XML远程过程调用)协议,这是一种采用XML编码格式,传输方式既不保持连接状态、也不检测连接状态的请求/响应式的HTTP协议。ROS的主节点master采用XMLRPC协议对节点的注册和连接进行管理,一旦两个节点建立了连接,节点之间就可以利用TCP/UDP协议传输消息数据了。如图1-13所示,是XMLRPC通信模型。在话题通信中,节点需要借助XMLRPC完成注册和连接,然后订阅者发起订阅之后,发布者就开始持续发布消息;在服务通信中,节点借助XMLRPC完成注册,而不需要建立连接就可以直接发起请求,响应完成后就自动断开;在动作通信中,节点借助XMLRPC完成注册,跟服务通信类似也不需要建立连接就可以直接发起目标,只是在响应的基础上多了一个反馈过程,完成后就自动断开。

 图1-13  XMLRPC通信模型

了解ROS消息机制的原理后,接下来讨论一下ROS中的消息类型。其实消息类型就是一种数据结构,最底层的数据结构还是C++/Python的基本数据类型,只是ROS利用这些基本数据类型做了自己的封装。ROS中的消息类型分两种:一种是ROS定义的标准消息类型,另一种是用户利用标准消息类型自己封装的非标准消息类型。可以说用户自定义的非标准消息类型是对标准消息类型的有效补充。不管是标准的消息类型还是自定义的消息类型,都需要在功能包中进行封装,因此使用消息类型的时候需要使用功能包名和子类型名同时进行标识。ROS标准消息类型主要封装在std_msgs、sensor_msgs、geometry_msgs、nav_msgs、actionlib_msgs这些功能包中,并且这些消息类型大部分用在话题通信中,如表1-5所示。

表1-5  ROS标准消息类型

封装

功能包

std_msgs

sensor_msgs

geometry_msgs

nav_msgs

actionlib_msgs

话题

消息

类型

Bool

Byte

ByteMultiArray

Char

ColorRGBA

Duration

Empty

Float32

Float32MultiArray

Float64

Float64MultiArray

Header

Int16

Int16MultiArray

Int32

Int32MultiArray

Int64

Int64MultiArray

Int8

Int8MultiArray

MultiArrayDimension

MultiArrayLayout

String

Time

UInt16

UInt16MultiArray

UInt32

UInt32MultiArray

UInt64

UInt64MultiArray

UInt8

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SLAM (Simultaneous Localization and Mapping) 是指在不依赖外部定位设备的情况下,同时完成自主机器人的定位和环境地图的构建的一种技术。ROS2 是一种流行的机器人操作系统,提供了丰富的 SLAM 算法和工具库,以下是一些基于 ROS2 的常见 SLAM 算法: 1. Cartographer:Google 推出的一种实时 2D/3D SLAM 算法,可用于车辆、机器人和无人机等平台。 2. Gmapping:一种基于激光雷达的 SLAM 算法,通过对激光雷达数据进行建图和定位实现自主机器人的导航。 3. Hector SLAM:一种使用单个 2D 激光雷达进行建图和定位的SLAM 算法,特别适用于室内环境。 4. ORB-SLAM2:一种基于单目/双目/RGB-D 摄像头的 SLAM 算法,可用于室内和室外环境。 5. LOAM:一种使用激光雷达的实时 SLAM 算法,能够快速生成高精度的 3D 点云地图。 这些 SLAM 算法都有各自的优缺点,开发者需要根据具体应用场景选择适合的算法。 ### 回答2: 在基于ROS2开发的SLAM算法中,有以下几种常见的算法: 1. 松耦合SLAM(LSD-SLAM):LSD-SLAM是一种基于视觉的SLAM算法,通过单目相机实时建模和定位。它能够实时地跟踪摄像机的运动,同时构建并维护一个地图模型。 2. 视觉惯性里程计(VINS-Mono):VINS-Mono是一种基于单目相机和惯性测量单元(IMU)的SLAM算法。它通过融合相机和IMU的数据,实现高精度的相机位姿估计和地图构建。 3. 激光SLAM(Cartographer):Cartographer是一种基于激光雷达的SLAM算法。它能够通过激光雷达扫描地图环境,实时定位并构建二维或三维的地图模型。 4. 深度学习SLAM(DeepTAM):DeepTAM是一种基于深度学习的SLAM算法。它利用深度神经网络从图像中预测相机的位姿和地图的结构,实现实时的SLAM定位和地图构建。 这些基于ROS2开发的SLAM算法都具有不同的特点和适用场景。用户可以根据实际需求选择合适的算法进行开发和应用。 ### 回答3: 在基于ROS 2开发的SLAM算法中,有几种常见的算法: 1. 点云SLAM算法:这种算法通过使用传感器产生的点云数据来进行环境建模和定位。常见的点云SLAM算法包括LOAM(Lidar Odometry and Mapping)和LeGO-LOAM(Lightweight and Ground-Optimized Lidar Odometry and Mapping)。 2. 视觉SLAM算法:这种算法使用摄像头捕捉的图像进行环境建模和定位。常见的视觉SLAM算法包括ORB-SLAM2(Oriented FAST and Rotated BRIEF-Simultaneous Localization and Mapping)和LSD-SLAM(Large-Scale Direct Monocular SLAM)。 3. 深度学习SLAM算法:这种算法结合了深度学习技术和SLAM算法,使用传感器数据进行场景理解,并实现环境建模和定位。常见的深度学习SLAM算法包括DeepSLAM、DynaSLAM和Depth-VO-Feat。 在开发基于ROS 2的SLAM算法时,可以使用ROS 2提供的功能来处理消息传递和节点通信,同时可以通过ROS 2的Package和库来实现算法的开发和集成。此外,ROS 2的分布式架构也提供了更好的可扩展性和灵活性,使得SLAM算法在多机器人系统中更容易部署和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值