基于SLAM的规划算法仿真复现|SLAM|智能规划

图片来自百度百科

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

高质量博客汇总https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482


项目代码

Simulation-and-Reproduction-of-Planning-Algorithm-Based-on-SLAMhttps://github.com/Yufccode/Simulation-and-Reproduction-of-Planning-Algorithm-Based-on-SLAM

摘要

本实验报告旨在介绍一个基于认知科学原理的实验项目,该项目结合了视语言、语音识别、机器人平台以及开源仿 真环境,复现了一个单/多智能体的认知导航、认知规划和认知控制的仿真算例。本报告涵盖了对 ekfslam、FastSLAM1 和 FastSLAM2 等三种 SLAM 算法的复现实验,以及利用 Python 绘制图表和对实验结果进行分析的过程。在本实验中,智能 体的智能表现体现在多个方面。首先,通过应用 SLAM 算法,智能体能够自主定位和构建环境地图,展示了其对环境的感 知能力。其次,结合视语言和语音识别技术,智能体可以感知和理解视觉和语义信息,实现了跨模态的感知与交互能力。 最后,通过机器人平台的应用,智能体可以控制自身的行动,包括导航、路径规划和避障等。同时,本实验还突出了认知 科学的重要性。通过 SLAM 算法的应用,我们实现了智能体的自主定位和地图构建,为智能体的认知环境提供了基础。在 认知规划方面,我利用 SLAM 算法提供的地图信息,结合智能体的感知能力,进行路径规划和决策,实现了认知导航。此 外,我们还利用 SLAM 算法的结果进行认知控制,实现了智能体对环境的自主感知和行动。

关键词:

视语言、语音识别、机器人平台、开源仿真环境、认知导航、认知规划、认知控制、SLAM 算法、ekfslam、 FastSLAM1、FastSLAM2、智能体、认知科学 

Fig.1 SLAM定位建图示意图

概述

本实验报告旨在介绍一个基于认知科学原理的项目,通 过结合视语言、语音识别、机器人平台和开源仿真环境,构 建了一个单/多智能体的认知导航、认知规划和认知控制的 仿真算例。在该项目中,我们复现了 ekfslam、FastSLAM1 和 FastSLAM2 等三种 SLAM 算法,并通过实验结果的分析 和可视化展示,对这些算法的性能和表现进行评估。 在现代科技的快速发展中,智能导航和机器人系统的研 究已成为热点领域。在这个背景下,认知科学提供了一种理 论和方法框架,以增强智能体在环境中的感知、决策和行动 能力。视语言和语音识别技术为智能体提供了对环境的视觉 和语义信息的感知能力,机器人平台则为智能体的控制和执行提供了实现手段。

SLAM 算法作为一种基础技术,在智能导航和机器人系 统中起着重要的作用。它允许智能体在未知环境中进行自主 定位和地图构建,为导航、规划和控制提供了必要的环境信 息。本实验报告将着重研究和评估 ekfslam、FastSLAM1 和 FastSLAM2三种SLAM算法在认知导航、规划和控制方面 的性能,从而探索其在认知科学中的应用潜力。如图1所示。

通过实验结果的分析和对比,我们将深入探讨每个算法 的优势和局限性,从而为智能导航和机器人系统的发展提供 有价值的见解。此外,我们还将重点讨论本实验中的视语言、 语音识别和机器人平台的应用,以及其对认知导航、规划和控制的贡献。

SLAM的优势

定位问题:“我需要有地图,才能定位”

建图问题:“我需要有定位,才能建图”

SLAM:“定位和图我都不需要,我可以边建图边定位”

实验原理

本实验主要包含以下三种 SLAM 算法:

  1. EKF-SLAM
  2. FastSLAM 1.0
  3. FastSLAM 2.0

EKF-SLAM

EKF-SLAM(Extended Kalman Filter SLAM)是一种基 于扩展卡尔曼滤波器的SLAM算法。它通过使用非线性动 力学模型和非线性观测模型来估计机器人的位置和地图。EKF-SLAM 的核心思想是将机器人的状态表示为一个高斯 分布,通过递归地更新和估计机器人的位置和地图。EKF-SLAM 的算法步骤如图2所示。

Fig.2 EKF-SLAM 算法流程

卡尔曼滤波器

