当前位置: 首页 > news >正文

SLAM从入门到精通(SLAM落地的难点)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        在所有的slam算法中,基于反光柱的激光slam和基于二维码的视觉slam是落地最彻底的两种slam方法。和磁条、色带等传统导航方式相比较,它们最大的优点就是操作简单、部署灵活,不需要进行复杂的地面施工,就可以短时间内在客户现场应用起来。

        到这里,很多人又发现了一个新的问题,实际使用的这些slam算法和我们读的论文算法,好像有很大的不同。就拿激光slam来说,大家学习的时候一般都是各种scan_to_scan、scan_to_map算法,为了提高正确性,有时候还需要加上后端优化以及环回检测,但实际应用中好像很少听说有一种算法可以覆盖所有的场景。所以,今天我们可以正好借这个机会讨论一下slam落地和slam科研之间的区别。

1、稳定是slam落地的第一要求

        不过是哪一种算法,我们都可以很容易找出它最佳的应用场景。但是,这种算法的泛化属性怎么样,是不是能够应用在各种客户的场景,这就两说了。通常,slam本身最大的难点,就是如何从扫描的传感器数据中获取特征点,基于这些特征点来进行制图和定位的工作。而这些特征点是不是稳定、可靠的,此时此刻就变得非常关键了。

        换个思路,假设自然场景中的特征点都是人工有意设计和部署的,那么是不是应用的难度一下子就降低了很多。因为相同的特征,自然界几乎是不存在的。即使有,我们也可以通过算法、特征、参数配置的方法快速地进行过滤处理,是不是有了这关键的第一步,后面的工作一下子就变得容易起来了。

2、客户场景大多数是一个多变的场景

        对于科研的同学来说,场景稳定、光照稳定,这些都是算法能够稳定运行的重要条件。但事实上,客户的场景却又是快速变化的场景。每个客户有自己的主营业务,机器人的参与只是帮助他们来降本增效的,本质上不大可能为这些机器人做太多的改变和修正。所以,对于机器人来说,它就有必要自己来适应这些复杂的客户场景。

        以机器人的lidar安装位置来说,如果安装过低,那么不可避免地它会遇到各种各样复杂的场景,人、设备、其他机器人的干扰,这些都是不可避免的。当然,安装位置如果很高,这个时候玻璃、长走廊、白色的围墙,这也会是另外一个麻烦。所以不管哪一种情况,算法上做的预设性条件在现实中并不满足。

3、软件开发成本问题

        当前slam开发,在所有的成本之中,软件成本是最大的开支。硬件的成本,一般都是公开透明的,但是软件成本、以及嵌入式功能开发、优化、调试的成本很多时候就是一个无底洞,最后结果如何很多时候还未可知。降低这种成本的方式,最好的办法就是开发通用的slam框架,大家接口一样,算法之间可以彼此替代,只需要进行参数的设置和调整,就可以切换成新的算法继续去运行和处理。

        此外,很多时候算法运行的开发板一旦确定之后,基本上算力就固定了。但是客户的需求确实千差万别,实现这些需求确有需要各种各样的算法。有的算力要求低,有的要求却很复杂,如何扩充这些算力,保证软件有足够的算力作为支撑,这也是需要好好考虑的一件事情。

4、多传感器的融合是唯一的办法

        很少有一种传感器能覆盖所有的场景。所以实际环境当中,一般都是利用多个传感器的算法,一起参与到最终数据的处理过程当中。该用里程计就用里程计,该用imu就用imu,该用lidar就用lidar,该用图像用图像,一切以机器人稳定运行、项目稳定验收作为最终的考核标准。

5、路径设计也是slam的重要环节

        slam归根到底还是一种算法,它需要有效的输入数据和合理的参数,才能产生合适的输出结果。一旦输入的数据质量不高,那就不要期望它的结果很好。而在工厂当中,现场的FAE有必要根据算法的要求、以及过往的经验,找出最合适的robot行走路径来满足这些输入数据的要求。

        路好不好、平不平整,slam扫描到的环境是不是特征明显,反光柱部署的位置是不是合理,光源是不是充足,这些都是需要好好考虑的。算法本身是固定的,但是合适的现场部署,通过参数标定和路径优化,才能最大化保持算法的可靠性和稳定性。单靠算法自己,本身除了调参,能做的工作有的时候很有限。

6、两种slam前景

        目前使用比较多的slam还是激光slam,它本身更多时候是一个工程问题。也就是说,相关的理论都是很成熟的,主要就是看怎么应用起来。而视觉slam目前为止,还是一个科学问题,如果连稳定的特征点都没有办法实现的话,那本身还有很大的应用门槛。所以,不管是哪一种办法,要想真正落地,有必要最大程度解决特征点稳定性的问题,只有解决了这些问题,才有进一步扩展和应用的可能性。

相关文章:

SLAM从入门到精通(SLAM落地的难点)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在所有的slam算法中,基于反光柱的激光slam和基于二维码的视觉slam是落地最彻底的两种slam方法。和磁条、色带等传统导航方式相比较&…...

通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

职业迷茫,我该如何做好职业规划

案例25岁男,入职2月,感觉自己在混日子,怕能力没有提升,怕以后薪资也提不起来。完全不知道应该往哪个方向进修,感觉也没有自己特别喜欢的。感觉自己特别容易多想,想多年的以后一事无成的样子。 我觉得这个案…...

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…...

