经典文献阅读之--Wheel-SLAM(低成本轮式机器人定位算法)

news2024/11/26 4:35:00

0. 简介

最近随着越来越多的团队开始注重将SLAM应用在机器人和无人驾驶上,最近SLAM的顶刊顶会也开始想着多模态和低成本这两个方向开始发力。而本文讲的这个《Wheel-SLAM: Simultaneous Localization and Terrain Mapping Using One Wheel-mounted IMU》就是讲了如何基于车轮安装低成本IMU的轮式机器人定位算法(Wheel-INS)并同时利用车轮IMU感知地形特征实现回环检测,将Wheel-INS拓展为SLAM方案(Wheel-SLAM)。目前相关的代码已经在Github上开源Wheel-INS和Wheel-SLAM,个人感觉这类结构比较简单的开源方案潜力还是比较大的,因为这类可以更好地嵌入到各个现有的模块中。
在这里插入图片描述

1. 文章贡献

移动机器人需要一种对环境干扰具有鲁棒性的可靠位姿估计器。为此,惯性测量单元(IMU)发挥了重要作用,因为它们可以独立感知车辆的全运动状态。然而,由于固有的噪声和偏置不稳定性,它会出现累积误差,尤其是对于低成本传感器。在我们之前对 Wheel-INS的研究中,我们提出通过在机器人的轮子上安装 IMU 以利用旋转调制来限制纯惯性导航系统 (INS) 的误差漂移。但是,由于缺乏外部校正信号,它仍然在很长一段时间内漂移。在这篇文章中,我们建议利用 Wheel-INS 的环境感知能力来实现仅使用一个 IMU 的同时定位和建图 (SLAM)。具体来说,我们使用路堤角度(由 Wheel-INS 估计的机器人滚动角度反映)作为地形特征,以使用 Rao-Blackwellized 粒子滤波器实现闭环。根据粒子维护的网格图中的机器人位置,对路堤角度进行采样和存储。根据当前估计的滚动序列与地形图之间的差异更新粒子的权重。本文的贡献如下:

  1. 提出并实现了一种只有一个 Wheel-IMU 使用地形特征(由 Wheel-IMU 测量)的 SLAM 系统。
  2. 我们通过广泛的现场实验说明了利用机器人滚动角估计来实现闭环以有效限制Wheel-INS中的误差漂移的可行性。
  3. 据我们所知,这是文献中第一个只为轮式机器人使用一个低成本轮式 IMU 的 SLAM 系统。

2. 相关工作

这部分的内容是基于轮速计的,所以我们需要带领大家先了解一下相关工作,从而才可以更加深入的了解作者的思想。

2.1 基于地形匹配的定位

基于地形的车辆定位利用道路信息提供了一种可用的替代GNSS来获取绝对定位结果的方法。地形特征的重复、位置相关性使其可用于机器人的定位和建图[10]。通常,地形特征是通过车内惯性传感器提取的,例如,IMU可以通过车身俯仰角度测量道路坡度,通过车身横摆角度测量道路倾斜角度,通过车辆偏航角速率测量道路曲率[11]。基本假设是惯性传感器信号意味着车辆对地形表面的响应,同样的地形表面会引起类似的车辆运动[12]。现有文献主要采用车辆俯仰角度和俯仰角度差作为基于地形的定位特征[13],[14],虽然横滚角度也可以发挥同样的作用[15],[16]。然而,使用车载惯性信号来确定地形信息会受到车辆操作的影响,例如,制动可能会导致车辆俯仰变化的意外变化[10],向心加速度可能会引入车辆横滚角度与道路倾斜角度之间的差异[17]。

已经研究了多种方法将地形特征匹配结果集成到定位流程中[10],[12],而PF方法在最近的研究中受到了更多关注。在PF方法中,通过评估车内测量值(例如,横滚、俯仰等)与地图响应之间的差异来更新粒子的权重[10],[15],[18]。Martini等人[19]使用Pearson积矩相关系数作为距离度量来比较道路坡度测量值与参考地图。然而,在所有这些方法中都需要预先构建地图,这限制了其应用。此外,用于测量地形信息的惯性传感器都安装在车身上。本文提出了一种在没有预先地图的情况下同时定位机器人并测量道路倾斜角度的方法,扩展了我们之前的研究[1],[2]。由于IMU安装在机器人车轮上,因此地形匹配不会受到车辆操作的影响,这与IMU安装在车身上的情况不同。