卡尔曼滤波器是一种用于估计系统状态的滤波器,其原理简单描述如下:

预测(Prediction)

- 状态预测:

- 先验协方差预测:

更新(Update)

- 卡尔曼增益:

- 状态更新:

- 协方差更新: 

 其中,xˆk 是状态估计值,Pk 是状态协方差矩阵,Fk 是 状态转移矩阵,Bk 是控制输入矩阵,uk 是控制输入,Qk 是过程噪声协方差矩阵,zk 是测量值,Hk 是测量模型矩阵, Rk 是测量噪声协方差矩阵,I 是单位矩阵。 卡尔曼滤波器通过预测和更新步骤,利用系统模型和测 量数据递归地估计系统的状态。

FastSLAM 1.0

FastSLAM 1.0 是一种基于粒子滤波器的 SLAM 算法。 它通过使用粒子滤波器来估计机器人的位置和地图。Fast- SLAM 1.0 使用了称为” 分解” 的方法,将机器人的状态估计 分解为对每个粒子进行独立估计的任务,从而提高了算法的 效率和精度。

算法流程如图 3 所示。

Fig.3
Fig.3 FastSLAM 1.0 算法流程

FastSLAM 2.0

FastSLAM 2.0 是 FastSLAM 系列算法的改进版本,也是一种基于粒子滤波器的 SLAM 算法。与 FastSLAM 1.0 相比,FastSLAM 2.0 引入了称为” 无向图” 的数据结构来表示地图, 从而进一步提高了算法的效率和精度。

Fig.4 FastSLAM2.0算法流程

粒子滤波器

粒子滤波器是一种基于蒙特卡洛方法的滤波器,用于对系统状态进行估计。它通过使用一组粒子来表示可能的系统状态,并根据观测数据对这些粒子进行加权更新,以得到对系统状态的估计。

三种 SLAM 算法的对比

EKF-SLAM、FastSLAM 1.0 和 FastSLAM 2.0 是三种不同的SLAM算法。EKF-SLAM使用卡尔曼滤波器来处理机器 人状态和地图的估计,而 FastSLAM 1.0 和 FastSLAM 2.0 使 用粒子滤波器来对机器人路径和地图进行估计。FastSLAM 2.0 在 FastSLAM 1.0 的基础上引入了 Rao-Blackwellized 粒子 滤波器,提高了定位和地图构建的精度。

传感器模型:传递函数如公式所示。

实验过程和结果分析

对于三种算法:

  1. EKF-SLAM
  2. FastSLAM 1.0
  3. FastSLAM 2.0

我都对结果进行了仿真的复现。

EKF-SLAM

这是一个基于扩展卡尔曼滤波(EKF) 的 SLAM 示例。 蓝线代表真实轨迹,黑线代表航位推算轨迹,红线代表使用 EKF SLAM 估计的轨迹。绿色的十字表示估计的地标点。仿 真结果如图 5 所示。

FastSLAM 1.0

FastSLAM 算法的实现基于粒子滤波器,属于概率 SLAM方法的一种。它可用于基于特征的地图或占据栅格地图,如 图6所示。如图 6 所示,粒子滤波器通过一组粒子表示机器人的估 计。每个单独的粒子具有独立的置信度,它包含姿态 (x, y, θ) 和一组地标位置 [(x1 , y1 ), (x2 , y2 ), ...(xn , yn )](n 个地标)。

蓝线是真实轨迹;红线是估计轨迹;红点表示粒子的分布;黑线表示航位推算轨迹;蓝叉表示观测和估计的地标;黑叉表示真实地标;换句话说,每个粒子维护一个确定性的 姿态和n个地标的扩展卡尔曼滤波器,并在每次测量时更新它们。

FastSLAM 2.0

仿真结果如图 7 所示。

基于 SLAM 的仿真规划实例

实验结果

我在代码中构建OccupancyGridMapping,一个用于处 理里程计和激光数据,并使用占据栅格图绘制结果的 Python 应用程序。该应用程序从config.yaml文件中读取输入数据集,处 理数据,并绘制一个占据栅格地图。如下图8所示。gif动画文件可见附件。

