当前位置: 首页 > news >正文

机器人SLAM与自主导航

机器人技术的迅猛发展,促使机器人逐渐走进了人们的生活,服务型室内移动机器人更是获得了广泛的关注。但室内机器人的普及还存在许多亟待解决的问题,定位与导航就是其中的关键问题之一。在这类问题的研究中,需要把握三个重点:一是地图精确建模;二是机器人准确定位;三是路径实时规划。在近几十年的研究中,对以上三个重点提出了多种有效的解决方法。

室外定位与导航可以使用GPS,但在室内这个问题就变得比较复杂。为了实现室内的定位定 姿, 一 大 批 技 术 不 断 涌 现, 其 中, SLAM 技 术 逐 渐 脱 颖 而 出。 SLAM(Simultaneous
Localization and Mapping,即时定位与地图构建)最早由Smith、Self和Cheeseman于1988年提出。作为一种基础技术,SLAM从最早的军事用途到今天的扫地机器人,吸引了一大批研究者和爱好者,同时也使这项技术逐步走入普通消费者的视野。

使用ROS实现机器人的SLAM和自主导航等功能是非常方便的,因为有较多现成的功能包可 供 开 发 者 使 用, 如 gmapping、 hector_slam、 cartographer、 rgbdslam、 ORB_SLAM、
move_base、amcl等。本章我们将学习这些功能包的使用方法,并且使用仿真环境和真实机器人实现这些功能。

理论基础

SLAM可以描述为:机器人在未知的环境中从一个未知位置开始移动,移动过程中根据位置估计和地图进行自身定位,同时建造增量式地图,实现机器人的自主定位和导航。

想象一个盲人在一个未知的环境里,如果想感知周围的大概情况,那么他需要伸展双手作为他的“传感器”,不断探索四周是否有障碍物。当然这个“传感器”有量程范围,他还需要不断移动,同时在心中整合已经感知到的信息。当感觉新探索的环境好像是之前遇到过的某个位置,他就会校正心中整合好的地图,同时也会校正自己当前所处的位置。当然,作为一个盲人,感知能力有限,所以他探索的环境信息会存在误差,而且他会根据自己的确定程度为探索到的障碍物设置一个概率值,概率值越大,表示这里有障碍物的可能性越大。一个盲人探索未知环境的场景基本可以表示SLAM算法的主要过程。这里不详细讨论SLAM的算法实现,只对概念做一个基本理解,感兴趣的读者可以查找相关资料进行深度学习。

下图所示即为使用SLAM技术建立的室内地图。

在这里插入图片描述

家庭、商场、车站等场所是室内机器人的主要应用场景,在这些应用中,用户需要机器人通过移动完成某些任务,这就需要机器人具备自主移动、自主定位的功能,我们把这类应用统称为自主导航。

自主导航往往与SLAM密不可分,因为SLAM生成的地图是机器人自主移动的主要蓝图。这类问题可以总结为:在服务机器人工作空间中,根据机器人自身的定位导航系统找到一条从起始状态到目标状态、可以避开障碍物的最优路径。

要完成机器人的SLAM和自主导航,机器人首先要有感知周围环境的能力,尤其要有感知周围环境深度信息的能力,因为这是探测障碍物的关键数据。用于获取深度信息的传感器主要有以下几种类型。

(1)激光雷达
激光雷达是研究最多、使用最成熟的深度传感器,可以提供机器人本体与环境障碍物之间的距离信息,很多常见的扫地机器人就配有高性价比的激光雷达(见图9-2)。激光雷达的优点
是精度高,响应快,数据量小,可以完成实时SLAM任务;缺点是成本高,一款进口高精度的激光雷达价格在一万元以上。现在很多国内企业专注高性价比的激光雷达,也有不少优秀的产品已经推向市场

在这里插入图片描述
(2)摄像头
SLAM所用到的摄像头又可以分为两种:一种是单目摄像头,也就是使用一个摄像头完成SLAM。这种方案的传感器简单,适用性强,但是实现的复杂度较高,而且单目摄像头在静止状态下无法测量距离,只有在运动状态下才能根据三角测量等原理感知距离。另一种就是双目摄像头(见图9-3),相比单目摄像头,这种方案无论是在运动状态下还是在静止状态下,都可以感知距离信息,但是两个摄像头的标定较为复杂,大量的图像数据也会导致运算量较大。

