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

news2024/11/24 10:45:31
图片来自百度百科

前言

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

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

高质量博客汇总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.coloradmin.cn/o/859879.html

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

相关文章

getchar()清空缓冲区剩余的空格回车等转义字符

getchar()清空缓冲区剩余的空格回车等转义字符 多次使用scanf输入字符会出现以下错误&#xff1a; #include <stdio.h> int main() {char a,b,c,d,e,f;printf("input character a,b\n");scanf("%c,%c",&a,&b);printf("a %c,b %c\n&…

【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析

**本人是第六届字节跳动青训营&#xff08;后端组&#xff09;的成员。本文由博主本人整理自该营的日常学习实践&#xff0c;首发于稀土掘金&#xff1a;&#x1f517;Go语言入门指南&#xff1a;基础语法和常用特性解析 | 青训营 本文主要梳理自第六届字节跳动青训营&#xff…

C++-排序

文章目录 常数操作时间复杂度空间复杂度O(N^2) O(1) 数据情况发生变化不影响流程 选择排序冒泡排序使用抑或运算提取出不为零的数最右边的1 1. 实现两个变量交换值2. 数组中一种数字出现奇数次,other是偶数次,找到那一种数字3. 数组中有两种数字出现奇数次,other是偶数次,找到那…

修改SqlSugar的WebFirst 代码生成器适配瀚高数据库

WebFirst代码生成器是果糖大数据团队开发的新一代 高性能 代码生成器&数据库设计工具&#xff0c;由.net core 3.1 sqlsugar 开发 &#xff08;此处摘抄自官网 &#x1f601;&#xff09; 官网地址 WebFirst 目前官网发布的版本并没有集成瀚高数据库的支持&#xff0c;本文…

hive on tez资源控制

sql insert overwrite table dwintdata.dw_f_da_enterprise2 select * from dwintdata.dw_f_da_enterprise; hdfs文件大小数量展示 注意这里文件数有17个 共计321M 最后是划分为了21个task 为什么会有21个task&#xff1f;不是128M 64M 或者说我这里小于128 每个文件一个map…

这34道接口测试 Jmeter面试题,你会吗?

接口测试 & Jmeter面试题 一、接口测试 1、接口测试流程 1、首先是从开发那里拿到API接口文档&#xff0c;了解接口业务、包括接口地址、请求方式&#xff0c;入参、出参&#xff0c;token鉴权&#xff0c;返回格式等信息。 2、然后使用Postman或Jmeter工具执行接口测试…

【图像恢复】基于交替乘子方法(ADMM)图像恢复算法研究[固定点收敛和应用](Matlab代码实现)

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

form 表单恢复初始数据

写表单的时候&#xff0c;想做到&#xff0c;某个操作时&#xff0c;表单恢复初始数据 this.$options.data().form form 是表单的对象 <template><div><el-dialog title"提示" :visible.sync"dialogVisible"><el-form :model"…

前端学习记录~2023.7.30~JavaScript重难点实例精讲~第4章 对象

第 4 章 对象 前言4.1 对象的属性和访问方式4.1.1 对象的属性&#xff08;1&#xff09;数据属性&#xff08;2&#xff09;访问器属性 4.1.2 属性的访问方式&#xff08;1&#xff09;使用.访问属性&#xff08;2&#xff09;使用[]访问属性&#xff08;3&#xff09;两者的不…

虫情测报灯的功能优势

KH-CQPest虫情测报灯是一款利用现代光、电、数控集成的虫情测报仪器。它可以通过光学/药物诱虫方式实现自动诱虫&#xff0c;并将诱捕的害虫进行无公害红外远程自动处理&#xff0c;在完成杀虫、虫体分散、拍照、运输等作业后&#xff0c;KH-CQPest虫情测报灯会自动将监测到的虫…

Clone函数

概述 Clone函数是一种用于复制的计算机函数。在程序编写中&#xff0c;除了自定义一个拷贝构造函数来实现对象复制外&#xff0c;还可以实现一个clone函数。这需要借助编译器实现的一个隐藏拷贝构造函数&#xff0c;这样的做法&#xff0c;更省心。 中文名clone函数外文名clon…

ELF program/section segment解析

ELF program/section segment解析 1 elf program segment1.1 elf program header1.2 ELF32和ELF64示例1.2.1 ELF32 program segment1.2.2 ELF64 program segment 1.3 elf program segment数据流向图 2 elf section2.1 eld section header2.2 ELF32和ELF64示例2.2.1 ELF32 secti…

带你玩转双链表

文章目录 前言一、双链表的思路二、带头循环双链表的实现分析二、带头循环双链表的实现11.带头循环双链表实现头文件总览2.带头循环双链表的初始化3.带头循环双链表的插入4.带头循环双链表的打印和销毁5.带头循环双链表的查找和删除 三、带头循环双链表的实现21.带头循环双链表…

软考高级之系统架构师之数据通信与计算机网络

概念 OSPF 在划分区域之后&#xff0c;OSPF网络中的非主干区域中的路由器对于到外部网络的路由&#xff0c;一定要通过ABR(区域边界路由器)来转发&#xff0c;既然如此&#xff0c;对于区域内的路由器来说&#xff0c;就没有必要知道通往外部网络的详细路由&#xff0c;只要由…

文章被限流了?上不了热榜?

文章目录 惨&#xff01;惨&#xff01;&#xff01;惨&#xff01;&#xff01;&#xff01;热榜&#x1f525;热榜&#x1f525;&#x1f525;热榜&#x1f525;&#x1f525;&#x1f525;粉丝破万INSCODE AI 创作 1INSCODE AI 创作 2INSCODE AI 创作 3联系客服 最近不知道C…

Mybatis Plus条件构造器LambdaQueryWrapper

官网地址 Mybatis Plus条件构造器LambdaQueryWrapper 目前数据库数据情况&#xff0c;User表 iduser_namebirthdaysexaddress1张12023-08-10男123163.com2李12023-08-10女222163.com3张22023-08-10女999163.com4张32023-08-10男9994qq.com ## 简单介绍 如何使用各种场景 方法…

Flink源码之TaskManager启动流程

从启动命令flink-daemon.sh可以看出TaskManger入口类为org.apache.flink.runtime.taskexecutor.TaskManagerRunner TaskManagerRunner::main TaskManagerRunner::runTaskManagerProcessSecurely TaskManagerRunner::runTaskManager //构造TaskManagerRunner并调用start()方法 …

【设计模式——学习笔记】23种设计模式——中介者模式Mediator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入案例一普通实现中介者模式 案例二 介绍基础介绍登场角色尚硅谷 《图解设计模式》 案例实现案例一&#xff1a;智能家庭类图实现 案例二&#xff1a;登录页面逻辑实现说明类图实现 总结文章说明 案例引入 案例一 普通实现 在租房过程中&#xff0c;客户可能…

10个创意网站,解决你没有灵感的问题

对于设计师来说&#xff0c;有源源不断的设计灵感&#xff0c;掌握最新的设计流行趋势是非常重要的。要提高设计修养&#xff0c;必须学习和理解优秀的设计作品。在这篇文章中&#xff0c;我们对灵感创意网站进行了分类整理&#xff0c;从中选取了10个素材优良、质量优良的灵感…

为什么过去十年AI创业失败了?

始于2010年前后的这次人工智能创业实际上是集体失败了。作为从业者我们固然可以讲它需要更长的启动周期&#xff0c;我们尽快的开始第二程就可以了&#xff0c;但就像抗日战争的时候如果没有论持久战的穿插到日寇力量薄弱区建立根据地等一系列基于过往教训的新战略&#xff0c;…