主要原理是基于占据栅格地图建图算法中的逆传感器模型(inversesensormodel),根据机器人的姿态和激光扫描结 果来更新地图的占据概率。逆传感器模型通过计算每个单元 格被占据的对数概率来表示单元格的占据状态,然后将计算得到的对数概率加到对应单元格的当前对数概率上,实现对 单元格占据概率的贝叶斯更新。通过对激光扫描结果进行处 理和转换,确定被占据的单元格和自由单元格,并更新地图 的对数概率。

这种占据栅格地图的建图方法常用于移动机器人的环境 感知和自主导航中,通过激光传感器获取环境信息,将其映 射到栅格地图上,用于机器人的路径规划和避障等任务。

主要包括了以下几个部分:

数据处理: 该算法能够处理来自机器人激光传感器的数 据,并将其转换为占据栅格地图的形式。通过对传感器数据 进行解析、处理和映射,提取环境信息并生成地图。

自主决策: 算法通过逆传感器模型将机器人的姿态和激 光扫描结果转化为地图上的占据概率,实现对地图的贝叶斯更新。机器人可以根据更新后的地图,进行路径规划、避障 和导航等决策,以实现自主移动和环境感知。

移动机器人导航: 占据栅格地图算法为移动机器人提供 了环境感知和导航的能力。机器人可以利用生成的地图进行 路径规划,避免障碍物,达到目标位置。

环境建模和监测: 占据栅格地图算法可以用于环境建模 和监测任务,如室内定位、三维地图重建等。机器人可以通 过扫描环境,生成地图并实时更新,从而对环境进行建模和 监测。

自主避障: 利用占据栅格地图,机器人可以识别和避免 障碍物。通过实时更新地图,机器人可以检测到新出现的障 碍物并规避,保证机器人的安全和导航效果。

占据栅格地图算法在机器人感知和决策中具有广泛的应用价值,为机器人提供了环境感知、路径规划和决策等功能,使机器人能够在复杂和未知的环境中自主地进行移动和任务 执行。它在自动驾驶、室内导航、环境监测和机器人控制等 领域有着重要的应用。

三种算法的性能分析

这三种算法的复杂度包括环境条件、传感器质量、算法实现和参数设置等。此外,不同的算法可能在不同的场景和 任务上表现更好。

然而,就整体而言,FastSLAM 2.0 通常被认为是比 EKF- SLAM和FastSLAM1.0更准确的算法,尤其是在具有大量 特征点(地标)的复杂环境中。这是因为 FastSLAM 2.0 使用 了一种粒子滤波器的变种,它能够更好地处理非线性和非高 斯的系统和测量模型。

相比之下,EKF-SLAM和FastSLAM1.0都使用了扩展 卡尔曼滤波器(EKF),该滤波器对非线性和非高斯的模型的 逼近可能会引入估计误差。尤其是在高度非线性的情况下, 如机器人在大幅度旋转或存在非线性传感器失真的情况下, EKF-SLAM 和 FastSLAM 1.0 可能会产生较大的估计误差。

然而,值得强调的是,算法的准确性还受到实际应用中 其他因素的影响。例如,传感器噪声、地标检测和数据关联的准确性、初始化质量以及算法参数的选择都会对准确性产生影响。因此,在具体的应用中,对于特定的问题和环境,综合考虑各种因素,选择适合的SLAM算法是必要的。

SLAM 在认知科学领域的发展前景和改进

经过一个学期的课堂学习和资料的查阅,我对 SLAM 这个算法,总结了一些可以改进的方面。
SLAM 算法在认知科学领域有着广阔的发展前景。随着传感器技术和计算能力的不断提高,SLAM算法可以在实 时、高精度的环境感知和自主导航中发挥越来越重要的作 用。以下是 SLAM 算法在认知科学领域的发展前景和一些 改进的替代方法:

1. 多传感器融合:将多种传感器数据(如激光雷达、摄 像头、惯性测量单元)融合在一起,可以提高SLAM算法的 鲁棒性和准确性。例如,将视觉 SLAM 与激光 SLAM 相结 合,可以在不同的环境条件下实现更好的感知和建图。

2. 深度学习与 SLAM 的结合:深度学习技术在图像处 理和感知任务中取得了重大突破,将其与 SLAM 算法结合 可以提高环境感知和地图构建的准确性。例如,通过深度学 习方法实现语义分割、目标检测和姿态估计,可以提供更丰 富的地图信息和语义理解。