在这里插入图片描述

3)RGB-D摄像头
RGB-D摄像头是近年来兴起的一种新型传感器,不仅可以像摄像头一样获取环境的RGB图像信息,也可以通过红外结构光、Time-of-Flight等原理获取每个像素的深度信息。丰富的数据
让RGB-D摄像头不仅可用于SLAM,还可用于图像处理、物体识别等多种应用;更重要的一点是,RGB-D摄像头成本较低,它也是目前室内服务机器人的主流传感器方案。常见的RGB-D摄
像头有Kinect v1/v2、华硕Xtion Pro等(见图9-4)。当然,RGB-D**摄像头也存在诸如测量视野窄、盲区大、噪声大等缺点。**

在这里插入图片描述

准备工作

ROS中SLAM和自主导航的相关功能包可以通用于各种移动机器人平台,但是为了达到最佳效果,对机器人的硬件仍然有以下三个要求。

1)导航功能包对差分、轮式机器人的效果好,并且假设机器人可直接使用速度指令进行控制,速度指令的定义如图9-5所示。

  • linear:机器人在xyz三轴方向上的线速度,单位是m/s。
  • angular:机器人在xyz三轴方向上的角速度,单位是rad/s。

在这里插入图片描述
2)导航功能包要求机器人必须安装激光雷达等测距设备,可以获取环境深度信息。

3)导航功能包以正方形和圆形的机器人为模板进行开发,对于其他外形的机器人,虽然可以正常使用,但是效果可能不佳。

传感器信息

1.环境深度信息
无论是SLAM还是自主导航,获取周围环境的深度信息都是至关重要的。要获取深度信息,首先要清楚ROS中的深度信息是如何表示的。针对激光雷达,ROS在sensor_msgs包中定义了专用数据结构——LaserScan,用于存储激光消息。LaserScan消息的具体定义如图9-6所示。

rosmsg show sensor_msgs/LaserScan

在这里插入图片描述

·angle_min:可检测范围的起始角度。
·angle_max:可检测范围的终止角度,与angle_min组成激光雷达的可检测范围。
·angle_increment:采集到相邻数据帧之间的角度步长。
·time_increment:采集到相邻数据帧之间的时间步长,当传感器处于相对运动状态时进行
补偿使用。
·scan_time:采集一帧数据所需要的时间。
·range_min:最近可检测深度的阈值。
·range_max:最远可检测深度的阈值。
·ranges:一帧深度数据的存储数组。

如果使用的机器人没有激光雷达,但配备有Kinect等RGB-D摄像头,也可以通过红外摄像头获取周围环境的深度信息。但是RGB-D摄像头获取的原始深度信息是三维点云数据,而ROS的很多功能包所需要的输入是激光二维数据,是否可以将三维数据转换成二维数据呢?如果你已不记得RGB-D摄像头所发布的点云三维数据的类型,可以回顾7.1节的相关内容。

如果你已了解点云三维数据类型,那么将三维数据降维到二维数据的方法也很简单,即把大量数据拦腰斩断,只抽取其中的一行数据,重新封装为LaserScan消息,就可以获取到需要的二维激光雷达信息。这么做虽然损失了大量有效数据,但是刚好可以满足2D SLAM的需求。

原理就是这么简单,ROS中也提供了相应的功能包——depthimage_to_laserscan,可以在launch文件中使用如下方法调用:

<!-- 运行depthimage_to_laserscan节点,将点云深度数据转换成激光数据 -->
<node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan" output="screen">
<remap from="image" to="/camera/depth/image_raw" />
<remap from="camera_info" to="/camera/depth/camera_info" />
<remap from="scan" to="/scan" />
<param name="output_frame_id" value="/camera_link" />
</node>

2.里程计信息

里程计根据传感器获取的数据来估计机器人随时间发生的位置变化。在机器人平台中,较为常见的里程计是编码器,例如,机器人驱动轮配备的旋转编码器。当机器人移动时,借助旋转编码器可以测量出轮子旋转的圈数,如果知道轮子的周长,便可以计算出机器人单位时间内的速度以及一段时间内的移动距离。里程计根据速度对时间的积分求得位置这种方法对误差十分敏感,所以采取如精确的数据采集、设备标定、数据滤波等措施是十分必要的。

