扫地机器人地图与用户终端的同步
以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/APaJheSbgTW3jNssWsp5Ng
地图数据来源于机器人算法模块,一般通过SLAM算法完成建图的过程。
建图过程中,基础数据涉及到各种实时的传感器,比如陀螺仪、激光雷达、线激光等等。这些传感器并不都是需要的,而是按照实际设计方案要求添加。比如目前市面上的那些扫地机器人里,廉价的最多只用了陀螺仪,主流的用了激光雷达,高档新潮的可能还加上线激光来达到宣称的三维建图,甚至有的还宣称用了摄像头达到AI识别障碍物。
why & what ?
内容
地图数据里边一般会包含分辨率,长宽方向的点数和每个点的位置特征。分辨率用来表明每个点占据多大空间,代表着物理世界位置的尺寸单元。点的位置特征,通常表示为点的类型,用来分辨每个点代表什么东西,比如这个点是障碍物,悬空点或者正常的可通行位置。
地图里也会包含其它的一些位置信息,比如充电桩的坐标等。现在的自主式移动机器人都是使用电池供电的,因此充电桩也需要配套有。
其它需要包含的信息视乎需求而定。
数据量
由于地图数据包含了每个点的特征,因此数据量的总大小视乎地图的面积大小,面积越大地图数据也会越大。
既然地图数据大,那么就有必要在同步之前对数据进行压缩了。一般业内都采用LZ4的格式来压缩地图数据。
关于LZ4,看看官方的介绍
LZ4 is lossless compression algorithm, providing compression speed > 500 MB/s per core (>0.15 Bytes/cycle). It features an extremely fast decoder, with speed in multiple GB/s per core (~1 Byte/cycle). LZ4 library is provided as open source software using a BSD license.
https://lz4.github.io/lz4/
意思就是LZ4压缩和解压的速度非常快,而且是无损压缩哦。压缩每秒可以去到500MB,解压每秒可以去到GB等级,用来处理一般的地图数据而言,绰绰有余了。LZ4源代码工程遵循BSD授权,所以是免费使用的。
分类
外部节点需要做的事情无非就是提供个可视化的界面给用户,用户再从中了解接收到地图的相关信息,重点是看得到的地图信息。那么,算法模块产生的地图数据就可以划分为两部分,一部分是只包含了图形化的信息(方便绘制地图),另一部分就包含了算法重定位的信息。
how ?
为了分离数据与外部节点的同步过程,地图数据的外发需要交给一个单独的模块处理,这里使用网络代理模块来称呼。
1.实时地图更新上传
自主移动式机器人在移动过程中,根据传感器的实时数据,算法模块生成地图数据,然后传递给网络代理模块,网络代理模块负责实时发往手机app等用户终端程序。
由于数据量大,如果数据经过任何第三方转发,比如IOT云,势必会挤占IOT云的带宽,导致IOT云的负担过重,所以这种大数据的传输只会从点到点,也就是我们常常用到的P2P传输方法。
地图数据在压缩后通常使用文件的形式来暂存,传输也以文件为单位把内容发送出去。
虽然地图数据走P2P的通道传送,但是传送的数据量毕竟比较大,一直传输地图数据会占用大量的本地带宽,而且接收端还得不断更新和对比接收到的数据。如果用户端在某些时段压根就不想要接收地图数据,比如使用的手机app页面切换到了和地图无关的设置界面,app这时就不需要接收任何的地图数据和浪费算力在这些无用的数据上面。
那么,可以通过设计一套心跳机制,只要app在一定的时间范围内有下发心跳包给到机器,机器的网络代理模块就知道在什么时候需要上传地图数据。
这种思路不会影响到算法模块对地图数据的生成。
2.云端多地图
有些用户希望可以在不同的地方,比如不同的楼层各有一份地图,并且保存下来方便在终端app随时调用。这就引出了对多地图的管理需求。
无论是云端还是本地,地图存在哪里都是可以的。不过,由于嵌入式的片内或者板上存储资源比较紧张,机器在本地一般只会存一份当前的临时地图数据文件。而其它的地图数据需要存放在云端,然后通过终端app调用管理。
鉴于有多份地图,那么终端app怎么区分哪一份云端地图和机器当前地图是对应的呢?这就需要在地图数据中引入地图ID的信息,这个ID由机器自分配和云端无关。
云端管理多地图,包括保存、删除、切换等。
保存
将机器本地中的当前地图,以文件的形式上传到云端,上传的目的地址URL由云端分配。上传的数据包括图形化的地图数据以及用于地图重定位的信息,共两份。
但是,如果机器建图还没完成就触发了保存到云端,这样岂不是不合理?所以又有必要在地图数据中引入一个量来表示地图是否稳定,终端app可以根据这个量来判断是否允许保存到云端。
删除
删除保存在云端的地图数据,操作过程仅涉及云端,无需机器参与。
切换
通过下发指定的云端地图URL给到机器,由机器自主下载使用。由于云端保存的地图数据有两部分,机器其实只需要用到地图重地位的信息,那么下发的URL也只需指向用于地图重定位的数据文件即可。
其实,上面的内容也适合扫地机之外的移动机器人,关于地图还有很多可以聊,不过暂时聊到这,下次见…
相关文章:

扫地机器人地图与用户终端的同步
以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/APaJheSbgTW3jNssWsp5Ng 地图数据来源于机器人算法模块,一般通过SLAM算法完成建图的过程。 建图过程中,基础数据涉及到各…...