3. 视觉惯性 SLAM(Visual-Inertial SLAM):结合视觉

和惯性传感器的信息可以提供更准确和鲁棒的位置和姿态估 计。视觉惯性 SLAM 在自主导航、增强现实和虚拟现实等领 域具有潜在的应用价值。

4. 非线性优化方法:改进 SLAM 算法的非线性优化方 法可以提高估计的准确性。例如,基于图优化的方法,如 因子图优化(Factor Graph Optimization)和非线性优化技术

(如 GTSAM),可以更好地处理大规模的 SLAM 问题,提高 估计的稳定性和精度。

5. 实时性和效率:随着实时应用需求的增加,改进 SLAM 算法的实时性和效率是一个重要的方向。例如,基于 快速搜索和并行计算的方法可以提高算法的运行速度,以适 应实时应用的要求。

附件📎

‘2D-slam-example/‘ 目录:slam 可视化仿真实例

‘SLAM/‘目录:slam 算法源代码

‘figs/‘目录:报告中图片原图

‘requirements/‘目录:代码执行环境配置

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

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

相关文章

go-zero 是如何实现令牌桶限流的?

原文链接: 上一篇文章介绍了 如何实现计数器限流?主要有两种实现方式,分别是固定窗口和滑动窗口,并且分析了 go-zero 采用固定窗口方式实现的源码。 但是采用固定窗口实现的限流器会有两个问题: 会出现请求量超出限…

Apoll 多项式规划求解

