SLAM从入门到精通(基于ros的反光柱定位)

news2024/11/14 5:15:51

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

        我们看论文或者看书的时候,讲的最多的一般就是基于自然环境的定位。不管是激光雷达,还是视觉,其实本身还有很多的不确定性。而对企业、工厂来说,大部分情况下没有办法容忍这种不确定性的。所以很多时候,企业里面用的定位技术往往不是那么高大上的技术,比如激光就用反光柱,视觉就用二维码等等。这里反光柱定位多用于大型物流设备,也算是用的比较多的一种定位方法。

        ros上面其他slam算法很多,但是反光柱的算法没怎么提,这里面最大的原因可能是因为商业的考虑,当然也可能是不屑一顾。但反光柱本身如果做的好,其实是真的可以帮企业挣钱的。所以,我们如果想学习反光柱定位的话,可以找一些开源的博客来看下,csdn下面的这一个专栏就有很大的参考意义。

https://blog.csdn.net/weixin_48702107/category_11927168.html

        本身总共有12篇文章,我们可以简单梳理一下,挑出对自己最有价值的那个部分。当然,这些文章中的内容对于一个产品来说还是远远不够的,不过可以用它来进行反光柱入门。下面,我们一起来学习下。

1、查找反光柱最强点

        反光柱有一个很大的特点,那就是对于激光的反射强度特别高,这是一个非常明显的特点。当然这也是反光柱本身区别于其他自然物最重要的特征。一般反光柱就是一个圆柱体,圆柱体之外包着一个反光贴,直径大约7-8cm左右。所以如果环境中只有一个反光柱的话,可以通过强度比较的方法,找出反光率最大的那个点,其实就知道了反光柱的大体位置了。

2、查找多个反光柱

        前面只是讨论了一个反光柱的情形,但是如果是多个反光柱的话,简单通过最大值的方法,是没有办法找出反光柱的位置的。这个时候,就要通过适合的阈值,将雷达的离散点拆分成几个区域,每一个区域就代表着一个反光柱。找到这些区域之后,再根据中间点就可以找到反光柱的基本位置了。经过这一步,我们已经成功从识别单个反光柱,发展到识别多个反光柱。

3、反光柱rviz可视化

        rviz本身不定义反光柱,所以可以通过Marker信息将反光柱绘制出来,这样也方便调试。相关内容,之前的文章也涉及过,

https://blog.csdn.net/feixiaoxing/article/details/133973755?spm=1001.2014.3001.5501

4、确定多反光柱的位置

        和2不同的是,这里我们需要进一步确定反光柱中心的位置。假设某一个区域代表一个反光柱,它的起始角度和末尾角度的中间值就可以看成是圆心的入射角度。通过中值查找,找出它的r_laser和theta角度之后,我们就可以求解出对应的x和y,其中反光柱的半径假设为r_landmark,

x = (r_laser + r_landmark) * cos(theta)
y = (r_laser + r_landmark) * sin(theta)

          有了x和y,借助于rviz的可视化,就可以将反光柱绘制出来了。

5、三角函数法求解圆心

        相比较4求解圆心的方法,三角函数是另外一种计算圆心的方法,有兴趣的同学可以继续看下。暂时没有时间了解的同学,可以暂时先忽略一下。

https://blog.csdn.net/weixin_48702107/article/details/125928758

6、对拟定圆心进行保存和读取

        保存和读取本身就是一个文件的保存和访问操作,这个没有什么可说的。一般来说,对于圆心的保存可以看成反光柱地图的保存,而读取则可以看成是反光柱地图的加载。不过当前保存的信息还是基于lidar坐标系,后期需要更改成全局坐标系。

        我们的机器人停在一个固定的地方,这个时候就可以通过反光柱扫描的方法生成一个反光柱地图。后期机器人移动的时候,就可以通过进一步反光柱匹配,经过计算得到当前机器人的位姿信息(x/y/theta)。

7、反光柱匹配

        如果机器人处于静止状态,本身机器人的位置就可以看成是(0,0,90)。但是一旦机器人移动开来,那么这个时候,lidar看到的反光柱数量有可能会发生了改变。不仅如此,对于lidar坐标系来说,它所看到的反光柱坐标其实也发生了改变。,这个里面有一点没有发生改变的,那就是不同反光柱之间的距离其实是不变的。因此这个时候,我们就要根据距离对新扫描的反光柱和之前反光柱地图中的数据,进行一个距离匹配。

        匹配之后,我们拿到了之前反光柱中圆心的位置,也就可以计算出小车的位姿信息了。

8、坐标转换

        这里的坐标系转换,主要就是将lidar坐标系转成世界坐标系。现在假设机器人的坐标是(x0/y0/theta0),机器人lidar位于后轮法线的正前方,距离是l,那么这个时候lidar的全局位姿就是,

