SLAM从入门到精通(参数标定)

news2025/4/26 19:42:51

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

        标定是slam开发过程中很重要的一个环节。这部分内容涉及到很多方面,比如说传感器、比如说算法、比如说机械,总之好的标定不仅仅决定了系统的稳定性,还对整个系统的性能产生很大的影响。以汽车行业为例,标定工程师早就是一个被广泛接受的职业类型。拿发动机来说,我们都知道现在的汽车一般都会有很多的工作模式,有经济型、舒适性和运动型这几种。其实,不管哪种模式,这发动机里面的算法都是一样的,只是不同的工作模式对应着不同的参数标定。

1、传感器内参标定

        传感器内参标定,相信大家应该比较好理解。这些内参有的是制造过程造成的,比如imu内部的x/y/z轴方向差异;有的是传感器特性造成的,比如摄像头图像的畸变;还有的是由于设备运动造成的,比如说lidar数据在设备运动中造成的运动畸变等等。当然,不管是什么原因,只要我们发现传感器产生了数据畸变,就有必要对它进行建模和处理,这是少不了的。

2、传感器外部标定

        外部标定,也就是传感器安装位置差异造成的系统差异。我们都知道,不管设备安装的多么好,位置有多么准,那么它和实际的要求还是会产生一定的偏差。这些偏差,对于精度常常会有很大的影响。比如说机器人舵轮的初始位置偏差、lidar的安装位置偏差、里程计的位置偏差等等,这些偏差都要想办法通过建模的方法去进行处理,尽可能地去降低和消弭。

3、传感器功能标定

        我们使用传感器,一般都是为了解决特定的问题而引入的。通常情况下,传感器商家已经实现了内部算法。但对于传感器厂家来说,他很多时候并不知道这个传感器是用来做什么用的。所以,大多数厂家会提供一个上位机工具,用户可以用这个工具对传感器进行功能标定,比如避障雷达里面的避障范围设定、camera里面的roi区域设定等等,都属于传感器功能标定。

4、自定义算法标定

        算法标定涉及到很多方面,比如说精度,比如说算力,比如说响应速度等等。大家能够想起来比较多的算法标定估计就是pid了,这是最容易直观感受到的算法标定。在实际生产中,基本上只要和物理世界产生联系,都少不了算法标定,这是难免的。因为一方面要保证产品性能和稳定性,而另外一方面先验知识、安全性和产品差异,这些也需要通过参数标定的方式落实下去,这样才能保证系统的稳定性。

5、机械差异标定

        机械差异比较好理解,主要就是生产环节的差异、产品本身的差异等的。以机器人为例,它的底盘类型、长、宽、高、重心的位置、舵轮的位置、lidar的位置、最小速度、最大速度、最小加速度、最大加速度、最小减速度、最大减速度、最小转弯半径等等,这些都属于机械差异的范畴,都是需要我们去进行配置和处理的。

6、和其他设备对接的参数设置

        机器人在实际应用中一般是需要和其他设备进行对接的,这个时候485的串口编号、波特率、ip、web服务器ip、端口、数据库配置、用户名、账号、485寄存器地址、485寄存器偏移位置等等,这些也是需要进行配置处理的。通常情况下,我们也会把这些需要的信息放到一个配置文件里面,而不是硬编码到代码当中。

7、标定的基本原则

        要想完成标定,第一,需要知道标定的内容和背后的基本原理,不能为了标定而标定;第二,如果是传感器的标定,一般是拿精度高的传感器,去标定低精度的传感器,比如说,用lidar去标定其他传感器的外参。

        此外很多的时候,标定方法不一定只有一种,如果能用多种方法来交叉标定,往往可以帮助我们确认当前标定是否正确。此外,对于研发工程师来说,最好将标定的过程做成自动标定的算法,这样方便现场工程师快速地利用软件进行现场标定。

8、关于标定更多的信息

        网上关于标定的文章,都比较零散。下面这个链接,算是不多的有价值的系列标定文章,有兴趣的同学可以好好看一下,肯定有不少的收获。

https://docs.seer-group.com/d/1557959282007326722.html

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

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

相关文章

C3P0、DBCP、Druid 三种数据库连接池的使用

文章目录 数据库连接池1 C3P0 数据库连接池2 DBCP 数据库连接池3 Druid 数据库连接池 数据库连接池 JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现&#xff…

SpringCloudTencent(上)

SpringCloudTencent 1.PolarisMesh介绍2.北极星具备的功能3.北极星包含的组件4.功能特性1.服务管理1.服务注册2.服务发现3.健康检查 2.配置管理 5.代码实战1.环境准备2.服务注册与发现3.远程调用 1.PolarisMesh介绍 1.北极星是腾讯开源的服务治理平台,致力于解决分…

Dev-C调试的基本方法2-1

在Dev-C中调试程序,首先需要在程序中设置断点,之后以调试的方式运行程序。 1 设置断点 当以调试的方式运行程序时,程序会在断点处停下来。点击要设置断点代码行号左侧部分,此时会有如图1所示的红点和绿色对勾,表示断…

Mybatis与Mybatis-Plus(注解与Xml)(单表与多表)

