能够有时间静下心来写一篇文章,传递一些自己的过往经验,对于我现在的境况来说也不是一件容易的事了。
最近又是病魔染身的恢复阶段,上次在医院写了一篇关于两轮车行业控制器的“卷”像,收获了几千个粉丝,这对我当时来说备受鼓舞。而今旧疾复发又在医院躺了一个月,随着头脑清醒,身体恢复,感悟颇多,往事也浮上心头,顺应泉涌的思绪回忆下当年玩蓝牙解锁的经历。
想来也是多年之前了,当年所在公司的组织架构上效仿了阿里的大中台模式,业务端又刚刚布局了两轮车业务,我在中台负责电子部分的研发,其中一部分任务是探索一些业务端可能需要的技术点,对于接近解锁也算是系统的做了一些调研。
一、早期两轮车在解锁上的方向
早期的两轮车没有太多智能体验可言,其注重的依然是高可靠,耐摔,耐用,城市其实还是蛮少见的,但是农村则有很多,农民看待这个东西就是经不经得用,所以俗称这玩意为小电炉。
在两轮车的启动和锁车方面,最初只是机械钥匙来控制电门锁,甚至连报警器也没有。
后来两轮车学着汽车的用户体验模式设计出了遥控钥匙,市场上涌现出了大量的公模产品,3-4个按键,控制两轮车的启动,锁止,以及设防功能。这种方案一般应用的是超再生射频无线技术,后来普遍使用了433Mhz的无线通信,这类芯片在深圳已经做到非常高的集成度,外部只需4个按键和天线,内部各种编码对码机制都集成了,成本就几毛钱,用量非常大,因为除了两轮车的钥匙,它还被用到各种玩具遥控,卷帘门控制,停车场门控等。
作为中台部门,肯定是要着眼于突破现有技术,做更智能可靠,更具用户体验感的技术探索,于是当时把这个技术方向就定为了接近解锁技术。
当时汽车的无钥匙解锁及一键启动等技术已经很普遍了,于是我第一个想到的就是沿用汽车的PKE技术。
两轮车的无感解锁--PKE技术原理
解决一个需求的想法其实并不难,就像两轮车上我们想沿用汽车的技术一样,我们总能在其他行业找到类似的应用,但是真正实现起来会发现存在诸多问题,汽车的PKE方案当时基本是NXP的居多,那个方案很贵,根本无法应用到两轮车上,幸好有深圳的一些半导体公司将这项汽车应用技术简化,把成本降了下来。
这里介绍一下广芯微电子的PKE方案,专用于电动车和两轮车上面的低成本方案
有兴趣的可以单独联系沟通(微信:AlwaysDebug)
所以,如今在两轮车上实现PKE的解锁成本非常低,可这是智能硬件时代,万物皆有蓝牙,万物皆连手机,万物皆可上云。两轮车市场的需求已经被车联网的风吹进了物联网的时代,车上的蓝牙是必不可少的,那么为了成本的最优化设计,怎么利用蓝牙这个无线技术来实现解锁就变成了迫切需要解决的问题。
二、解决测距算法和硬件问题
印象中从2013年左右,BLE随着智能手机的广泛应用也迅速的展开了智能硬件的创新趋势,当时的智能硬件产品五花八门,让人眼花缭乱,几乎所有的产品加上智能两个字就等同于加上了BLE技术,和手机通信再加上手机上的APP各种数据整合及算法,互联网硬件空前的繁荣起来。
虽然BLE在低速通信方面和手机的配合可以说是天衣无缝,但是如果仅仅利用这种通信来解决接近解锁的功能,这个接近的概念就显得非常的模糊和不可靠,因为BLE的通信距离虽然统一的说法是10m,但是因为不同的手机设计以及天线类型和发射功率的不同,通信的距离远近差异很大,空旷的时候通信距离甚至可以达到100m,但是在存在遮挡或者电磁环境干扰大的地方就会缩短为10m以内,尤其是对于wifi的干扰,当时记得在小米调试的时候,我们的车在小米大楼的某个位置收到各种wifi信号的干扰导致通信距离缩短为2-3m。当然这里的问题并不只是干扰的问题,还和蓝牙模块的设计,以及模块和整机的布局接地有关系,我会在后面详细介绍。
那么靠通信的连接和中断来判断接近显然精度是不够的,于是我们开始调研基于BLE的RSSI信号强弱来判断设备间的距离的算法,最初用我们的模组进行测试,在空旷的情况下表现还是不错的,虽然RSSI值和设备距离之间的关系并非线性关系,但是我们可以进行标定和拟合,以使得RSSI的值比较准确的反应距离的数据,不过这个距离的精度实际上也只有两三米左右的精度。
然而当我们将算法真正移植到产品场景中的时候,真正的挑战才慢慢地显现出来。
由于公司的中台模式加上蓝牙联盟的认证要求,迫使我们在蓝牙的设计上必须统一蓝牙模组的设计,因此我们整个集团各个业务线都需要使用中台设计的蓝牙模块,因为只有这样蓝牙模块才可以进行一次BQB认证,应用在其他的产品上可以使用列名的方式以降低费用。
认证的成本降低只是其中一个优点,另外一个优点就是蓝牙模组的生产管控统一起来,也会避免不同业务线由于对蓝牙的不熟悉而造成设计问题,这也应该算是硬件公司中台架构的一个核心思想。
说完优点肯定是有缺点的。
公司发展初期,研发在蓝牙上没有任何的经验,我是现学现卖的自己设计了基于Nordic的蓝牙模块,抄了一个倒F天线上去,当时对于天线性能的评估绝对是懵逼的状态,只是对通信距离和丢包进行了简单的测试,而这样的测试其实只能确保通信的正常,对于通过RSSI进行距离的评估是很差的。因此我们通过认证的蓝牙模组在测距方面出现了以下的各种问题。
首先,天线的辐射方向问题,蓝牙的板载天线往往极化方向比较窄,我们第一款蓝牙模块的辐射方向特别窄,这就导致了不同方向上检测到的RSSI值和距离的对应关系差异很大,在用户场景上的体验就是,从不同的方向走近设备,解锁的体验不同(和蓝牙布局的姿态位置都有关系),甚至可能会失灵。而且不同的车型在应用同一个蓝牙模块的时候,天线的性能往往也存在比较大的差异,这是因为天线的回路接地的时候要考虑整个系统板的参考地平面,因此对于这类应用还是需要每一个车型蓝牙天线性能进行评估和调整蓝牙天线的布局。
这里延展一下BLE的AOA定位技术,他是通过阵列天线来检测设备的具体位置信息,这样对于天线的方向性可以进行一定的规避,定位精度也会更高,但是由于天线阵列需要多个以及配置相应的收发器,还有空间的问题,因此AOA技术在两轮车系统中的应用还尚不成熟。
其次,单纯的解决了蓝牙模组端的一致性问题后,依然无法确保用户测体验的可靠性,因为大家用的手机品牌型号都不一样,这里幸亏苹果的用户占据了一大部分,毕竟机型单一,一致性就会好很多。而对于国内的小米,华为,OPPO等品牌对于蓝牙的设计各不相同,同一品牌的机型又有高中低端,选用的基带芯片和方案也是差异化极大,比如高通和联发科的方案就存在差异,除了硬件差异,软件协议上都存在一些不兼容的问题,因此蓝牙接近解锁在不同的手机上也需要做相应的适配算法才能保障用户侧的体验效果。
三、借鉴毛豆3的解锁,解开苹果系统保活问题
上面我们讲完了在手机的接近解锁应用中需要关注的BLE设备端和手机端的差异化问题,那么在体验端还有一个问题是非常棘手的,那就是要保证用户在使用接近解锁时能够做到不掏出手机,这样的体验需要我们的APP在手机系统中一直处于活动状态,这对于Android系统来说解决的方案会比较多,比如下面:
1. 要求用户允许始终定位
2. 允许手机打开自启动功能
3. 允许后台常驻或者关闭耗电优化功能
4. app启动后台服务,创建常驻的通知
但是苹果系统比较封闭,而且你看苹果那么省电,那么小的电池却能保持那么长的待机时间,也是得益于苹果系统的严格管控。
当时我们一直认为在苹果系统上无法突破这个难题,直到那一年特斯拉的毛豆3发布,居然有手机解锁的功能,恰好公司两个同事第一批就拿到了车,于是我也算是抢先体验了一把电车的接近解锁功能,总体来说苹果的体验要比Android手机的体验好,这引起了我极大的好奇。
一番研究后发现,毛豆3其实配置了5个BLE,分别在四个门柱和后备箱部位。首先5个位置的蓝牙形成一个类似gps的定位系统,大大地提高了定位精度,可以判断手机在车的哪个部位,甚至可以判断手机从哪个部位走来,但是对于人体的遮挡依然存在很大误差,这也是2.4G通信的一个无法绕过的问题。
另外,对于毛豆3是如何解决苹果系统保活问题,我开始还是处于懵逼状态,只能猜测是两家公司合作,特斯拉在苹果系统建立了白名单,这样的操作对于我们一家中国小公司来说可能不太现实,不说别的,一个lighting接口的认证就能拦住一大部分国内的智能硬件公司。
直到有一天我去用分析仪扫描毛豆3的5个蓝牙的广播信息时,才让我发现端倪,原来毛豆3的5个蓝牙的广播是基于ibeacon协议的,并且广播的内容存在差异,于是就顺利的解开了苹果系统拉活应用的问题,这里的要点放在后面的文章中解释如何操作。
四、闪骑侠的另一个解法和弊端
由于我们当时的解决方案还是有一定的技术壁垒的,因此很多厂商并不能一下就抄出来了,过了一段时间,市场上出来一个闪骑侠的解决方案,他利用了BLE应用协议层的HID标准设备,把自己模拟成鼠标键盘一类的系统内置标准设备,这样无论是苹果手机还是Android系统的手机,都会去主动连接这个HID设备,那么蓝牙设备端就会根据被连接的状态来进行锁车和解锁。
这确实是一个很简单的实现解锁的方式,但是缺点也比较明显,就是没有接近的精度可言,有时候离着20米,还没有看见车就解锁了,有时候手机装兜里一转身就锁车了,因为信号被身体遮挡了。
另外一个问题就是无论是Android还是IOS,它们在电量低的时候对于HID设备的主动连接是有不同策略的,这也导致不同的手机有不同的失败情形,同时手机系统厂商也会对多次连接失败进行解绑操作,凡此种种导致了基于HID等上层协议的接近解锁方案也不是能够得到可靠的体验。
五、有没有终极的解决方案
目前来看,由于各个手机厂商不同的蓝牙软硬件设计,规模小的智能硬件公司确实很难做到各个手机品牌型号的兼容,即便是小米生态链的公司也很难兼容小米的众多手机型号,因为即便是小米开发的手机,很大程度上蓝牙协议栈是由高通或者联发科等公司提供的支持。
那么在这个方向上有什么终极方案来解决呢?
这里我提三个可行的尝试方案:
1. 汽车连接联盟(CCC)开发的Carkey协议,这个协议未来方向是基于NFC,蓝牙和UWB进行距离检测和加密通信来提高汽车的安全性和体验。
2. 国内也有些联盟,主要是国内主机厂和手机厂参与的解决方案,但是大家不太抱团,华为爱单干,这里有ICCOA(智慧车联开放联盟标准)发布的数字车钥匙方案。
3. 利用更大型的APP公司解决保活问题来屏蔽不同手机厂商的差异性,比如微信或者支付宝这一类的应用。目前微信上面就有这么一个业务,似乎是想为接近解锁提供一个统一的介入平台,我在磐启微的蓝牙芯片上对接了腾讯连连的接近解锁平台,目前体验起来还不错,同时也在磐启微的蓝牙上面对RSSI的测距方面做了些算法优化,效果如下图,
红色线为平滑后的距离波形,感兴趣的可以进一步沟通(微信:AlwaysDebug)