你听说过OTA吗?
以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/M660Sc4ey1SxCpRT6vcM9g
what?
不知有多少朋友玩过或者接触过新能源车,虽然新能源囊括的范围很广,不过这里指的新能源车特指电动汽车,比如特斯拉等车企生产的电动车。
特斯拉车主应该对车载软件的自动更新功能很熟悉了,特斯拉会不定期通过wifi或者蜂窝网络(比如4G、5G信号网),向车主推送最新的车载软件升级包,里边既可能包含有新功能的添加,也可能包括有对现有功能的完善补丁,这里所用的技术就是OTA。
OTA, 英文全称Over-the-air,直译成中文就是无线升级的意思。OTA执行过程,是不需要设备生产厂家或者专业人士携带专用工具对目标产品执行软件更新的。需要的条件是,让设备接入网络,自动接收软件更新包后,在设备所有者的同意下执行升级操作。
好了,这就是所谓的OTA。
why ?
以往的电子产品,从设计阶段就会把整个产品的功能安排得明明白白,虽然也会预留OTA的升级功能,不过,仅是为了修补已有软件漏洞。
但是埃隆·马斯克就把互联网的产品思维引入汽车行业,不断开发迭代新软件功能,比如特斯拉一再宣称领先于同行的自动驾驶导航算法就不断地推出升级版本,甚至还有车载游戏推出,然后通过OTA的方式推送给特斯拉的客户。
以前的汽车,消费者更愿意把它当作出行工具,可能一买就是十年八载的事了。而现在的智能汽车除了不失出行的功能,更像是一件不断迭代变化的电子玩物工作站,随着新功能的不断推送,于是消费者更愿意提高消费频率为新功能埋单。
马斯克的造车思维开启了现代智能汽车时代,也对特斯拉的成就功不可没。这里边用到的OTA的技术就是必要的桥梁了。
how ?
好了,上面都是在费口水,下面把电动车换成扫地机,就以扫地机器人为例,让我们来探讨一下怎么玩OTA升级。
推送的更新包从哪来?
设备维护厂家负责跟踪对外已销售的产品质量反馈,及时收集客户的诉求,然后组织项目团队评估可行性和细节,再给研发团队制定目标并及时输出软件更新包,最后厂家还要负责把更新包发布到云端,并指定更新策略。

怎样开始推送呢?
假设扫地机器人已经和云端绑定上,云端查询后台推送开关已打开则通过网络通知APP--设备有软件更新包可用,然后APP提示客户是否需要此次更新。一旦同意,APP则请求云端把更新包的下载链接发送给设备,接着设备进入下载软件更新包的流程,下载完成后再执行升级的具体操作。

升级过程在做什么?
扫地机主机的升级
机器人从云端接收完软件更新包后,更新包暂存在内存中。为了避免升级过程中出现电量供应不足而中途关机的尴尬,升级开始之前,需要对机器的电量状态或者是否正在充电中进行自检,根据自检状态判断机器当前是否适合开始执行升级动作。
自检通过后,先对更新包文件做校验,以确保文件没有损坏或者被插入恶意文件信息,然后备份更新包文件(备份包的用处稍后解释),解压更新包提取里边的各个软件资源,逐一执行升级,同时每完成一步操作需要向云端报告进度,直到最后所有解压所得的资源都被升级利用完毕。
如果其中任何一步出错需要中止升级流程,机器人都需要向云端报告状态,由云端提示APP结束OTA升级流程。升级完成后,所有软件都需重启,所有重启完成后需向云端报告软件当前的新版本号,APP再根据新版本号判断升级目标是否达成。无论升级是否成功,机器人都需要在最后把已备份的更新包从机器内部清理掉,以清除未升级结束的标志。


如果升级过程中途断电了,那么重启后,可以依据备份的更新包文件是否存在来判断是否需要重新进入升级流程。

基站的升级
最近主流的扫地机都已经进化到配备有清洗基站了,何为清洗基站?
这个基站的工作目标是为了给扫地机器人自动清理尘盒和拖布等污损组件,尽量做到避免购买扫地机的消费者介入扫地机的清扫工作过程中,减轻消费者的不必要负担,进一步满足消费者的舒适需求。
以往的扫地机给普通消费者的体验就是,工作过程中,需要人工不断介入,帮助清理机器的污损组件,否则机器就不能好好连续工作。为了解决这些痛点,基站的诞生和功能迭代就势不可挡了。
鉴于主机已经带有wifi模组可以和云端直接通信,而且与云端正常通信之前必须经过绑定的过程,为了简化功能设计,基站其实可以通过主机和云端通信,所以没有必要在基站也配置wifi模组了。
那么,主机(扫地机器人主体)怎么和基站协同工作呢?它们之间靠什么来互通有无呢?
目前行业内的基站通信方案绝大部分都采用433的无线通信协议与扫地机主机通信,但是433的通信丢包率实际上是很高的,导致在OTA升级这种高要求的使用场景下,通信环节要格外关注通信质量的问题,因此应用层通信协议必须包含容错的重发机制。

