
在CLK.blog上制作3D激光扫描仪的过程中,我偶然发现互联网上有人在卖激光组件,这些组件可以低价投射键盘图像. 经过仔细考虑后,激光投影键盘的原理与3D扫描仪的原理相同,因此诞生了DIY低成本激光键盘的想法. 最后,这项工作是在我完成3D扫描仪后的3天内完成的. 可以看出,硬件部分的生产并不复杂. 尽管完成时间很短,但它也涉及许多设计细节,需要加以考虑,因此我写这篇文章与您分享我的生产过程.

简介
我相信您以前听说过激光投影键盘. 他使用光学手段通过激光将计算机键盘的屏幕投射到任何平面(例如桌面)上,并允许操作员执行像真实键盘一样的输入操作.

图片: Celluon公司生产的Magic Cube激光投影键盘
当前在市场上可用的激光键盘产品由韩国Celluon公司生产和销售. 这种类型的产品也可以在中国购买,但是由于价格高昂,它的价格仍然在1000元左右. 我以前没有购买过,具体效果尚不清楚. 有人评论说,由于缺乏物理反馈,这种键盘可能感觉不好用.
但是无论如何,激光虚拟键盘仍然非常抢眼. 投影的键盘图像上的输入非常技术和科幻. 如果您能以较低的成本自己动手做一个会更好吗?
本文提出的DIY激光投影键盘解决方案可以保证低成本(大约一百元)并提供强大的性能: 30hz输入频率,支持多键输入以及其他功能: 多点输入设备,例如,它可以用作绘图板,并且可以感应手指的压力.
完成此制作后,我拍摄了一个演示视频以演示其性能,您可以访问以下地址进行观看:
原理分析
在详细介绍实现过程之前,我们首先需要分析这种激光投影键盘的工作原理,并给出解决问题的思路,以便大家相互学习. 首先需要解决两个核心问题:
生成键盘屏幕
对于键盘屏幕,许可能认为此屏幕是通过激光+高速光学振镜获得的. 尽管此方法在技术上完全可行,但由于需要使用复杂的机械组件,因此成本很高,而且很难制造轻巧的产品.

图片: 通过光学振镜扫描产生的激光投影屏. 图片来自[1]

但是,这种全息投影方法对于DIY仍然不现实. 幸运的是,由于当前通过网上购物的便利,您可以直接购买用于生成激光键盘图像的全息投影设备,价格为50元. 内.

图片: 投影键盘屏幕可用的激光模块
识别键盘输入事件
在解决了键盘屏幕问题之后,这是另一个看似简单的问题: 如何判断键盘输入事件?
由于键盘屏幕可以投影在任何表面上,因此自然不可能依靠传统的依靠物理按钮的方式(否则就不能称为虚拟键盘). 需要非接触方式进行检测. 这里有几种方法,它们在技术上都是可行的:
1)通过计算机视觉,通过图像进行识别
使用相机捕获键盘区域的屏幕并对其进行分析以确定键盘输入事件.
2)通过检测按钮的声音进行判断.
这里,假定用户在按下键时会触摸桌面,并且会产生一定的敲门声. 通过检测声音的传播时间,可以进行定位. 该计划已在国外一些研究机构中实施.
3)通过超声波雷达进行判断
通过发射超声波并检测反射波的传播时间来检测目标物体(手指)的位置.
有文件显示这三种方案可以在实现. 但是,计算机视觉的硬件相对简单,只需要一个,因此这里采用这种方法.
下图显示了此制作初期使用的相机图像. 基于这些图像的计算机视觉计算可以获取我们需要的键盘事件:

图: 通过计算机视觉识别和判断键盘输入事件

实际上,这里涉及2个子问题:
由于我们人类是通过视觉理解外部世界的,因此可以直观地想到,只要我们能够识别并定位手指在图片中的位置,就可以解决第一个问题. 我不会讨论如何实现定位本身. 假设我们的算法可以像人脑一样容易地找到图片中手指的位置,并使用相对于图片的坐标来表示(x,y).
接下来,我们必须考虑第二个问题,如何判断手指是否“按下了按钮”?一种方法是捕获声音: 如上所述,通过捕获手指触摸桌面所产生的敲击声音来判断声音. 但这会带来其他问题:
所以在这里,我们仍然依靠视觉手段做出判断. 在分析可行的解决方案之前,有必要弄清楚“按下按钮”的具体指示. 我们可以定义手指何时触摸桌面,或者何时将其离桌面足够近来进行“按压”. 因此,问题的实质在于我们需要检测手指与桌面之间的距离z. 计算完该值之后,我们只需要简单地判断它小于某个特定值,就认为手指已经“按下了按钮”.
我们总共需要设计一种视觉处理算法: 它可以找到图片中每个手指相对于屏幕的位置(x,y),以及从桌面到手指的高度z. 实际上,我们正在检测手指的三维坐标(x,y,z).

图: 需要设计的视觉检查算法和预期的检查结果
如果您以前看过我的3D激光扫描仪产品,相信您可以猜出具体的实现方法. 实际上,算法本身就是做三维激光测距. 但是在这里我们将根据以上思路继续进行分析:
有许多方法可以进行3D测量. 例如,您可以购买Microsoft的Kinect深度传感器. 如果不考虑成本,这确实是一种非常有效的方法,可以很好地解决本文中提出的问题. 另一种类似的方法是使用双相机进行双目视觉处理,以提取目标图像对象的深度信息. 但是,这种类型的处理当前会消耗处理资源,并且校正过程更加复杂,因此不适合此处的应用.

