ROS-SLAM
基本概念
SLAM 即 Simultaneous Localization and Mapping,中文名为同时定位与地图构建,是机器人、自动驾驶、增强现实等领域中的关键技术。
在未知环境中,搭载特定传感器的主体(如机器人、无人机等)在运动过程中,需要实时确定自身在环境中的位置,同时构建出周围环境的地图,这一过程就是 SLAM 要解决的问题。例如,扫地机器人在清扫房间时,它并不知道房间的布局,需要一边移动一边搞清楚自己在哪里,同时把房间的地图绘制出来。
ROS - SLAM 中 SLAM 基本知识点
1. 核心问题
- 定位(Localization):确定机器人在环境中的位置和姿态。机器人需要根据自身携带的传感器数据,如激光雷达的距离信息、摄像头的图像信息等,结合已有的先验地图(如果存在)来估计自己当前所处的位置和朝向。
- 建图(Mapping):根据机器人在运动过程中获取的传感器数据,构建出周围环境的地图。地图的形式可以多种多样,常见的有栅格地图(将环境划分为一个个小格子,每个格子表示该区域是否被占据)、点云地图(由大量的三维点组成,描述环境中物体的表面信息)等。
2. 关键要素
- 传感器
- 激光雷达(LiDAR):通过发射激光束并测量反射光的时间来获取周围环境的距离信息,能提供高精度的二维或三维距离数据,是许多 SLAM 算法常用的传感器。
- 摄像头:包括单目相机、双目相机和 RGB - D 相机等。单目相机成本低,但缺乏深度信息;双目相机可以通过视差计算得到深度信息;RGB - D 相机则可以直接输出彩色图像和深度图像。
- 里程计(Odometry):通常用于提供机器人的运动信息,如轮子的旋转角度、角速度等,可用于估计机器人的相对位移和姿态变化。
- 数据关联:在 SLAM 过程中,需要将不同时刻传感器观测到的特征或数据与地图中的元素进行匹配,确定它们之间的对应关系。例如,在激光雷达数据中,要判断当前扫描到的特征点是否与之前地图中的某个特征点是同一个。
- 闭环检测:当机器人回到之前访问过的区域时,能够识别出来并利用这一信息对地图和自身位姿进行修正,以减少累积误差。
常用 SLAM 算法及节点通讯、订阅发布关系
1. Gmapping
- 算法原理:基于 Rao - Blackwellized 粒子滤波(有时间了会讲解一下,大致理解即可)的方法,将机器人的位姿和地图的估计问题分离开来。通过粒子滤波来估计机器人的位姿,每个粒子对应一个可能的机器人轨迹,同时在每个粒子上维护一个地图。随着机器人的运动,不断更新粒子的权重和地图信息。
- 节点通讯与订阅发布关系
- 订阅话题
/scan:订阅激光雷达的扫描数据,通常为sensor_msgs/LaserScan类型,包含了激光雷达在各个角度上的测量距离信息。/odom:订阅里程计数据,类型为nav_msgs/Odometry,用于获取机器人的运动信息,辅助估计机器人的位姿。
- 发布话题
/map:发布构建好的栅格地图,类型为nav_msgs/OccupancyGrid,地图中的每个格子用一个数值表示该区域被占据的概率,常见的情况就是-1代表未知,0代表没有障碍物,1代表有障碍物/map_metadata:发布地图的元数据,如地图的分辨率、原点位置等,类型为nav_msgs/MapMetaData。/slam_gmapping/entropy:发布粒子滤波的熵值,反映了粒子的分散程度。
- 订阅话题
2. Hector SLAM
- 算法原理:基于高斯牛顿优化方法,利用激光雷达数据进行地图构建和机器人定位。该算法不依赖于里程计信息,通过对激光雷达扫描数据进行匹配和优化,直接估计机器人的位姿和地图。它采用多分辨率地图来提高匹配的效率和精度。
- 节点通讯与订阅发布关系
- 订阅话题
/scan:订阅激光雷达的扫描数据,同 Gmapping 一样,为sensor_msgs/LaserScan类型。
- 发布话题
/map:发布构建好的栅格地图,类型为nav_msgs/OccupancyGrid。/map_metadata:发布地图的元数据,类型为nav_msgs/MapMetaData。/tf:发布机器人的位姿变换信息,通过 TF(Transform)树来表示机器人在地图坐标系中的位置和姿态。
- 订阅话题
3. Cartographer
- 算法原理:基于图优化的方法,将 SLAM 问题转化为一个图优化问题。在机器人运动过程中,将不同时刻的位姿和传感器数据作为图中的节点,节点之间的约束关系(如激光雷达数据的匹配结果)作为边。通过最小化图中所有约束的误差平方和来优化节点的位置,从而得到最优的地图和机器人位姿估计。
- 节点通讯与订阅发布关系
- 订阅话题
/scan:订阅激光雷达的扫描数据,类型为sensor_msgs/LaserScan。/imu:订阅惯性测量单元(IMU)的数据,类型为sensor_msgs/Imu,用于提供机器人的姿态信息,辅助定位和建图。/odom:订阅里程计数据,类型为nav_msgs/Odometry。
- 发布话题
/map:发布构建好的地图,通常为栅格地图或子地图的集合。/submap_list:发布子地图的列表信息,包含了每个子地图的元数据和状态信息。/trajectory_node_list:发布机器人的轨迹节点信息,记录了机器人在不同时刻的位姿。
- 订阅话题
在当下的实际应用中,cartographer 的应用范围和流行度呈上升趋势,尤其是在对建图精度和场景规模要求较高的工业和自动驾驶领域。gmapping 由于其简单性和易实现性,在教学和一些对精度要求不是极高的室内小规模场景中仍然有一定的应用。hector_slam 则在特定的无里程计场景中发挥着不可替代的作用。
相关文章:
ROS-SLAM
基本概念 SLAM 即 Simultaneous Localization and Mapping,中文名为同时定位与地图构建,是机器人、自动驾驶、增强现实等领域中的关键技术。 在未知环境中,搭载特定传感器的主体(如机器人、无人机等)在运动过程中&am…...
网络攻防实战指北专栏讲解大纲与网络安全法
专栏 本专栏为网络攻防实战指北,大纲如下所示 进度:目前已更完准备篇、HTML基础 计划:所谓基础不牢,地动山摇。所以下一步将持续更新基础篇内容 讲解信息安全时,结合《中华人民共和国网络安全法》(以下简…...
Spark的基本概念
个人博客地址:Spark的基本概念 | 一张假钞的真实世界 编程接口 RDD:弹性分布式数据集(Resilient Distributed Dataset )。Spark2.0之前的编程接口。Spark2.0之后以不再推荐使用,而是被Dataset替代。Datasetÿ…...
效用曲线的三个实例
效用曲线的三个实例 文章目录 效用曲线的三个实例什么是效用曲线风险与回报:投资决策消费选择:价格与质量的平衡程序员绩效评估:准时与程序正确性 分析- 风险与回报:投资决策分析- 消费选择:价格与质量的平衡- 程序员绩…...
JavaScript面向对象编程:Prototype与Class的对比详解
JavaScript面向对象编程:Prototype与Class的对比详解 JavaScript面向对象编程:Prototype与Class的对比详解引言什么是JavaScript的面向对象编程?什么是Prototype?Prototype的定义Prototype的工作原理示例代码优点缺点 什么是JavaS…...
neo4j-community-5.26.0 create new database
1.edit neo4j.conf 把 # The name of the default database initial.dbms.default_databasehonglouneo4j # 写上自己的数据库名称 和 # Name of the service #5.0 server.windows_service_nameneo4j #4.0 dbms.default_databaseneo4j #dbms.default_databaseneo4jwind serve…...
pytorch实现门控循环单元 (GRU)
人工智能例子汇总:AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快,参数更少相对较慢,参数更多结构复杂度只有两个门(更新门和重置门)三个门(输入门、遗忘门、输出门)处理长时依赖一般适…...
有没有个性化的UML图例
绿萝小绿萝 (53****338) 2012-05-10 11:55:45 各位大虾,有没有个性化的UML图例 绿萝小绿萝 (53****338) 2012-05-10 11:56:03 例如部署图或时序图的图例 潘加宇 (35***47) 2012-05-10 12:24:31 "个性化"指的是? 你的意思使用你自己的图标&…...
在CentOS服务器上部署DeepSeek R1
在CentOS服务器上部署DeepSeek R1,并通过公网IP与其进行对话,可以按照以下步骤操作: 一、环境准备 系统要求: CentOS 8+(需支持AVX512指令集)。 硬件配置: GPU版本:NVIDIA驱动520+,CUDA 11.8+。 CPU版本:至少16核处理器,64GB内存。 存储空间:原始模型需要30GB,量…...
Vue3.0实战:大数据平台可视化
文章目录 创建vue3.0项目项目初始化项目分辨率响应式设置项目顶部信息条创建页面主体创建全局引入echarts和axios后台接口创建express销售总量图实现完整项目下载项目任何问题都可在评论区,或者直接私信即可。 创建vue3.0项目 创建项目: vue create vueecharts选择第三项:…...
洛谷 P1130 红牌 C语言
题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌。获得红牌的过程是相当复杂,一共包括 N 个步骤。每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件。为了加快进程,每一步政府都派了 M 个工作人员来检查材料。不幸的是&…...
语音识别播报人工智能分类垃圾桶(论文+源码)
2.1 需求分析 本次语音识别播报人工智能分类垃圾桶,设计功能要求如下∶ 1、具有四种垃圾桶,分别为用来回收厨余垃圾,有害垃圾,可回收垃圾,其他垃圾。 2、当用户语音说出“旧报纸”,“剩菜”等特定词语时…...
MVC、MVP和MVVM模式
MVC模式中,视图和模型之间直接交互,而MVP模式下,视图与模型通过Presenter进行通信,MVVM则采用双向绑定,减少手动同步视图和模型的工作。每种模式都有其优缺点,适合不同规模和类型的项目。 ### MVVM 与 MVP…...
shiro学习五:使用springboot整合shiro。在前面学习四的基础上,增加shiro的缓存机制,源码讲解:认证缓存、授权缓存。
文章目录 前言1. 直接上代码最后在讲解1.1 新增的pom依赖1.2 RedisCache.java1.3 RedisCacheManager.java1.4 jwt的三个类1.5 ShiroConfig.java新增Bean 2. 源码讲解。2.1 shiro 缓存的代码流程。2.2 缓存流程2.2.1 认证和授权简述2.2.2 AuthenticatingRealm.getAuthentication…...
负载均衡器高可用部署
Haproxy 和 Keepalived安装Haproxy配置文件准备Keepalived配置及健康检查启动Haproxy & Keepalived服务继续上一篇文章《K8S集群架构及主机准备》,下面介绍负载均衡器搭建过程 Haproxy 和 Keepalived安装 在负载均衡器两个主机上安装即可 apt install haproxy keepalived…...
属性编程与权限编程
问题 如何获取文件的大小,时间戳以及类型等信息? 再论 inode 文件的物理载体是硬盘,硬盘的最小存储单元是扇区 (每个扇区 512 字节) 文件系统以 块 为单位(每个块 8 个扇区) 管理文件数据 文件元信息 (创建者、创建日期、文件大小&#x…...
用 HTML、CSS 和 JavaScript 实现抽奖转盘效果
顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域,周围八个格子分别放置了不同的奖品名称,中间是一个 “开始抽奖” 的按钮。点击按钮后,抽奖区域的格子会快速滚动,颜色不断变化…...
R语言绘制有向无环图(DAG)
有向无环图(Directed Acyclic Graph,简称DAG)是一种特殊的有向图,它由一系列顶点和有方向的边组成,其中不存在任何环路。这意味着从任一顶点出发,沿着箭头方向移动,你永远无法回到起始点。 从流…...
报错Too many open files
1、先查看系统最大打开文件数 # 查看当前系统打开文件最大数 # ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signal…...
Spring Web MVC基础第一篇
目录 1.什么是Spring Web MVC? 2.创建Spring Web MVC项目 3.注解使用 3.1RequestMapping(路由映射) 3.2一般参数传递 3.3RequestParam(参数重命名) 3.4RequestBody(传递JSON数据) 3.5Pa…...
129.求根节点到叶节点数字之和(遍历思想)
Problem: 129.求根节点到叶节点数字之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 直接利用二叉树的先序遍历,将遍历过程中的节点值先利用字符串拼接起来遇到根节点时再转为数字并累加起来,在归的过程中…...
unity中的动画混合树
为什么需要动画混合树,动画混合树有什么作用? 在Unity中,动画混合树(Animation Blend Tree)是一种用于管理和混合多个动画状态的工具,包括1D和2D两种类型,以下是其作用及使用必要性的介绍&…...
AWS EMR使用Apache Kylin快速分析大数据
在AWS Elastic MapReduce(EMR)集群上部署和使用Apache Kylin,以实现对大规模数据集的快速分析,企业可以充分利用云计算的强大资源和Kylin的数据分析能力,实现快速、高效的数据分析。以下是该案例的详细步骤和要点&…...
MySQL存储过程和存储函数_mysql 存储过 call proc_stat_data(3,null)
2)很难调试存储过程。只有少数数据库管理系统允许调试存储过程。不幸的是,MySQL不提供调试存储过程的功能。 1.2 数据准备 创建数据库: DEFAULT CHARACTER SET utf8; use test;这里记得设置编码! 创建测试表: DROP…...
spacemacs gnuplot
个人博客地址:spacemacs gnuplot | 一张假钞的真实世界 环境 Ubuntu 16.10Emacs 24 安装过程 spacemacs安装 安装Emacs sudo apt-get install emacs 安装spacemacs (1)如果已经存在Emacs配置文件,首先备份: c…...
Flink2支持提交StreamGraph到Flink集群
最近研究Flink源码的时候,发现Flink已经支持提交StreamGraph到集群了,替换掉了原来的提交JobGraph。 新增ExecutionPlan接口,将JobGraph和StreamGraph作为实现。 Flink集群Dispatcher也进行了修改,从JobGraph改成了接口Executio…...
Kotlin 使用 Springboot 反射执行方法并自动传参
在使用反射的时候,执行方法的时候在想如果Springboot 能对需要执行的反射方法的参数自动注入就好了。所以就有了下文。 知识点 获取上下文通过上下文获取 Bean通过上下文创建一个对象,该对象所需的参数由 Springboot 自己注入 创建参数 因为需要对反…...
索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实?(中英双语)
索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实? 一、引言:市场是镜子,还是哈哈镜? 在传统经济学中,市场通常被认为是一个理性、有效的反映现实的系统。按照经典经济学理论…...
Vue 入门到实战 七
第7章 渲染函数 目录 7.1 DOM树 7.2 什么是渲染函数 7.3 h()函数 7.3.1 基本参数 7.3.2 约束 7.3.3 使用JavaScript代替模板功能 7.1 DOM树 7.2 什么是渲染函数 在多数情况下,Vue推荐使用模板template来创建HTML。然而在一些应用场景中,需要使用J…...
系统学习算法: 专题八 二叉树中的深搜
深搜其实就是深度优先遍历(dfs),与此相对的还有宽度优先遍历(bfs) 如果学完数据结构有点忘记,如下图,左边是dfs,右边是bfs 而二叉树的前序,中序,后序遍历都可…...