准备工作 这里我们准备了两个与数据库表对应的实体类,stu为学生表,cls为班级表 类属性上的注解如 TableId等 为Mybatis-Plus的注解,使用mybatis会无视掉这些注解 在Stu 类的最后一个属性我们定义了Cls实体类的对象,对于单表查询&…

使用php打印时间精确到毫秒及毫秒转成11位时间戳

在PHP中,可以使用microtime函数来获取当前时间,包括毫秒。以下是示例代码: // 获取当前时间戳(秒) $time microtime(true); // 将当前时间戳转换为毫秒 $milliseconds round($time * 1000); // 输出当前时间&#…

【C语法学习】12 - scanf()函数

文章目录 0 前言1 函数原型2 参数2.1 格式字符串2.1.1 转换说明 2.2 参数列表 3 返回值4 读取机制4.1 基本概念4.2 转换说明4.3 读取过程4.4 读取示例4.5 多参数 6 示例6.1 示例16.2 示例26.3 示例36.4 示例4 0 前言 scanf()函数虽然使用起来较为灵活,但是其读取机…

SpringBoot集成JPA实现分页和CRUD

SpringBoot集成JPA实现分页和CRUD 文章目录 SpringBoot集成JPA实现分页和CRUDpom.xmlapplication.propertiesaddCategory.jspeditCategory.jsphello.jsplistCategory.jspCategoryCategoryDAOCategoryServiceCategoryServiceImplPage4NavigatorRedisConfigCategoryControllerHel…

CH10_简化条件逻辑

分解条件表达式(Decompose Conditional) if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd))charge quantity * plan.summerRate; elsecharge quantity * plan.regularRate plan.regularServiceCharge;if (summer())…

C#中List<T>的 AddRange方法使用说明

文章目录 C#中List<T>的 AddRange方法使用说明 C#中List的 AddRange方法使用说明 AddRange可以一次性添加集合A到当前集合B。 本身不能为空&#xff0c;但是可以保存null的数据。 List 中会保留集合中元素的顺序 将集合A添加到集合B的末尾 本身为null&#xff0c;使用 A…

国际测试委员会BenchCouncil首发“开源系统杰出成果榜” 百度飞桨上榜

&#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初阶、C…

轻量封装WebGPU渲染系统示例<14>- 多线程模型载入(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/ModelLoadTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见&#xff1a;引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔离。 …

uniapp 解决H5跨域的问题

uniapp 解决h5跨域问题 manifest.json manifest.json文件中&#xff0c;点击“源码视图”,在此对象的最后添加以下代码&#xff1a; "h5" : {"devServer" : {"port" : 8080, //端口号"disableHostCheck" : true,"proxy" :…

作为一个初学者,入门大模型其实没那么难

在生成式 AI 盛行的当下&#xff0c;你是否被这种技术所折服&#xff0c;例如输入一段简简单单的文字&#xff0c;转眼之间&#xff0c;一幅精美的图片&#xff0c;又或者是文笔流畅的文字就展现在你的面前。 相信很多人有这种想法&#xff0c;认为生成式 AI 深不可测&#xf…

通过@ConfigrationProperties读取配置文件属性并赋值

这种设计使得 Anything 成为 Something 类的静态成员&#xff0c;因此不依赖于外部类的实例。静态内部类通常更独立&#xff0c;它们可以单独存在且无需引用外部类的实例。 如果将 Anything 类定义为非静态的内部类&#xff0c;它将依赖于 Something 类的实例。这意味着每个 S…

Sybase PowerDesigner 16.7.7.7536 Crack

Power Designer 是Sybase公司的CASE工具集&#xff0c;使用它可以方便地对管理信息系统进行分析设计&#xff0c;他几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型&#xff0c;还可以为数据仓库制作结构模型&#xff0c…

安装Nginx并且添加fastDFS模块

安装Nginx并且添加fastDFS模块 因为这个模块必须在Nginx的安装的过程中才能添加&#xff0c;所有我们需要重新安装一个nginx&#xff0c;为了和原来已安装的Nginx进行区分&#xff0c;我们把新安装的Nginx取名为nginx_fdfs 将Nginx的tar包上传到Linux上 解压上传的Nginx文件 …

C++初阶(七)类和对象

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、流插入流提取1、流插入演示2、流提取演示3、cplusplus推荐 二、const成员三、取地址及con…

Ubuntu更新apt-get安装镜像源

前往清华开源镜像站获取镜像链接 修改镜像源&#xff0c;打开配置文件&#xff0c;将镜像源链接粘贴到配置文件 sudo vim /etc/apt/sources.list更新软件列表到本地 sudo apt-get update更新所有软件&#xff08;非必要&#xff09; sudp apt-get upgrade

Leetcode—100.相同的树【简单】

2023每日刷题&#xff08;十八&#xff09; Leetcode—100.相同的树 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isSameTree(struct TreeNode* p, struc…

如何当好一面面试官?

最近公司恢复了招聘&#xff0c;重新启动了校招流程&#xff0c;现在都已经 11 月了&#xff0c;刚好赶上校招黄金期&#xff0c;不过提前批的时间已经过了&#xff0c;也是有点神奇。 公司停止招聘好久了&#xff0c;突然重启&#xff0c;赶忙赶急地让我们推荐面试官&#xf…