web3 React Dapp书写订单 买入/取消操作

好 上文web3 前端dapp从redux过滤出 (我创建与别人创建)正在执行的订单 并展示在Table上中 我们过滤出了 我创建的 与 别人创建的 且 未完成 未取消的订单数据 这边 我们起一下 ganache 环境 ganache -d然后 我们项目 发布一下智能合约 truffle migrate --reset然…...

C++学习---信号处理机制、中断、异步环境

文章目录 前言信号处理signal()函数关于异步环境 信号处理函数示例raise()函数 前言 信号处理 关于信号,信号是一种进程间通信的机制,用于在程序执行过程中通知进程发生了一些事件。在Unix和类Unix系统中,信号是一种异步通知机制&#xff0c…...

机器学习——奇异值分解案例(图片压缩-代码简洁版)

本想大迈步进入前馈神经网络 但是…唉…瞅了几眼,头晕 然后想到之前梳理的奇异值分解、主成分分析、CBOW都没有实战 如果没有实际操作,会有一种浮在云端的虚无感 但是如果要实际操作,我又不想直接调用库包 可是…如果不直接调包,感…...

【Go入门】面向对象

【Go入门】面向对象 前面两章我们介绍了函数和struct,那你是否想过函数当作struct的字段一样来处理呢?今天我们就讲解一下函数的另一种形态,带有接收者的函数,我们称为method method 现在假设有这么一个场景,你定义…...

Asp.Net Core 中使用配置文件

本文参考微软文档:ASP.NET Core 中的配置 ASP.NET Core 中的应用程序配置是使用一个或多个配置程序提供程序执行的。 配置提供程序使用各种配置源从键值对读取配置数据: 设置文件,例如 appsettings.json环境变量Azure Key VaultAzure 应用配…...

深入理解JVM虚拟机第二十四篇:详解JVM当中的动态链接和常量池的作用

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…...

QGridLayout

QGridLayout QGridLayout 是 Qt 框架中的一个布局管理器类,用于在窗口或其他容器中创建基于网格的布局。 QGridLayout 将窗口或容器划分为行和列的网格,并将小部件放置在相应的单元格中。可以通过调整行、列和单元格的大小来控制布局的样式和结构。 以…...

万能在线预约小程序系统源码 适合任何行业在线预约小程序+预约到店模式 带完整的搭建教程

大家好啊,源码小编又来给大家分享啦!随着互联网的发展和普及,越来越多的服务行业开始使用在线预约系统以方便客户和服务管理。例如,美发店、健身房、餐厅等都可以通过在线预约系统提高服务效率,减少等待时间&#xff0…...

Leetcode 2935. Maximum Strong Pair XOR II

Leetcode 2935. Maximum Strong Pair XOR II 1. 解题思路2. 代码实现 题目链接:2935. Maximum Strong Pair XOR II 1. 解题思路 这一题又是一个限制条件下找“最大值”的问题,不过这里的最大值是XOR之后的最大值。 而要求XOR之后结果的最大值&#x…...

[直播自学]-[汇川easy320]搞起来(4)看文档 查找设备(续)

2023.11.12 周六 19:05 补充一下关于以太网查找设备,如果设置如下: 然后点击测试: 点击ping 如果设置如下: 测试和ping和上图一样。 这就设计的有点不大好了! 另…...

WebSphere Liberty 8.5.5.9 (四)

WebSphere Liberty 8.5.5.9 (四) [WebSphere Liberty 8.5.5.9]Linux 环境 ~$ unzip wlp-webProfile7-java8-linux-x86_64-8.5.5.9.zip ./ ~$ mkdir wlp-webProfile7-java8-8559 ~$ mv wlp ./wlp-webProfile7-java8-8559启动 WebSphere Liberty 8.5.5.9 服务 ~$ cd /home/tes…...

UE特效案例 —— 角色刀光

目录 一,环境配置 二,场景及相机设置 三,效果制作 刀光制作 地裂制作 击打地面炸开制作 一,环境配置 创建默认地形Landscape,如给地形上材质需确定比例;添加环境主光源DirectionalLight,设…...

11. EPIC定时器

11. EPIC定时器 EPIT定时器简介EPIT定时器结构分析EPIT 定时器相关寄存器EPITx_CREPITx_SREPITx_LR 加载寄存器EPITx_CMPR 比较寄存器EPITx_CNR 计数寄存器 EPIT 配置步骤 例程代码编写bsp_epittimer.hbsp_epittimer.cmain.c EPIT定时器简介 EPIT定时器是增强的周期中断定时器…...

git-bash配置代理

git-bash命令提交执行命令: "git push origin main"时发生错误: “$ git push origin main fatal: unable to access ‘https://github.com/satadriver/locust_server.git/’: Failed to connect to github.com port 443 after 21035 ms: Couldn’t connect to serve…...

【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…...

JavaWeb Day09 Mybatis-基础操作02-XML映射文件动态SQL

目录 Mybatis动态SQL介绍​编辑 一、案例 ①Mapper层 ②测试类 ③EmpMapper.xml ④结果​ 二、标签 (一)if where标签 ​①EmpMapper.xml ②案例 ③总结 (二)foreach标签 ①SQL语句 ②Mapper层 ③EmpMapper.xml ④…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...