SLAM从入门到精通(从仿真到实践)

news2024/11/18 13:32:38

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

        之前花了40多篇文章,弄清了什么是slam,怎么学习slam,什么是ros,怎么利用ros来学好slam等等。不仅如此,我们还搭建了仿真环境,从话题订阅和发布开始,一步步到gmapping、amcl到move base,中间确实涉及了很多的内容,知识点也比较多。但如果仅仅如此,其实还是不够的。仿真学习虽然对于学习者是比较方便的,但我们最终的目的还是希望能够把slam技术用起来,这样才能产生价值。有了价值的反馈,我们也才能进行继续后面的学习和升级。

        然而,仿真环境和实际环境还是差很多的。实际环境下,一个485的ab线没有接对,都有可能让你花费半天的时间。更不要说电路板上面的虚焊、接触不良了。所以,等了解了算法、了解了流程之后,建议大家下一步就可以慢慢转到实际小车来测试了,遇到的问题越多,成长的空间也越大。

        下面我们就总结下真实环境和仿真环境的一些区别。

1、现实的传感器数据是不准的

        前面仿真的时候,我们一般拿到传感器的数据就直接使用了。然而现实中,传感器的数据都是不准的,需要进行内参标定和外参标定值后才能使用。以摄像头为例,所谓的内参标定,就是摄像头的畸变参数;而外参标定,则是摄像头相对于机器人中心的坐标偏移。这部分数据都是需要自己标定出来,才能使用的。

        此外,就算内参和外参都标定好了,这个时候数据就可以使用了吗?其实还不可以,因为此时还有可能出现随机噪声。那么我们只能通过均值滤波、滑动窗口、中值滤波等方法来进行处理。如果上面说的几种滤波方法还不够,这个时候可以考虑用卡尔曼滤波做一次数据平滑处理,再送给算法。注意,卡尔曼滤波不仅仅可以用于数据融合,还可以进行数值滤波。

2、真实的地面是不平整的

        不管是gmapping,还是amcl,本质上都要求地面的起伏不能太大。因为从原理上说,他们都是借助于里程计的基础数据+lidar数据的粒子滤波,来实现制图和定位的。如果本身里程计的数据就是错的或者不准,地面上坑坑洼洼的,就不要太指望后面的粒子滤波可以给你修正回来。

3、单线雷达很多时候并不靠谱

        这里说的单线雷达不靠谱,并不是说传感器本身不靠谱,而是说单线雷达所在的场景是经常容易发生改变的,单线雷达采集远远不够。就拿服务机器人来说,由于lidar传感器位置不高,那么它周围的场景就可能经常发生改变,一会桌子放在这里了,一会沙发放在那里了等等。这个时候,lidar发现场景改变了,它就不知道是应该去优化位置,还是忽略这些变化的场景。此外和多线lidar相比,它采集的数据少之又少,希望从这么少的数据中获取稳定的信息、输出稳定的结果可以想一下其中的难度了。

4、路径一般是规划好的

        学习MoveBase的时候,我们发现很多时候路径都是临时生成的。只要没有障碍物,就贴着最大角速度、最大线速度走就可以了。实际生产中,对于机器人的活动路径和作业范围,一般都是做了空间约束的。这一点,对于开发者来说,其实并不是坏事,本质还是为了好控制,留出边界范围,也能满足业主安全方面的要求。

5、算力永远不够

        很多算法有比较好的结果,都是依靠大算力、大存储来解决的。这会带来两个问题,第一我们选的soc开发板或者工控板算力够不够;第二,这么多数据需要处理,实时性来不来得及。一个比较好的slam算法,前端输出结果只是一部分,大部分时间都放在后端优化以及回环检测上面,这个时候就对算力和存储就都有了要求。一方面要求算的快,另外一方面又要求算得准,这本身就是一对矛盾体,需要自己做出权衡。

6、网络问题

        真实的机器人都是自由行走在服务环境中的。它和调度器、充电器的连接是通过wifi来保证的。那么机器人和控制器之间的网络是不是稳定、通畅,这就变得很重要了。最低网络延时多少、网络联系失败的时候有没有重连机制,这关系到整个系统是不是长期稳定地运行。