xa = x0 + l * cos(theta0)
ya = y0 + l * sin(theta0)

        而lidar的扫描点坐标假设为(xr/yr),其中xr和yr可以依赖于lidar的r、angle来进行计算,那么扫描点在全局坐标下的位置为,

x_glb = xa + xr * cos(theta0) - yr * sin(theta0)
y_glb = ya + xr * sin(theta0) + yr * cos(theta0)

        将上面的xa和ya结论带入,

x_glb = x0 + l * cos(theta0) + xr * cos(theta0) - yr * sin(theta0)
y_glb = y0 + l * sin(theta0) + xr * sin(theta0) + yr * cos(theta0)

        这个时候我们假设小车最初的位置是(0/0/90),这样就可以计算出全局坐标下的反光柱位置,有兴趣一点的话,可以把周围场景的轮廓也记录一下。

9、初步定位

        初步定位的方法主要还是基于三边测量的原理。这里初步定位只是计算了x和y,没有计算机器人的theta角。有兴趣的同学可以看一下初步定位的计算流程,

https://blog.csdn.net/weixin_48702107/article/details/126075770

        希望手动推一下计算过程的同学,可以直接看这个图尝试一下,

10、动态记录

        所谓的动态记录,就是运动过程中如果发现新的反光柱,也进行保存处理。当新反光柱加进来之后,这样新反光住就变成了旧反光柱,用这个刚加进来得旧反光柱计算位姿后,去发掘更多的新反光柱。

11、动态匹配定位

        和动态记录一样,主要是优化6的流程,将保存的反光柱地图从lidar坐标系一步升级为全局坐标系的数据。之前是先求解lidar的全局位置,而后转化成机器人的全局位置,这里做了一步到位。因此需要反光柱地图中的数据也变成了全局坐标数据。优化之后,小车也可以动态计算出位置信息来了。

https://blog.csdn.net/weixin_48702107/article/details/126129166

12、位姿发布

        在第9步过程中当时只是求解出了x和y,其实根据8中的公式,找一个反光柱,就可以分别求出cos(theta0)和sin(theta0)的数值。借助于cos(theta0)和sin(theta0)就可以知道机器人的角度。讲究一点的话,可以找三根反光柱,做一个平均值计算。这样,有了x/y/theta之后,小车本身的位姿信息其实就算被求解出来了,当然也就可以发布了。

13、总结

        至此反光柱定位的方法已经被总结出来了,但目前为止,这个流程最多算一个demo,离实际产品还有一定距离,需要我们不断迭代和完善才行。最后还是非常感谢这位实习同学的专栏,它可以帮助很多同学了解一下反光柱定位究竟是怎么做的。

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

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

相关文章

公司电脑屏幕录制软件有什么功能

电脑屏幕录制软件有很多,今天简单说说说它的基础功能和附属功能: 基础功能: 1、屏幕录像 支持对所选电脑的屏幕进行录制,并且支持调整截屏频度、画面质量、单个视频时长等。 2、实时屏幕 可以对对方电脑进行实时屏幕查看&…

哥斯拉Godzilla使用中基于PHP的加密流量分析

转载于:https://blog.csdn.net/zlloveyouforever/article/details/129189396 哥斯拉Godzilla简介 据说是护网期间,各大厂商的waf不断在静态查杀、流量通信等方面对webshell进行拦截,众红队急需一款优秀的权限管理工具 , 虽说冰蝎3.0也不错 , …

MessagePassing分析与说明

1 Motivation 在图神经网络中,如何像在欧式空间一样进行卷积操作,其重要的问题在于如何更新当前位置的信息。 其每个位置(或者叫节点node)的更新方式如下所示。 这一个式子既可以表达GCN,也可以表达Edge Conv。 2 函…

wangeditor 富文本编辑器使用

使用环境vue3 ts &#xff0c;添加了字数限制 尝试了两种&#xff0c;使用方法类似&#xff08;参考文档&#xff09;&#xff0c;工具栏图标有不同&#xff0c;最后选用了第一种。 一、wangeditor 安装 npm i wangeditor --save 使用 这里封装了个简单组件 <templat…

浅谈AcrelEMS-GYM文体建筑能效管理解决方案-安科瑞 蒋静

1 概述 AcrelEMS-CA 文体建筑能效管理聚焦建筑的能量和信息的流向搭建平台解决方案。该系统解决方案集变电站综合自动化、电力监控、电能质量分析及治理、电气安全、能耗分析、照明控制、设备运维于一体。打破子系统孤立&#xff0c;配置方便&#xff0c;运维便捷&#xff1b;…

vue3.0运行npm run dev 报错Cannot find module node:url

vue3.0运行npm run dev 报错Cannot find module 问题背景 近期用vue3.0写项目&#xff0c;npm init vuelatest —> npm install 都正常,npm run dev的时候报错如下&#xff1a; failed to load config from F:\code\testVue\vue-demo\vite.config.js error when starting…