导航功能包要求机器人能够发布里程计nav_msgs/Odometry消息。如图9-7所示,nav_msgs/Odometry消息包含机器人在自由空间中的位置和速度估算值。

·pose:机器人当前位置坐标,包括机器人的x、y、z三轴位置与方向参数,以及用于校正误差的协方差矩阵。

·twist:机器人当前的运动状态,包括x、y、z三轴的线速度与角速度,以及用于校正误差的协方差矩阵。

上述数据结构中,除速度与位置的关键信息外,还包含用于滤波算法的协方差矩阵。在精度要求不高的机器人系统中,可以使用默认的协方差矩阵;而在精度要求较高的系统中,需要先对机器人精确建模后,再通过仿真、实验等方法确定该矩阵的具体数值。

rosmsg show nav_msgs/Odometry

在这里插入图片描述

相关文章:

机器人SLAM与自主导航

机器人技术的迅猛发展&#xff0c;促使机器人逐渐走进了人们的生活&#xff0c;服务型室内移动机器人更是获得了广泛的关注。但室内机器人的普及还存在许多亟待解决的问题&#xff0c;定位与导航就是其中的关键问题之一。在这类问题的研究中&#xff0c;需要把握三个重点&#…...

Zookeeper集群 + Kafka集群的详细介绍与部署

文章目录 1. Zookeeper 概述1.1 简介1.2 Zookeeper的工作机制1.3 Zookeeper 主要特点1.4 Zookeeper 数据结构1.5 Zookeeper的相关应用场景1.5.1 统一命名服务1.5.2 统一配置管理1.5.3 统一集群管理1.5.4 服务器动态上下线1.5.5 软负载均衡 1.6 Zookeeper 选举机制1.6.1 第一次启…...

STP、堆叠与VRRP如何使用

✍ STP生成树用在哪里&#xff1f; ✍ STP和堆叠有什么区别&#xff1f; ✍ VRRP双网关热备份如何部署&#xff1f; --- 通过交换机组成网络是局域网&#xff0c;连接终端设备的交换机就是接入层交换机。 --- 如上组网结构单一&#xff0c;不需要网工。 容易发生单点故障&…...

Go 函数的健壮性、panic异常处理、defer 机制

Go 函数的健壮性、panic异常处理、defer 机制 文章目录 Go 函数的健壮性、panic异常处理、defer 机制一、函数健壮性的“三不要”原则1.1 原则一&#xff1a;不要相信任何外部输入的参数1.2 原则二&#xff1a;不要忽略任何一个错误1.3 原则三&#xff1a;不要假定异常不会发生…...

Maven的详细介绍(maven的全据配置以及idea中maven的配置)

maven的理解 Maven 是一个强大的项目管理和构建自动化工具&#xff0c;它通过抽象的项目对象模型(POM&#xff1a;Project Object Model)和构建生命周期模型(Project Lifecycle)来对项目及其构建过程进行管理(Dependency Management System)&#xff0c;Maven 最大化的消除了构…...

Qt中Json的操作

在 Json的两种格式中介绍了Json的格式以及应用场景。由于这种数据格式与语言无关,下面介绍一下Json在Qt中的使用。 从Qt 5.0开始提供了对Json的支持,我们可以直接使用Qt提供的Json类进行数据的组织和解析。相关的类常用的主要有四个,具体如下: Json类介绍 QJsonDocument |…...

10. 机器学习-评测指标

Hi,你好。我是茶桁。 之前的课程中&#xff0c;我们学习了两个最重要的回归方法&#xff0c;一个线性回归&#xff0c;一个逻辑回归。也讲解了为什么学习机器学习要从逻辑回归和线性回归讲起。因为我们在解决问题的时候&#xff0c;有限选择简单的假设&#xff0c;越复杂的模型…...

SAP-QM-动态检验规则

Dynamic Modification Rule &#xff08;动态修改规则&#xff09; 1、决定样本大小的方式有3种&#xff1a; 手动输入比例大小采样过程 物料主数据质量视图 2、采样过程的创建方式有2种 跟批量大小有关系&#xff1a;百分比/AQL跟批量大小没有关系&#xff1a;固定值 而当…...