2.2 仅使用惯性传感器的SLAM

最近,基于深度学习的惯性定位系统在行人[20],[21]和车辆导航[22]方面展示了有希望的结果。这些方法从原始惯性测量数据[20],[21]或动态测量噪声[22]中学习运动信息以数据驱动的方式解决惯性里程计问题,但未能利用环境信号来限制长期位置漂移。
Angermann等人[23]提出了一种仅使用脚踏式IMU(FootSLAM)的行人SLAM系统,利用了人类感知和认知的优势。采用动态贝叶斯网络来表示当行人在受限制的环境中行走时(例如办公楼),他或她主要依赖视觉线索来避开障碍物并确定可访问区域的事实。具体而言,该算法基于PF实现,其中粒子的权重通过行人穿越相邻六边形的规则2D网格的概率来更新。之后,构建了一个概率转移图,隐含地编码了影响行人视觉印象和意图的环境特征。与FootSLAM不同,Wheel-SLAM使用Wheel-IMU来明确提取地形特征以进行回路闭合检测。
总之,Wheel-SLAM借鉴了地形匹配型车辆定位和FootSLAM的思想。与Wheel-INS [1]相比,我们通过使用Wheel-IMU提取道路特征来扩展该方法,从而实现回路闭合,进一步限制误差漂移。在WheelSLAM中,我们实时维护和更新网格地图,并使用Wheel-INS的DR结果检测回路闭合。之后,我们使用当前估计值和地图之间的roll角序列匹配结果来更新粒子的权重,以保证鲁棒性。

3. 方法背景(回顾前面内容,并作为核心)

Wheel-INS [1]是Wheel-SLAM的基础。它被用来提供机器人的里程计和滚动角估计。Wheel-INS有两个主要优点。首先,轮速可以通过陀螺仪输出和轮半径计算,从而实现与ODOM/INS相同的信息融合,仅需一个IMU(无需其他传感器)。
其次,它可以利用旋转调制来限制INS的误差漂移。由于篇幅限制,在这里只概述了Wheel-INS的算法。详细信息可以参考早期的论文[1],[2],例如,Wheel-IMU的旋转调制,误差对齐的定义等。
图2展示了Wheel-IMU的安装以及相关坐标系的定义。图3展示了Wheel-INS的系统概述。首先,进行前向INS机械化以预测机器人状态。同时,使用Wheel-IMU x轴上的陀螺仪输出计算轮速。然后,将该车速视为带有非完整约束(NHC)的外部观测值,通过扩展卡尔曼滤波器(EKF) [25]更新状态。由Wheel-IMU陀螺仪数据和轮半径计算得出的前向轮速可写成:
在这里插入图片描述

图2. Wheel-IMU的安装方案和车辆坐标系(v-frame)、车轮坐标系(w-frame)和IMU机体坐标系(b-frame)的定义。 [1]

在这里插入图片描述

图3. Wheel-INS的概述[1]。其中, ω ω ω f f f分别是Wheel-IMU测量到的角速率和特定力;PVA代表Wheel-IMU的位置、速度和姿态。我们使用Wheel-IMU的输出来执行INS机械化以预测机器人状态(PVA)。在Wheel-IMU的 x x x轴上测量到的角速度和轮半径被用于计算前向速度。将这个速度作为带有非完整约束的3D速度观测量与INS机械化结果一起,通过EKF来更新机器人状态以及通过纠正惯性传感器误差,例如陀螺仪偏差。

由车轮- imu陀螺仪数据和车轮半径计算出的前轮速度为
在这里插入图片描述
上式中, v ~ w h e e l v \tilde{v}^v_{wheel} v~wheelv v w h e e l v v^v_{wheel} vwheelv分别表示观测到的和真实的车辆前向速度; ω ~ x \tilde{ω}_x ω~x是Wheel-IMU x x x轴陀螺仪输出; ω x ω_x ωx是Wheel-IMU x x x轴真实角速度; δ ω x δω_x δωx是陀螺仪测量误差; r r r是车轮半径; e v e_v ev是轮速观测噪声,建模为高斯白噪声。
由于Wheel-IMU随车轮旋转,所以在Wheel-INS中无法确定车辆的俯仰角。换句话说,我们无法确定车辆的上升和下降。因此,我们假设车辆在水平平面上移动。然而,实验结果[1]表明,这个假设不会导致显著的导航误差。