7、精度和重复性的问题

        如果机器人本身只是用于家庭,或者做一些服务用途,它的精度和重复性一般不做要求。但是如果应用在工业或者是军事上面,那么精度和重复性就会变得非常重要。以普通的AGV为例,10次取放货成功,和10000次无故障取放货成功,这中间还是有本质的区别的。所以,我们做机器人的时候不仅要求单次操作的精度很高,而且重复性必须满足客户和业主的要求,这样自己的产品才有竞争力。

8、安全问题

        机器人本身是软硬、硬件和机械的复合体。当然,说白了它就是一个没有生命的铁疙瘩。所以我们不仅要让它干活,还要让它不伤害别人。狭义上的伤害,主要是运动、做任务的时候不要伤害到人;而广义上的伤害,还包括语言、功能和目的。前面的内容比较好理解,但是后面的伤害不一定为大家所熟知。可以试想一下,现在有了gpt和chatgpt的支持,如果我们安排机器人去做一些伤害人类的任务,它应该是去做呢,还是不去做呢?

9、成本

        如果我们上面8点都实现了,这其实已经很不容易了。然而,为了达到这一效果,花费了很大的代价,在成本上没有控制住,这也是没有意义的。本来开发一款产品、完成一个设计,就是为了能够在市场上获得竞争力。但如果最终的结果是客户满意了,自己却遭受了损失,这明显是赔本的买卖,那就得不偿失了。

10、总结

        所以说,用仿真实现机器人的算法,这只是第一步。怎么把机器人做出来、卖出去,给客户创造价值,这还有很长的路需要走。

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

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

相关文章

云安全(1)--初识容器逃逸之特权容器逃逸

文章目录 前言privileged,特权容器逃逸环境配置实际利用实际环境利用计划任务/var/spool/cron/crontabs/ 适用于ubuntu debain/var/spool/cron 适用于centos ld.so.preloadssh 前言 在10.15号的上海中华武数杯的渗透赛里做到了一个k8s的题目,这应该是我第一次在比赛…

13.3测试用例进阶

一.测试对象划分 1.界面测试(参考软件规格说明书和UI视觉稿) a.什么是界面 1)WEB站(浏览器) 2)app 3)小程序 4)公众号 b.测试内容 1)界面内容显示的一致性,完整性,准确性,友好性.比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示. 2)验证整个界面布局和排版…

【数据结构】线性表(七)堆栈:链式栈及其基本操作(初始化、判空、入栈、出栈、存取栈顶元素、清空栈);顺序栈与链式栈之比较