使用机器学习进行语法错误检测/纠正
@francescofranco_39234 一、说明 一般的学习,特别是深度学习,促进了自然语言处理。各种模型使人们能够执行机器翻译、文本摘要和情感分析——仅举几个用例。今天,我们将研究另一个流行的用途:我们将使用Gramformer构建一个用于机器学习语法错误检测和纠正的管道。 阅读本文…...

从0到1快速入门ETLCloud
一、ETLCloud的介绍 ETL是将业务系统的数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程,目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,为企…...

QT上位机开发(会员管理软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了ini文件的解析办法,通过QSettings类就可以很轻松地访问ini文件里面的数据。除了ini文件之外,另外一种经常出…...

线性代数笔记3 1.1
学习视频: 2.2 矩阵运算(二)_哔哩哔哩_bilibili 包括内容: p10矩阵运算(二) p11特殊矩阵 p12逆矩阵(一) p13逆矩阵(二)...

2023年12月编程语言排行榜
TIOBE Index for December 2023 December Headline: C# on its way to become programming language of the year 2023 2023年12月的TIOBE指数:12月头条:c#将成为2023年最佳编程语言 Yes, I know, we have been here before. At the end of 2022, it looked like …...

Redis VS Memcached:选择哪个更适合您的应用?
目录 1、前言 2、概念简介 2.1 Redis 2.2 Memcached 3、数据模型 4、持久性 5、分布式能力 6、性能和扩展性 7、如何选择适合您引用的缓存系统 8、结语 1、前言 Redis和Memcached都是常见的内存缓存系统,用于提升应用程序的性能和可扩展性。它们都具有高…...

【HarmonyOS开发】共享包HAR和HSP的创建和使用以及三方库的发布
OpenHarmony提供了两种共享包,HAR(Harmony Archive)静态共享包,和HSP(Harmony Shared Package)动态共享包。 HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C库、资源和配置文件&…...

安装 Node.js、npm
安装 nodejs 安装Node.js的最简单的方法是通过软件包管理器。 Node.js官网:https://nodejs.org/en/download/ cd /usr/local/src/wget -c https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xz xz -d node-v18.16.0-linux-x64.tar.xz tar -xf node…...

解决报错:找不到显卡
今天做实验碰到一个问题:torch找不到显卡: 打开任务管理器,独显直接没了,一度以为是要去修电脑了,突然想到上次做实验爆显存,屏蔽了gpu用cpu训练: import os os.environ["CUDA_DEVICE_OR…...

如何使用Node.js快速创建本地HTTP服务器并实现公网访问服务端
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【社交网络分析】课程考试复盘 + 相关资料补充
【社交网络分析】考试后复盘 相关资料补充 写在最前面论述1.描述Logistic回归模型构造损失函数的主要思想。它是如何把线性回归预测模型转化为二分类模型的。Logistic回归模型构造损失函数的主要思想Logistic回归如何将线性回归预测模型转化为二分类模型 2.社交网络分析中面临…...

算法——队列+宽搜(BFS)
队列这种数据结构大都服务于一个算法——宽搜(BFS)。宽搜还可以运用到二叉树、图、迷宫最短路径问题、拓扑排序等等 N叉数的层序遍历 N叉树的层序遍历 题目解析 给定一个 N 叉树,返回其节点值的_层序遍历_。(即从左到右&#…...

前端八股文(CSS篇)二
目录 1.css中可继承与不可继承属性有哪些 2.link和import的区别 3.transition和animation的区别 4.margin和padding的使用场景 5.::before和:after的双冒号和单冒号有什么区别? 6.display:inline-block什么时候会显示间隙 7…...

系统架构设计师笔记
第1章计算机组成与体系结构 1.1.1计算机硬件的组成 (1)控制器。控制器是分析和执行指令的部件,也是统一指挥并控制计算机各部件协调工作的中心部件,所依据的是机器指令。控制器的组成包含如下。 ①程序计数器PC:存储下…...

Livox-Mid-360 固态激光雷达ROS格式数据分析
前言: Livox-Mid-360 官方采用livox_ros_driver2ROS功能包发布ROS格式的数据,livox_ros_driver2可以把Livox原始雷达数据转化成ROS格式并以话题的形式发布出去。 下面列举一些雷达的基本概念: 点云帧:雷达驱动每次向外发送的一…...

如何恢复 iPhone 上永久删除的照片?
2007年,苹果公司推出了一款惊天动地的智能手机,也就是后来的iPhone。你会惊讶地发现,迄今为止,苹果公司已经售出了 7 亿部 iPhone 设备。根据最新一项调查数据,智能手机利润的 95% 都进了苹果公司的腰包。 如此受欢迎…...
基于单片机的公交车站自动报站器设计与实现
一、摘要 随着城市交通的快速发展,公交车作为城市公共交通的主要工具,其便捷性和高效性得到了广泛的认可。然而,由于公交车站的广播系统存在一定的局限性,如人工报站容易出现失误、音量大小不一等问题,给乘客带来了不…...

python之Selenium WebDriver安装与使用
首先把python下载安装后,再添加到环境变量中,再打开控制台输入: pip install selenium 正常情况下是安装好的,检查一下“pip show selenium”命令,出现版本号就说明安装好了。 1:如果出现安装错误: 那就用“…...

基于Java+Vue+uniapp微信小程序国产动漫论坛系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容:SpringBoot、Vue、SSM、HLM…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...