golang搭建http服务

golang环境搭建好之后,搭建htto服务 1.创建目录 创建main文件 创建成功,里面改成package main 终端执行操作创建好go.mod go mod init golang package golangimport ("fmt""net/http" )func sayHello(w http.ResponseWriter, r *http.Request) {_, _ fm…

TP4057替代DP4057 500mA线性锂离子电池充电器芯片

描述 DP4057是一款完整的单节锂离子电池带电池正负极反接保护采用恒定电流/恒定电压线性充电器。其SOT封装与较少的外部元件数目使得DP4057成为便携式应用的理想选择。DP4057 可以适合USB电源和适配器电源工作。 由于采用了内部PMOSFET架构&#xff0c;加.上防倒充电路&#xf…

基于机器视觉的12306验证码识别 计算机竞赛

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向…

ES6之Set集合(通俗易懂,含实践)

Set是什么&#xff1f;它的方法有哪些&#xff1f;它在实例开发中有什么作用&#xff1f; 让我为大家介绍一下吧&#xff01; ES6提供了新的数据结构 Set(集合) 。它类似于数组&#xff0c;但成员的值是唯一的。 创建方法&#xff1a; let s new Set()console.log(s)它属于什…

使用时间潜在瓶颈网络进行图像分类

介绍 简单的循环神经网络(RNN)对学习 时间压缩表示表现出强烈的归纳偏差。方程 1显示了递推公式,其中h_t是整个输入序列 的压缩表示(单个向量)x。 方程 1:递推方程。(来源:Aritra 和 Suvaditya)另一方面,Transformers(Vaswani 等人)对于学习时间压缩表示几乎没有归…

探索随机森林: 机器学习中的集成学习神器

机器学习 第七课 随机森林 概述机器学习机器学习的主要分类监督学习无监督学习强化学习 集成学习提高准确性增强稳定性提升泛化能力 集成学习的主要方法BaggingBoostingStacking 随机森林的理论基础决策树的基本原理随机森林的生成过程随机森林的优势与局限性 随机森林的实际应…

IDEA 构建web项目-详细教程

1、创建一个新项目 1、点击File,选择New,然后点击Project 2、选择Empty Project,然后点击Next 3、新建一个项目 4、在新建完项目后&#xff0c;点击Finish后会弹出Open Project这个窗口&#xff0c;建议选择New Window 5、在Project Structure中选择Project Settings --> M…

rosbag记录与回放数据以及通过GMapping算法创建地图与导航

1、引言 通过前面几章的介绍&#xff0c;明白了ROS的工作原理&#xff0c;并且我们也能遥控机器人了&#xff0c;那机器人如何在实际环境中自主导航呢&#xff1f;要做到这点&#xff0c;机器人必须知道它自己在哪以及需要到哪儿去。 意味着&#xff0c;机器人需要有一个周围环…

3分钟教你用Python+Appium实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub…

中创 | 数据泄露事件频发:卡西欧数据泄露涉及149个国家用户

49%的企业在过去两年中遭受了数据泄露 网络安全事件导致关键业务意外停机&#xff0c;平均损失为每小时20万美元\小时 一、卡西欧发生数据泄露事件 作为享有盛名的国际品牌&#xff0c;卡西欧40年来总销量突破1亿只&#xff0c;尽管卡西欧享誉全球&#xff0c;拥有顶级的网…

mac安装nodejs,跑vue程序

1. 下载node.js for mac&#xff0c;地址&#xff1a;Node.js。一路安装就可以了&#xff0c;无需修改。 2. mac终端&#xff0c;查看node和npm的版本。 3. 配置环境变量&#xff0c; vim .bash_profile增加PATH$PATH:/usr/local/bin/ 4. 但是毕竟npm安装一些东西还是太慢了所…

笔记本电脑的摄像头找不到黑屏解决办法

这种问题一般来说就是缺少驱动&#xff0c;就要下载驱动。 问题&#xff1a; 解决办法&#xff1a; 1.进入联想官网下载驱动 网站&#xff1a;https://newsupport.lenovo.com.cn/driveDownloads_index.html?v9d9bc7ad5023ef3c3d5e3cf386e2f187 2.下载主机编号检测工具 3.下…

类图表示法

设计模式&#xff0c;用设计图表示的话&#xff0c;主要用到类图。常见UML类图如下&#xff1a; 1、类图&#xff1a;矩形框&#xff0c;代表一个类&#xff08;Class&#xff09;。类图分为三层&#xff0c;第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则用斜体显…

ThinkPHP文件上传验证器

在thinkphp中的文件上传功能,添加验证器的过程中.踩得小坑&#xff0c;简单记录。 具体内容如下 代码如下. 视图层 就是简单的form表单,用来上传文件。 <form action"/admin/files/upFile" enctype"multipart/form-data" method"post">&…