文章目录 一、堆栈1. 定义2. 基本操作 二、顺序栈三、链式栈0. 链表1. 头文件和常量2. 栈结构体3. 栈的初始化4. 判断栈是否为空5. 入栈6. 出栈7. 存取栈顶元素8. 清空栈9. 主函数10. 代码整合 四、 顺序栈与链式栈的比较 堆栈(Stack)和队列(…

Linux MMC子系统 - 1.eMMC简介

By: Ailson Jack Date: 2023.10.21 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/160.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

JAVA基础-数据类型(2)

目录 1、基本数据类型2、引用数据类型3、类型默认值4、数据类型的转换4.1、自动类型转换4.2、强制类型转换4.3、隐含强制类型转换 1、基本数据类型 :::tips Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一…

C++多重、多层、分层继承

在本文中,您将学习C 编程中的不同继承模型:带有示例的多继承,多层和分层继承。 继承是面向对象编程语言的核心功能之一。它允许软件开发人员从现有的类派生一个新的类。派生类继承基类(现有类)的功能。C 编程中有多种…

逗号表达式

#include<stdio.h> int cmp() {return(2,1); } int main() {int z cmp();printf("%d",z);return 0; } 逗号表达式括号里的优先级是自左向右&#xff0c;最后一个值为最终的结果。

YOLOv5改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

东信智能:嵌入式内置式身份证阅读器微模块技术参数,和之前的大模块、小模块有什么区别研究

身份证读卡器模块总共分为4种&#xff1a; 1、0503大模块&#xff0c;尺寸大&#xff0c;可读完整信息。 2、0513小模块&#xff0c;尺寸中等&#xff0c;可读完整信息。 3、微模块&#xff0c;尺寸小&#xff0c;只用于比对。 4、SDT88-FR嵌入式模块&#xff0c;尺寸小&am…

“控制情绪,理性交流”刍议

今天&#xff0c;本“人民体验官”还是回避推广人民日报官方微博文化产品《走出低谷期的9个习惯》。 截图&#xff1a;来源“人民体验官”推广平台 ​之前&#xff0c;由于笔者读过《人民日报》曾经发表过的关于“学会管理情绪 ”的文章&#xff0c;对文章中这些观点深表认同&…

DJYOS物联屏:工业HMI里的显控异构计算的超稳定解决方案

1、超稳定性&#xff1a;DJYOS物联屏的超稳定依赖于都江堰泛计算操作系统天然支持多核、多机的异构计算能力&#xff0c;可以一核运行HMI、一核运行控制程序&#xff0c;多核之间可以通过djyos的异构计算去中心化运行&#xff08;确保各自程序不干扰运行&#xff09;&#xff0…

存储器~Zynq book第九章

还有小梅哥和正点原子的一些资料。 DRAM SRAM Cache SDRAM SDRAM学习与实现串口传图-CSDN博客 DDR3

【算法训练-动态规划 零】动态规划解题框架

动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法&#xff0c;只不过在计算机问题上应用比较多&#xff0c;比如说求最长递增子序列呀&#xff0c;最小编辑距离呀等等。 既然是要求最值&#xff0c;核心问题是什么呢&#xff1f;求解动态规划的核心问…

C++ 使用httplib库,发送HTTP请求

简介 C 使用httplib库&#xff0c;发送HTTP请求 接口信息 ip地址 192.168.16.166 端口 8899 接口地址/abc/tk 请求方式GET 响应内容&#xff1a; { “result”: true, “message”: “”, “tk”: “yueguangsaxialexiangshuitan0ihai”, “datetimeout”: “2023-10-22 21…

2023年中国预缩机产量、需求量及市场规模分析[图]

预缩机是一种用于压缩气体的机械设备&#xff0c;通过减小气体的体积&#xff0c;增加气体的压力。预缩机通常由压缩机、电机、冷却系统和控制系统等组成&#xff0c;广泛应用于空调、制冷、工业生产等领域。 预缩机行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研…

LightDM Greeter的启动流程与分析

重要的概念 LightDM Greeter是什么&#xff1f;它是一个登录管理器&#xff0c;用于在Ubuntu或其他基于Linux的操作系统中管理用户登录。它提供了一个图形化用户界面&#xff0c;用户可以在其中输入他们的用户名和密码以及选择登录的桌面环境。LightDM Greeter还提供了可定制的…

设计模式_中介者模式

中介者模式 介绍 设计模式定义案例问题堆积在哪里解决办法中介者代替了多个对象之间的互动 使对象1 2 3 之间的互动 变为&#xff1a; 对象1->中介 对象2->中介 对象3->中介好友之间 约饭好友1 通知 好友2 -3 -4 等等加一个群 谁想吃饭就 通知一下 类图 代码 角色 …

Spring Security认证架构介绍

在之前的Spring Security&#xff1a;总体架构中&#xff0c;我们讲到Spring Security整个架构是通过Bean容器和Servlet容器对过滤器的支持来实现的。我们将从过滤器出发介绍Spring Security的Servlet类型的认证架构。 1.AbstractAuthenticationProcessingFilter AbstractAut…

操作系统——进程互斥的软件实现算法(王道视频p27、课本ch6)

1.总结概览&#xff1a; 2.单标志[turn]法——算法代码&#xff1a; 可能违反“空闲让进” 3.双标志[flag[2]]先检查法——算法代码&#xff1a; 如果不能利用硬件的原语的话&#xff0c;就可能出现违反“忙则等待”的问题: 4.双标志[flag[2]]后检查法——算法代码&#xff1…

RT-Smart 应用开发笔记:fopen 造成文件被清空问题的分析记录

前言 RT-Smart 应用&#xff08;apps&#xff09;开发环境&#xff0c;ubuntu 20.04 win10 VS Code 最近在调试一个问题&#xff0c;需要使用 FILE 的 fopen、fread 等去读取处理一个大文件&#xff0c;为了尽快复现验证问题&#xff0c;随手搜了一下 fopen 等几个 API的用法…