你听说过OTA吗?的更多相关文章
- 商业研究(20):滴滴出行,进军海外包车?与OTA携程和包车创业公司,共演“三国杀”?看看分析师、投资人和权威人士等10个人的观点碰撞
小雷友情提示:创业有风险,投资需谨慎. 前一篇文章,在探讨境外游创业公司-皇包车和易途8的时候,提到"滴滴如果进军海外包车,为海外华人提供打车和包车服务,有较大可能对海外包车公司 ...
- 我听说 C...
我听说在 c 语言的世界里,goto 和异常处理都是声名狼藉的东西,而我认为它们在一起就能化解各自的问题.
- 听说你们要开始学C了
同学们好: 先自我介绍一下,我是你们的助教吴喆(厚颜无耻地要求大家叫我吉吉老师:-D),本科学的电子,所以陆陆续续接触了不少C/C++的工作,曾经被编码折磨得死去活来,如今却对其念念不舍,颇有点“斯德 ...
- 使用HTTPS网站搭建iOS应用内测网站(OTA分发iOS应用)
为什么要搭建应用内测网站呢? 1.AppStore的审核速度比较慢,万一被拒,还得等,而且一旦发布,任何人都可以下载,而有些时候只有老板想知道最新的修改是否符合要求,万一不符合要求呢?又要修改了. 2 ...
- [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
由于英语对于一个程序员来说,重要性你懂得.因此我会开始逐渐在博客上加入英语的一些东西. 听说不背单词,考英语会是这种下场 在中国, 「学英语」大抵遵循着这样一条 罗蒙诺索夫质量守恒定律 因为英语学着学 ...
- 听说你会打地鼠(动态规划dp)
题目来源:https://biancheng.love/contest-ng/index.html#/41/problems G 听说你会打地鼠 时间限制:300ms 内存限制:65536kb 题 ...
- OTA(空中下载技术)
选自:http://baike.baidu.com/link?url=bKOx4Gcgefi17Zt09pRA6zI-p7zzKVkoN07khRVTPfUtqyRMzdG5xURfpnp3wSP_A ...
- Android OTA 升级之三:生成recovery.img
Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...
- ALM/QC OTA Field in Database(查询ALM数据库的字段)
在使用ALM的OTA接口编写脚本的时候,通常会需要知道各个选项在数据库中对应的字段,才能通过脚本读取或写入数据.比如要获取test case的step内容,要在测试结束时将测试实际结果写回test s ...
- ALM11 OTA API接口的问题
ALM11 在安装的时候好像不会自动加载OTA接口. 正常情况下, OTA的接口文件的路径为: C:\Program Files\Common Files\Mercury Interactive\Qu ...
随机推荐
- fastadmin后台分页设置显示方法
1.参照日志列表的分页(后台代码都有) 2.修改默认分页配置,在初始化里面加上: pageList: [5,10,'all'], 3.显示列表: [$where, $sort, $order, $ ...
- 清源正本,鉴往知来,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中引用类型是否进行引用传递EP18
开篇明义,Go lang中从来就不存在所谓的"引用传递",从来就只有一种变量传递方式,那就是值传递.因为引用传递的前提是存在"引用变量",但是Go lang中从 ...
- 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化
前文目录链接参考: 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化 https://www.cnblogs.com/yizhiamumu/p/16694126.html 消息队列 ...
- python自动更新pom文件
前言 项目越来越多,版本管理越来越麻烦,在项目上我使用 maven version 来进行版本管理.主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一. 关于这个插件如何使 ...
- ConfigMap使用说明
ConfigMap概述 ConfigMap供容器使用的典型用法如下. (1)生成为容器内的环境变量. (2)设置容器启动命令的启动参数(需设置为环境变量). (3)以Volume的形式挂载为容器内部的 ...
- Elasticsearch与MySQL对应关系表
MySQL 中的数据库(DataBase),等价于 ES 中的索引(Index). MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type). ...
- MySQL数据表更新模板
-- ---------------------------- -- 新增表 -- ---------------------------- CREATE TABLE `biz_circle_lead ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。
系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- System.IO.FileSystemWatcher的坑
System.IO命名空间下面有一个FileSystemWatcher,这个东西可以实现文件变动的提醒.需要监控文件夹变化(比如FTP服务器)的情形非常适用. 需要监控文件新建时,我们可以这么写: _ ...
- 齐博x1标签实例:标签设置取组图不存在就取内容中的图片
对于CMS或者是其它,使用下面的代码 <div class="morepic"> {volist name=":getArray($pics=$rs.picu ...