机器人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

在这里插入图片描述

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

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

相关文章

专题:链表常考题目汇总

文章目录 反转类型&#xff1a;206.反转链表完整版二刷记录 25. K个一组反转链表1 &#xff1a;子链表左闭右闭反转版本2 &#xff1a; 子链表左闭右开反转版本&#xff08;推荐&#xff09;⭐反转链表左闭右闭和左闭右开 合并类型&#xff1a;21.合并两个有序链表1: 递归法2: …

作为决策者,谁能拒绝这样一张数据可视化报表

数据分析是决策的一大助力&#xff0c;因此作为企业的管理决策者都会希望获得一份直观易懂、支持灵活自助分析的数据可视化报表&#xff0c;比如说由奥威BI数据可视化软件制作的这张BI报表。 名称&#xff1a;零售业数据分析驾驶舱 来源&#xff1a;奥威BI零售数据分析方案 …

pnpm的环境安装以及安装成功后无法使用的问题

文章目录 前言1、使用npm 安装2、安装后的注意点3、遇到问题4、配置path的环境变量&#xff08;1&#xff09;找到环境变量&#xff08;2&#xff09;找到并双击path的系统变量&#xff08;3&#xff09;复制第1步中使用npm安装的红框部分的路径&#xff08;4&#xff09;将第&…

【MySql】8- 实践篇(六)

文章目录 1. MySql保证主备一致1.1 MySQL 主备的基本原理1.2 binlog 的三种格式对比1.3 循环复制问题 2. MySql保证高可用2.1 主备延迟2.2 主备延迟的来源2.3 可靠性优先策略2.4 可用性优先策略 3. 备库为何会延迟很久-备库并行复制能力3.1 MySQL 5.6 版本的并行复制策略3.2 Ma…

编译安装Nginx+GeoIP2自动更新+防盗链+防爬虫+限制访问速度+限制连接数

此文章是Nginx的GeoIP2模块和MaxMind国家IP库相互结合&#xff0c;达到客户端IP访问的一个数据记录以及分析&#xff0c;同时还针对一些业务需求做出对Nginx中间件的控制&#xff0c;如&#xff1a;防盗链、防爬虫、限制访问速度、限制连接数等 该篇文章是从一个热爱搞技术的博…

他海投260万未回本,一天手写200面单到效率提升200%,经历了什么

他们是时代里的“小人物”&#xff0c;正经历着最为蓬勃的商业变革。年轻一代的创业老板们站在十字路口上&#xff0c;比老一辈更懂直播风口、人工智能、云计算、智能制造、数字经济等经济热词的含义。 作为北京快递行业内少见的本地人&#xff0c;范小菲形容自己的创业历程是…

YOLOv8改进实战 | 更换主干网络Backbone(一)之轻量化模型Ghostnet

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法&#xff1a; 网络剪枝&#xff1a;移除神经网络中冗余的连接和参数&#xff0c;以达到模型压缩和加速的目的。分组卷积&#xff1a;将卷积操作分解为若干个…

jmeter监听每秒点击数(Hits per Second)

jmeter监听每秒点击数&#xff08;Hits per Second&#xff09; 下载插件添加监听器执行压测&#xff0c;监听结果 下载插件 点击选项&#xff0c;点击Plugins Manager (has upgrades)&#xff0c;点击Available Plugins&#xff0c;搜索5 Additional Graphs安装。 添加监听…

FPGA的通用FIFO设计verilog,1024*8bit仿真,源码和视频

名称&#xff1a;FIFO存储器设计1024*8bit 软件&#xff1a;Quartus 语言&#xff1a;Verilog 本代码为FIFO通用代码&#xff0c;其他深度和位宽可简单修改以下参数得到 reg [7:0] ram [1023:0];//RAM。深度1024&#xff0c;宽度8 代码功能&#xff1a; 设计一个基于FPGA…

【ELK 使用指南 3】Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构(附部署实例)

EFLKK 一、Zookeeper1.1 简介1.2 zookeeper的作用1.3 Zookeeper的特点1.5 Zookeeper的数据结构1.6 Zookeeper的应用场景1.7 Zookeeper的选举机制&#xff08;重要&#xff09;1.7.1 第一次启动时1.7.2 非第一次启动时 二、Zookeeper集群部署2.1 安装前准备2.2 安装 ZookeeperSt…

(三)QT中使用QVTKOpenGLNativeWidget的简单教程以及案例,利用PCLVisualizer显示点云

先添加一个带有ui的QT应用程序。 一、在ui界面中添加QVTKOpenGLNativeWidget控件 先拖出来一个QOpenGLWidget控件 修改布局如下&#xff1a; 然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件&#xff0c;步骤如下&#xff1a; 右击QOpenGLWidget窗口&#xff0c;选…

【五:Httprunner的介绍使用】

接口自动化框架封装思想的建立。httprunner&#xff08;热加载&#xff1a;动态参数&#xff09;&#xff0c;去应用 意义不大。 day1 一、什么是Httprunner? 1.httprunner是一个面向http协议的通用测试框架&#xff0c;目前最新的版本3.X。以前比较流行的 2.X的版本。2.它的…

pytorch 入门 (三)案例一:mnist手写数字识别

本文为&#x1f517;小白入门Pytorch内部限免文章 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参考文章&#xff1a;【小白入门Pytorch】mnist手写数字识别&#x1f356; 原作者&#xff1a;K同学啊 目录 一、 前期准备1. 设置GPU2. 导入…

基于主动移频法与AFD孤岛检测的单相并网逆变器仿真(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

二、vue基础语法

一、模板语法 1、文本渲染 使用双花括号语法插入文本 <template><div><h3>msg: {{ message }}</h3></div> </template><script> export default {data() {return {message: "输出信息"}} } </script><style s…

成集云 | 思迅商慧集成用友T | 解决方案

源系统成集云目标系统 方案介绍 思迅商慧是一款集批次成本、配送复核、自助收银、供应链、加盟管理等于一身的零售管理软件。可以帮助解决客户的运营和管理难题&#xff0c;包括加盟店管理、供应商管理、配送复核管理、商品经营维护、自助收银系统等。 用友T是一款…

Node.js在Python中的应用实例解析

随着互联网的发展&#xff0c;数据爬取成为了获取信息的重要手段。本文将以豆瓣网为案例&#xff0c;通过技术问答的方式&#xff0c;介绍如何使用Node.js在Python中实现数据爬取&#xff0c;并提供详细的实现代码过程。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境…

Flutter——最详细(CustomScrollView)使用教程

CustomScrollView简介 创建一个 [ScrollView]&#xff0c;该视图使用薄片创建自定义滚动效果。 [SliverList]&#xff0c;这是一个显示线性子项列表的银子列表。 [SliverFixedExtentList]&#xff0c;这是一种更高效的薄片&#xff0c;它显示沿滚动轴具有相同范围的子级的线性列…

JavaScript爬虫程序实现自动化爬取tiktok数据教程

以下是一个使用 request-promise 和 JavaScript 的爬虫程序&#xff0c;用于爬取tiktok的内容。此程序使用了 https://www.duoip.cn/get_proxy 这段代码。 // 引入 request-promise 库 const rp require(request-promise);// 定义 get\_proxy 函数 function get_proxy() {retu…

家装、家居两不误,VR全景打造沉浸式家装体验

当下&#xff0c;用户对生活品质要求日益提升&#xff0c;越来越多的用户对多功能家装用品需求较大&#xff0c;由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式&#xff0c;通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…