4. 动态贝叶斯网络(略看)

PF是一种顺序蒙特卡洛方法,其基本思想是使用重要性采样和离散随机测度逼近概率分布的概念,递归地计算相关概率分布[26]。在PF中,机器人状态的后验分布由一组粒子表示,这些粒子随着新信息的整合而递归地演化。基于Rao-Blackwellization技术[27]–[29],WheelSLAM将SLAM问题分解为机器人定位问题和地形映射问题,后者是基于机器人姿态估计的。

在Wheel-SLAM中,我们尝试估计后验分布。
在这里插入图片描述
这是一个条件概率分布,表示基于控制输入 u 1 : t u_{1:t} u1:t和道路倾斜角度观测 z 1 : t z_{1:t} z1:t的机器人状态 x 1 : t x_{1:t} x1:t和地形图M的后验分布。WheelSLAM问题的条件独立性质意味着(2)中的后验分布可以分解如下:
在这里插入图片描述
其中 m i m_i mi是第 i i i个地形特征, N f N_f Nf是特征的总数。在Wheel-SLAM中,进行机器人状态估计和道路俯仰角感知时使用Wheel-INS。Wheel-SLAM使用PF来估计机器人轨迹分布。对于每个粒子,单独的轨迹基础的地形图是相互独立的。因此,每个粒子由机器人姿态和地形图组成;因此,在时间 t t t时,第 i i i个粒子可以表示为:

…详情请参照古月居

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

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

相关文章

Scala中那些奇怪的符号

<- 运算符 用于 for 循环中&#xff0c;如下所示&#xff1a; for ( i <- arr ){println( "i" i ) } -> 只会用在 k->v 里面 // Map 键值对演示 val colors Map("red" -> "#FF0000", "azure" -> "#F0FF…

WPF 控件设置透明度的方法

方法一&#xff1a;通过 Opacity 属性设置背景色透明度。范围从0-1&#xff0c;0表示完全透明&#xff0c;看不见。 通过 Opacity 属性去改变控件透明度 会影响子控件的透明度&#xff0c;是因为Opacity属性是在UIElement 类(以及Brush基类)中定义&#xff0c;所有元素都具有该…

python分析QQ群聊天记录全过程,从获取到可视化

​ 随着社交媒体的兴起&#xff0c;QQ群成为了人们交流的重要平台&#xff0c;而提取这些数据可以帮助我们了解用户关注的重点和行为&#xff0c;那么如何获取QQ群聊天记录呢&#xff1f;如何对其进行处理并分析呢&#xff1f; 这是一套完整的流程&#xff0c;从选定的QQ群中…

2023最新版SpringCloudAlibaba笔记,把微服务玩的出神入化

SpringCloud Alibaba 大家都知道&#xff0c;新的东西出现必然是因为市场的需求。由于 SpringCloud 版本更新较快&#xff0c;日积月累之下产生了许多的 Bug&#xff0c;所以 SpringCloud 微服务实现方式&#xff1a;Spring Cloud Netflix 自然而然地进入了维护状态&#xff0…

java计算器拓展

源代码&#xff1a; package shixun; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.SwingConstants;import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Font; impor…

Golang项目引入第三方依赖库

基本目录 第一步&#xff1a; 初始化依赖&#xff0c;切换到项目根目录下面&#xff0c;执行一下命令&#xff0c;g6 为 module 的名称 go mod init g6 生成 go.mod 文件 module g6 go 1.20 将来我们项目的所有依赖都会依赖于 g6 第二步&#xff1a; 引入第三方依赖 &qu…

禁烟警示器报警器

本例介绍的禁止吸烟警示器&#xff0c;可用于家庭居室或各种不宜吸烟的场合 (例如医院、会议室等)。当有人吸烟时&#xff0c;该禁止吸烟警示器会发出"请不要吸烟!"的语言警示声&#xff0c;提醒吸烟者自觉停止吸烟。 一、电路工作原理 电路原理如图 5 所示。 该…

3-如何创建等比数列?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 3-如何创建等差数列&#xff1f;