CCC数字钥匙设计【NFC】--NFC卡相关基础知识

CCC3.0的NFC技术中&#xff0c;除车端&#xff0c;手机端需包含NFC功能外&#xff0c;另外一般还会配置一个NFC卡&#xff0c;用于备份使用。本文主要介绍NFC卡相关的基础知识。 1、NFC卡 & 智能卡 NFC卡是一种智能卡&#xff0c;其与信用卡大小相同&#xff0c;可通过嵌入…...

SpringMVC(第一个项目HelloWorld))

文章目录 1.在maven引入依赖2.配置web.xml3.创建请求控制器4.创建springMVC的配置文件5.测试HelloWorld总结 1.在maven引入依赖 <dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring…...

GEO生信数据挖掘(九)肺结核数据-差异分析-WGCNA分析(900行代码整理注释更新版本)

第六节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。第七节延续上个数据&#xff0c;进行了差异分析。 第八节对差异基因进行富集分析。…...

二进制明文字符串加密:实现原理

二进制明文字符串加密:实现原理 背景 这里就不多做解释了&#xff0c;明文字符串暴露就是最好的逆向分析指引。无论是恶意攻击样本还是有一定安全需求的组件&#xff0c;直接暴露程序中的明文字符串会大幅降低外部的分析成本。所以需要在编译出的二进制中隐藏字符串。不过需要…...

免费SSL证书:JoySSL让您的网站更安全

在今天的数字化时代&#xff0c;保护网站和用户信息的安全至关重要。SSL&#xff08;Secure Sockets Layer&#xff09;证书通过加密网站与用户之间的通信&#xff0c;确保数据传输的安全性。让您拥有一个SSL加密的网站是至关重要的&#xff0c;但您可能会担心高昂的费用。不过…...

JavaPTA练习题 7-3 打印99乘法表

打印99乘法表 输入样例: 不需要输入 输出样例: 在这里给出相应的输出。要求&#xff1a;99乘法表中&#xff0c;每个表达式的乘法结果长度为3。 1x11 2x12 2x24 3x13 3x26 3x39 4x14 4x28 4x312 4x416 5x15 5x210 5x315 5x420 5x525 6x16 6x212 6x318 6x424…...

k8s-20 hpa控制器

hpa可通过metrics-server所提供pod的cpu 或者内存的负载情况&#xff0c;从而动态拉伸控制器的副本数&#xff0c;从而达到后端的自动弹缩 官网&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ 上传镜像 压测 po…...

操作系统【OS】操作系统的引导

激活CPU。 激活的CPU读取ROM中的boot程序&#xff0c;将指令寄存器置为BIOS(基本输入输出系统)的第一条指令&#xff0c; 即开始执行BIOS的指令。硬件自检。 启动BIOS程序后&#xff0c;先进行硬件自检&#xff0c;检查硬件是否出现故障。如有故障&#xff0c;主板会发出不同含…...

PHP的四层架构

PHP的4层架构是一种软件设计模式&#xff0c;用于将一个PHP应用程序划分为不同的层次&#xff0c;以实现解耦、可扩展和易于维护的代码结构。这个架构通常由以下四个层次组成&#xff1a; 1、 表现层&#xff08;Presentation Layer&#xff09;&#xff1a; 表现层是与用户直…...

Kafka存取原理与实现分析,打破面试难关

系列文章目录 上手第一关&#xff0c;手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么&#xff0c;以及如何使用SpringBoot对接Kafka 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析&#xff0c;打破面试难关 系列文章目录一、主题与分区1. 模型…...

JavaWeb——IDEA相关配置(Tomcat安装)

3、Tomcat 3.1、Tomcat安装 可以在国内一些镜像网站中下载Tomcat&#xff0c;同样也可以在[Tomcat官网](Apache Tomcat - Welcome!)下载 3.2、Tomcat启动和配置 一些文件夹的说明 启动&#xff0c;关闭Tomcat 启动&#xff1a;Tomcat文件夹→bin→startup.bat 关闭&#…...

MySQL:BETWEEN AND操作符的边界

文档原文&#xff1a; expr BETWEEN min AND maxIf expr is greater than or equal to min and expr is less than or equal to max, BETWEEN returns 1, otherwise it returns 0. This is equivalent to the expression (min < expr AND expr < max) if all the argume…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...