扫地机器人地图与用户终端的同步

news2024/11/20 7:17:35

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「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也只需指向用于地图重定位的数据文件即可。


其实,上面的内容也适合扫地机之外的移动机器人,关于地图还有很多可以聊,不过暂时聊到这,下次见…

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

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

相关文章

Android 串口协议

前言 本协议是 Android 应用端与主控板之间的通信协议,是串行通信协议。 协议要求同一时间只能有两个通讯端点在相互通讯,采用小端传输数据。 硬件层基于RS485协议,采取半双工,一主多从的通讯模式。Android定义为主机&#xff0c…

一、初识Redis与分布式系统

目录 一、Redis应用 二、实现方式 三、Redis应用 四、分布式系统 五、分布式系统实现 1、应用服务和数据库服务分离 2、引入负载均衡,应用服务器集群(解决高并发) 3、引入读写分离,数据库主从结构(解决高并发&a…

如何在iPhone设备中查看崩溃日志

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么? 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志,以便调查崩溃的原因。我们将展示三种不同的…

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析(4) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置…

【Java并发】深入浅出 synchronized关键词原理-上

一个问题的思考 建设我们有两个线程,一个进行5000次的相加操作,另一个进行5000次的减操作。那么最终结果是多少 package com.jia.syn;import java.util.concurrent.TimeUnit;/*** author qxlx* date 2024/1/2 10:08 PM*/ public class SynTest {privat…

使用Vue3开发学生管理系统模板1

环境搭建 通过解压之前《Vue3开发后台管理系统模板》的代码&#xff0c;我们能够得到用户增删改查的页面&#xff0c;我们基于用户增删改查的页面做进一步的优化。 创建学生增删改查页面 第一步&#xff1a;复制用户增删改查页面&#xff0c;重命名为StudentCRUD.vue <…

新闻稿发布:媒体重要还是价格重要

在当今信息爆炸的数字时代&#xff0c;企业推广与品牌塑造不可或缺的一环就是新闻稿发布。新闻稿是一种通过媒体渠道传递企业信息、宣传品牌、事件或产品新闻的文本形式。发布新闻稿的过程旨在将企业的声音传递给更广泛的受众&#xff0c;借助媒体平台实现品牌故事的广泛传播。…

exec、execFile、fork、spawn的区别与使用场景

在Node.js中&#xff0c;通过子进程可以实现并行执行任务&#xff0c;处理复杂的操作&#xff0c;以及与外部命令或文件进行交互。Node.js提供了多种子进程创建方法&#xff0c;包括exec、execFile、fork和spawn。本文将对这些方法进行比较&#xff0c;并介绍它们的适用场景和示…

【深度学习-基础学习】Transformer 笔记

本篇文章学习总结 李宏毅 2021 Spring 课程中关于 Transformer 相关的内容。课程链接以及PPT&#xff1a;李宏毅Spring2021ML这篇Blog需要Self-Attention为前置知识。 Transfomer 简介 Transfomer 架构主要是用来解决 Seq2Seq 问题的&#xff0c;也就是 Sequence to Sequence…

大数据StarRocks(一) StarRocks概述

1 StarRocks介绍 StarRocks是新一代极速全场景MPP(Massively Parallel Processing)数据库&#xff0c;它充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果&#xff0c;在业界实践的基础上&#xff0c;进一步改进优化、升级架构&#xff0c;并增添了众多全…

NSSCTF 1zjs

开启环境: 搞就完事了,别玩魔法! 源码打开 点击访问:./dist/index.umd.js" 搜索php,找到23条相关的,注意到有一个特别的信息: PERFORMANCE OF THIS SOFTWARE.Your gift just take it : /fk3f1ag.php 访问: node4.anna.nssctf.cn:28325/fk3f1ag.php 得到这样: ([![]…

【hyperledger-fabric】部署和安装

简介 对hyperledger-fabric进行安装&#xff0c;话不多说&#xff0c;直接开干。但是需要申明一点&#xff0c;也就是本文章全程是开着加速器进行的资源操作&#xff0c;所以对于没有开加速器的情况可能会由于网络原因导致下载资源失败。 资料提供 1.官方部署文档在此&#…

IPC之十二:使用libdbus在D-Bus上异步发送/接收信号的实例

IPC 是 Linux 编程中一个重要的概念&#xff0c;IPC 有多种方式&#xff0c;本 IPC 系列文章的前十篇介绍了几乎所有的常用的 IPC 方法&#xff0c;每种方法都给出了具体实例&#xff0c;前面的文章里介绍了 D-Bus 的基本概念以及调用远程方法的实例&#xff0c;本文介绍 D-Bus…

mysql 条件位运算实现多值存储

一、多值存储 mysql 条件位运算位运算实现多值存储&#xff0c;方法适合数据范围有限&#xff0c;且不会变更在业务上往往会出现多选的情况&#xff0c;例&#xff1a;选择 周一 至 周日 随意组合&#xff1b; 数据在设计时就会如何去储存&#xff1f; 一种是一般是在储存是以…

ASP.NET Core AOT

Native AOT 最初在 .NET 7 中引入&#xff0c;在即将发布的 .NET 8 版本中可以与 ASP.NET Core 一起使用。在这篇文章中&#xff0c;我们从总体角度审视其优点和缺点&#xff0c;并进行测量以量化不同平台上的改进。 源代码&#xff1a;https://download.csdn.net/download/he…

MATLAB中xcorr函数用法

目录 语法 说明 示例 两个向量的互相关 向量的自相关 归一化的互相关 xcorr函数的功能是返回互相关关系。 语法 r xcorr(x,y) r xcorr(x) r xcorr(___,maxlag) r xcorr(___,scaleopt) [r,lags] xcorr(___) 说明 r xcorr(x,y) 返回两个离散时间序列的互相关。互相…

SpringBoot整合ElasticSearch实现CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述项目搭建 概述 SpringBoot支持两种技术和es交互。一种的jest&#xff0c;还有一种就是SpringData-ElasticSearch。根据引入的依赖不同而选择不同的技术。反正作为spring全家桶&#xff0c;目前是以springdata为主流使用技…

uniapp中uview组件丰富的Code 验证码输入框的使用方法

目录 基本使用 #自定义提示语 #保持倒计时 API #Props #Methods #Event 基本使用 通过ref获取组件对象&#xff0c;再执行后面的操作&#xff0c;见下方示例。 通过seconds设置需要倒计的秒数(默认60)通过ref调用组件内部的start方法&#xff0c;开始倒计时通过监听cha…

在 Oracle 数据库表中加载多个数据文件

在本文中&#xff0c;我将展示 SQL 加载器 Unix 脚本实用程序的强大功能&#xff0c;其中 SQL 加载器可以使用自动 shell 脚本加载多个数据文件。这在处理大量数据以及需要将数据从一个系统移动到另一个系统时非常有用。 它适合涉及大量历史数据的迁移项目。那么就不可能为每…

跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用

配置&#xff1a; 日志库文件github&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 新建vendor文件夹 将下载好的spdlog放入 配置YOTOEngine的附加包含目录&#xff1a; 配置Sandbox的附加包含目录&#xff1a; 包装spdlog&#xff1a; 在YOTO文件夹下创建…