图片: RoboPeak团队进行的双目视觉深层提取实验
这里,我们根据三角测量原理,使用相同的激光测距仪[2]方法,通过主动投射激光来进行目标物体的三维坐标检测. 在[2]中,我用线激光束照亮了目标物体,目标物体的反射光被照相机捕获. 利用三角测距原理,可以得到线激光照射的目标物体部分的坐标信息.

[2]中提到的使用线激光和单摄像机的3D测距原理
在这里,我们将由线激光产生的光平面设置为平行于桌面并靠近桌面,将相机放置在激光发射器上方并向下看桌面,如下图所示:


图片: 利用激光三角测量距离的原理进行手指空间坐标检测
这时,如果手指靠近桌面,它将阻挡激光的路径,引起反射,并且反射的光斑将被相机捕获在图片中. 这是标准的三角测量范围结构设置. 细心的读者可能已经在上面给出的生产型相机拍摄的照片中发现了指尖上的白光点,这是在安装线激光后手指咬合所引起的反射效果.

图片: 该产品中使用的线激光测距方案
对于这种基于线激光器的距离测量方法[2],我们可以获得坐标P(x,y). 并且由于线激光形成的平面与桌面平行,并且两个平面在设计上紧密相连,因此可以近似地将坐标点P(x,y)定位在桌面上.
此设置有几个优点:
方便检测指尖
当手指阻挡激光平面时,会发生反射,因此相机屏幕上会出现一个较亮的点. 指尖部分可以通过简单的视觉算法提取
方便检测关键事件
仅当手指接近或触摸桌面时,它才会阻挡激光并产生反射,并且检测算法不会在离桌面更高的位置检测到它. 因此,此处可以简化按键事件的检测,并且不需要确定手指从桌面的高度. 只要检测算法检测到手指的反射,就可以认为发生了按键事件,并且当前检测到的坐标可以直接用于后续处理.
值得一提的是,实际上,这种方法对于多点触控领域的朋友来说应该并不陌生. 有一种称为LLP(激光光平面)的技术[4]与我们的技术非常相似.

图片: LLP模式下的多点触摸技术,图片来源为[5]
如上图所示,LLP技术还通过发射线性激光束来构造光平面,并捕获手指的反射以进行多点触摸定位. 摄像机的安装位置不一定在上面的底部,也可以安装在与本产品相同的位置. 实际上,此处采用的激光测距方案的预处理与LLP一致: 提取指尖的兴趣点并将其转换为相对于相机屏幕的坐标. 但是,对于多点触摸,无需获得桌面上手指的精确距离,就像我们使用的鼠标一样,只需要知道相对位移的程度即可,而无需知道鼠标有多少毫米动作. 但是,由于我们需要将手指的坐标转换为特定按钮的信息,因此需要进一步处理.
确定并生成相应的键事件
以前,我们已经解决了当手指触摸桌面时如何检测指尖在桌面平面上的坐标P(x,y). 但这与我们最终会生成的相应关键事件之间还有一定距离. 我们需要建立一种映射机制,通过桌面坐标P(x,y)查找对应的键值,最后通知操作系统触发与该键值对应的按键事件.

此处的方法类似于用于UI元素冲突判断的GUI系统的过程. 在图形系统中,所有UI元素都具有相对于屏幕的坐标. GUI系统会不断判断当前鼠标指针的位置是否在某个按钮或选择框的坐标范围内.

图片: GUI系统通过将鼠标的坐标与按钮UI元素的坐标进行比较来判断鼠标是否在按钮元素上方
类似于GUI系统,我们首先需要在投影的键盘模式中建立每个键的坐标信息. 然后,将指尖相对于桌面的坐标P(x,y)映射到键盘图案的坐标系以判断键.

图片: 以激光为原点,将基于桌面的指尖坐标P(x,y)映射到键盘坐标平面,并执行按键判断
以上过程涉及两个步骤:
1)将以激光发射器为原点的指尖坐标P(x,y)映射到以键盘图案的左上角为原点坐标的平面以获得映射点P'(x,y)
该过程被写为数学表达式:
P'(x,y)= f投影(P(x,y))
2)将映射点P'(x,y)与预先记录的每个按钮的坐标值进行比较,以找到当前按下的按钮的值.
此过程表示为:
键[n] =映射(P'(x,y))
有些人可能会问为什么不直接根据激光发射器的原点坐标来表示每个按钮的坐标?因此,可以省略映射f_projection的第一步. 确实可以达到相同的效果. 但是,由于组装错误,不能保证每次完成的激光发射器和键盘图案的投影位置都将完全相同,并且由于使用过程中的热膨胀和收缩,单个最终产品会膨胀和收缩. ,并且键盘图案将发生偏移. 键盘样式移动后,以前以这种方式记录的所有键坐标都需要重新测量. 但是,如果在开始时以键盘的左上角为原点来记录坐标,则每次组装成品或移动花样时,只需进行简单的校正即可获得新的f_projection函数.
系统框图
以前,我们解决了制造激光投影键盘的两个关键问题. 这是我们最终通过的供大家理解的计划一般原则的摘要. 在实施过程部分,将介绍实施细节.

该框图还包括此产品的另一个功能: 多点触控绘图板.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-301861-1.html
中国应该直接将闯入领海的美国军舰扣压
期待
它也无法预料中国是否会和当初的苏联一样---我舰奉命撞击你舰