一、纵向规划 void QuarticPolynomialCurve1d::ComputeCoefficients(const float x0, const float dx0, const float ddx0, const float dx1,const float ddx1, const float p) {if (p < 0.0) {std::cout << "p should be greater than 0 at line 140." &…

MySQL中基础查询语句

用户表user数据如下&#xff1a; iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543famale20北京大学Deijing42315female 23 浙江大学ZheJiang55432male25山东大学Shandong 1&#xff0c;写出ddl语句创建如上表&#xff0c;…

解密Redis:应对面试中的缓存相关问题2

面试官&#xff1a;Redis集群有哪些方案&#xff0c;知道嘛&#xff1f; 候选人&#xff1a;嗯~~&#xff0c;在Redis中提供的集群方案总共有三种&#xff1a;主从复制、哨兵模式、Redis分片集群。 面试官&#xff1a;那你来介绍一下主从同步。 候选人&#xff1a;嗯&#xff…

设计模式行为型——模板模式

目录 模板模式的定义 模板模式的实现 模板模式角色 模板模式类图 模板模式举例 模板模式代码实现 模板模式的特点 优点 缺点 使用场景 注意事项 实际应用 模板模式的定义 模板模式&#xff08;Template Pattern&#xff09;属于行为型设计模式&#xff0c;又叫模版…

第7章 通过内网本机IP获取微信code值及其对code值的回调。

在第5章中讲述了怎样通过内网穿透外外网从而获取微信code值&#xff0c;实际上微信测试帐号管理页中也支持通过内网本机IP获取微信code值。 1 重构launchSettings.json "https": { "commandName": "Project", "dotnetRunMessages": t…

数据结构——空间复杂度

3.空间复杂度 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。 空间复杂度计算规则基本跟实践复杂…

kafka partition的数据文件(offffset,MessageSize,data)

partition中的每条Message包含了以下三个属性&#xff1a; offset&#xff0c;MessageSize&#xff0c;data&#xff0c;其中offset表示Message在这个partition中的偏移量&#xff0c;offset不是该Message在partition数据文件中的实际存储位置&#xff0c;而是逻辑上一个值&…

【刻削生千变,丹青图“万相”】阿里云AI绘画创作模型 “通义万相”测评

刻削生千变&#xff0c;丹青图“万相 4月7日&#xff0c;阿里大模型“通义千问”开始邀请用户测试体验。现阶段该模型主要定向邀请企业用户进行体验测试&#xff0c;用户可通过官网申请&#xff08;tongyi.aliyun.com&#xff09;&#xff0c;符合条件的用户可参与体验。 随…

RabbitMQ(一) - 基本结构、SpringBoot整合RabbitMQ、工作队列、发布订阅、直接、主题交换机模式

RabbitMQ结构 Publisher &#xff1a; 生产者 Queue: 存储消息的容器队列&#xff1b; Consumer:消费者 Connection&#xff1a;消费者与消息服务的TCP连接 Channel:信道&#xff0c;是TCP里面的虚拟连接。例如&#xff1a;电缆相当于TCP&#xff0c;信道是一条独立光纤束&…

在vue中Antv G2 折线图如何添加点击事件获取折线上点的值

在项目中有个需求是点击折线图的点&#xff0c;获取当前点的信息&#xff0c;其它图形都可以参考相关的API获取到&#xff0c;但area做的折线图怎么都获取不到点击的信息&#xff0c;只能获取全部的信息&#xff0c;最终解决如下&#xff1a; 实现思路 用户的鼠标在折线图上移…

基于低代码和数字孪生技术的电力运维平台设计

电力能源服务商在为用能企业提供线上服务的时候&#xff0c;不可避免要面对用能企业的各种个性化需求。如果这些需求和想法都要靠平台厂家研发人员来实现&#xff0c;那在周期、成本、效果上都将是无法满足服务运营需要的&#xff0c;这也是目前很多线上能源云平台应用效果不理…

单例模式-java实现

介绍 单例模式的意图&#xff1a;保证某个类在系统中有且仅有一个实例。 我们可以看到下面的类图&#xff1a;一般的单例的实现&#xff0c;是属性中保持着一个自己的私有静态实例引用&#xff0c;还有一个私有的构造方法&#xff0c;然后再开放一个静态的获取实例的方法给外界…

快速修复应用程序中的问题的利器—— Android热修复

热修复技术在Android开发中扮演着重要的角色&#xff0c;它可以帮助开发者在不需要重新发布应用程序的情况下修复已经上线的应用程序中的bug或者添加新的功能。 一、热修复是什么&#xff1f; 热修复&#xff08;HotFix&#xff09;是一种在运行时修复应用程序中的问题的技术…

树结构转换

思路&#xff1a; 先把数组转化成一个对象&#xff08;map&#xff09;&#xff0c;对象的key值是对象的id 遍历对象&#xff1b;map[map[k].pid].children.push(map[k]),【k代表索引】&#xff0c;pid等于0代表是根节点 // 数结构转换let arr [{id: 1,pid: 0,name: "b…

【OpenVINOSharp】 基于C#和OpenVINO2023.0部署Yolov8全系列模型

基于C#和OpenVINO2023.0部署Yolov8全系列模型 1 项目简介1.1 OpenVINOTM 2 OpenVinoSharp2.1 OpenVINOTM 2023.0安装配置2.2 C 动态链接库2.3 C#构建Core推理类2.4 NuGet安装OpenVinoSharp 3 获取和转换Yolov8模型3.1 安装ultralytics3.2 导出yolov8模型3.3 安装OpenVINOTM Pyt…

python——案例15:判断奇数还是偶数

案例15&#xff1a;判断奇数还是偶数numint(input(输入数值&#xff1a;))if(num%2)0: #通过if语句判断print("{0}是偶数".format(num))else: #通过else语句判断print("{0}是奇数".format(num))

flask-migrate使用

1.介绍 # 表,字段发生变化&#xff0c;都会有记录&#xff0c;自动同步到数据库中--》django支持这种操作 # 原生的sqlalchemy&#xff0c;不支持修改表的 # flask-migrate可以实现类似于django的 python manage.py makemigrations #记录 python manage.py migrate …

Docker之jenkins部署harbor在harbor中完成部署

Docker之jenkins部署harbor在harbor中完成部署 1、harbor作用 Harbor允许用户用命令行工具对容器镜像及其他Artifact进行推送和拉取&#xff0c;并提供了图形管理界面帮助用户查阅和删除这些Artifact。在Harbor 2.0版本中&#xff0c;除容器镜像外&#xff0c;Harbor对符合OCI…

爬虫程序中使用爬虫ip的优势

作为一名爬虫技术员&#xff0c;我发现在爬虫程序中使用代理IP可以提升爬取效率和匿名性。今天&#xff0c;我就来详细讲解一下代理IP在爬虫程序中的工作原理及应用。 首先&#xff0c;我们来了解一下代理IP在爬虫程序中的工作原理。当我们使用爬虫程序进行数据采集时&#xf…