一文带你了解WebSocket与技术原理

文章目录 一、技术发展史二、什么是WebSocket三、WebSocket与Socket四、WebSocket 机制五、WebSocket API简单实现 一、技术发展史 在了解WebSocket之前&#xff0c;我们先了解这项技术的发展史&#xff0c;它可以追溯到2008年&#xff0c;当时HTML5规范中引入了该协议作为一种…

【Java】Java核心 80:Git 教程(3)初始化工作区 add与commit

文章目录 04.GIT本地操作-初始化工作区目标内容小结 05.GIT本地操作-add与commit目标内容小结 在Git中&#xff0c;初始化工作区并使用add和commit命令是进行版本控制的基本操作。 下面是对这些操作的简要解释&#xff1a; 初始化工作区&#xff1a;在使用Git之前&#xff0c…

【语音播报】没时间刷新闻热搜?让博灵语音通知终端读给你听!-声光报警灯|语音播报器|Modbus报警灯|网口语音播报|网络语音播报器

背景 每天上班太忙碌&#xff0c;没有时间刷微博&#xff0c;新闻发展的太快&#xff0c;生怕错过微博热搜&#xff0c;看着手边的博灵语音通知终端&#xff0c;决定自己写一个脚本&#xff0c;让它给我读新闻&#xff01; 少废话&#xff0c;先看东西 实现了以下效果 每90…

02 快速定位关键点并爆破

vm所进行的代码级的保护是对于软件保护的最后一层 1、API断点法 如何切换到程序的代码节的位置&#xff1f; 》od点击e->双击xxx.exe即可 程序需要读取文本框输入的内容&#xff0c;所以肯定会调用GetWindowText函数&#xff0c;所以可以ctrlg然后输入GetWindowText进行…

ChatGPT 和 Elasticsearch:分面、过滤和更多上下文

作者&#xff1a;Luca Wintergerst 在最近的一篇博客文章中&#xff0c;我们讨论了 ChatGPT 和 Elasticsearch 如何协同工作以帮助更有效地管理专有数据。 通过利用 Elasticsearch 的搜索功能和 ChatGPT 的上下文理解&#xff0c;我们演示了如何改进结果。 在这篇文章中&#…

制造业数字化转型难?低代码带来曙光

概要&#xff1a;制造业企业在数字化转型中一直面临着许多困难和挑战&#xff0c;中小企业更是如此。天翎低代码平台通过自身可视化设计、私有化部署、灵活性、扩展性和兼容性等特性&#xff0c;帮助制造业企业更好地完成数字化转型目标。不仅如此&#xff0c;天翎还推出了微鳄…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜

标准模版库 https://blog.csdn.net/shaozheng0503/article/details/129101932?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168802585416800211563089%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id1688025854168…

前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题

前端img标签中引用后端交给的图片地址时&#xff0c;有可能这个路径下图片被删除或者损坏了&#xff0c;那么页面在加载img图片时就显示为&#xff0c;太丑了。 img标签有个onerror事件&#xff0c;就是当图片未被正确加载的时候调用此事件&#xff0c;写的时候在onerror事件里…

安装国产系统Kylin-Desktop实战

前言 随着国产化系统的呼声越来越高&#xff0c;再加上今年6月红帽公司发表声明&#xff0c;只有付费才能拿到代码的通告&#xff0c;学习国产化势在必行。 在众多的国产化系统中&#xff0c;我选择了排名比较高的系统&#xff0c;今天我们就一起来安装下麒麟的操作系统 &…

习题-集合框架

目录 1.打印信息 2.ArrayList的使用 User类 测试类 3.Set的使用 汽车类 测试类 4.ArrayList使用 5.新闻 新闻类 测试类 6.返回索引 7.删除重复QQ 8.Map集合操作 9.成绩排序 学生类 测试类 10.Map基础题 学员类 测试类 11.遍历Map综合-国家名称 12.Collec…

1. Linux手写简单的线程池

目录 一、线程池的概念二、线程池的核心组件三、数据结构设计1、任务队列2、线程池 四、接口设计1、创建线程池2、销毁线程池3、抛出任务的接口 五、实现一个线程池及测试1、测试单生成者——多消费者2、测试多生产者——多消费者3、thrd_pool.h4、thrd_pool.c5、main.c6、thrd…