Walabot Touchpad
Walabot 触摸板 一种低调的解决方案,可以将任何表面变成笔记本电脑的触摸板。想象一下使用书本、桌子或墙壁作为触摸板。结合投影仪技术,您可以在任何表面上复制触摸屏。
该项目旨在通过简单的套接字协议和消费级 3D 成像设备 Walabot 实现此实用程序和易用性。
因为我希望这个解决方案在日常使用中既实用又通用,所以我选择了硬件密集程度最低的设置。为了平衡易于设置和成像精度,我实现了一个基本的配置循环,每次启动 Walabot 时都会运行。
本教程介绍了树莓派的设置过程和主机上的光标控制。
它是如何工作的?
该项目依赖于从 Walabot Creator 传感器读取读数的 Raspberry Pi 3 客户端(感谢 Walabot!),以及一台主机,在本例中是我的笔记本电脑。
一般用户流程如下:
- Raspberry Pi 向 Walabot 发送触发信号
- Walabot 检测目标并定位目标
- Raspberry Pi 检索此数据,确定用户操作,并通过本地 WiFi 连接将其发送到套接字主机
- 主机接收命令并通过PyAutoGUI进行光标控制
演示
在 进展
设置 Pi
首先,我们需要设置 pi 使其可用并安装了所有必要的库。
- 如果您的 Pi 未预装操作系统,您可以按照本教程安装带有 NOOBS 的 Raspbian。 Raspbian 是 Raspberry Pi 的官方操作系统,是迄今为止最受欢迎的操作系统。
- 如果您没有显示器并且想无头访问您的 pi,我建议您设置 VNC 或 SSH 并向 Pi 添加一个关闭按钮。
- 我们不需要 IO,因此您可以不焊接接头针脚。
- 将 SD 卡插入 Pi,并将其连接到显示器和电源。 Pi 应该会启动。
- 连接到互联网,然后打开 Chromium。
- 导航到 Walabot 下载页面
- 下载 Raspberrypi 安装程序并点击保留 确认下载
- 回到桌面,打开终端并输入
sudo apt-get update
cd 下载
sudo dpkg –i walabot_maker_1.0.34_raspberry_arm32.deb
总而言之,命令更新系统的包列表,并安装WalabotSDK
- 经过一些协议提示后,您应该已经安装了 Walabot SDK。然后输入
须藤 apt-get dist-upgrade
须藤重启
这会更新已安装的软件包并重新启动 RPi。
为了提高速度,我建议禁用桌面 GUI,如下所示。
Walabot 接口
现在这就是 Walabot 的用武之地。它是一种 3D 微波成像传感器,可以执行大量任务,包括呼吸感应、穿墙观察和检测多个目标。您可以在他们的 YouTube 频道上查看它们!
对这个项目真正有用的功能是 RF 三维传感,它可以检测目标的 x、y 和 x 坐标。此外,其去除静态信号的动态过滤能力可以与固定反射器的过滤相结合,使您即使穿过其他材料也能准确跟踪目标。
然而,使用如此强大的设备的一个警告是它的高功耗。 Walabot 使用 400-900 mA,这对于树莓的默认 USB 输出来说太高了。这可以通过导航到 /boot/config.txt 并添加以下行来解决:max_usb_current=1。这会将最大电流增加到 1200 mA。
目标检测
确保 Walabot 仅在我希望它是关键时检测到我的手指,否则我的计算机可能会随机移动光标,甚至可能超出范围。在我的项目中,我使用 GetSensorTargets() 函数与 Walabot API 接口并关闭了 MTI(移动目标识别)模式以防止手指信号在更长的时间内被过滤。我将项目中的检测半径 (r) 设置为最大 10 厘米,以将竞技场设置为 Walabot 正上方的区域。这会根据材料的厚度而变化。
我尝试在 x、y 和 z 值中设置竞技场尺寸,但这仅适用于仅在 Walabot 开发人员版上可用的短程配置文件。当我在默认的扫描仪模式下尝试这个时,我的目标检测几乎为零,可能是因为扫描仪模式是径向读取而不是通过笛卡尔坐标读取。因此,我设置了一个标准的扫描仪配置文件,径向设置了舞台,并将径向尺寸转换为笛卡尔坐标。
目标对象有x、y、z和振幅参数,其中我只使用了x和y值。由于 y 轴沿着 Walabot 的长度,当 Walabot 像触摸板一样水平放置时,我将其转换为屏幕上的 x 轴。当我将坐标与竞技场边界进行比较时,我可以找到目标与竞技场的相对位置,并将其转换为主机屏幕上光标的相对位置。
但是,由于我的 arena 是基于 r、theta 和 phi 值初始化的,因此我必须通过测量 x 和 y 坐标的最低和最高值来手动找到可用的 arena 边界。然后我在设置时自动执行此操作,以便程序可以在用户沿 x 轴和 y 轴滑动手指时找到边界。尽管有极坐标转换为笛卡尔坐标的公式,但设置的边界与实际可测量区域不同,因为它无法考虑另一个表面对注册区域的干扰。
为了确定用户是要移动光标,右键单击还是左键单击,我利用了 Walabot 的多目标检测功能。移动是 1 个接触点,右键单击是 2 个接触点,左键单击是 3 个。看起来很可靠,是时候测试一下了。
啊!结果证明,设置起来要困难得多。我最初计划让代码在 Walabot 检测到两个或更多目标时单击鼠标上的相应按钮,但是在手指进入视野的那一刻,Walabot 检测到一个目标,因此在单击之前移动鼠标.
在不增加中心的 z 范围的情况下最大化竞技场面积的困难平衡显而易见的解决方案是减小竞技场范围本身,这自然会减小 z 范围。这会产生一个副作用,即生产的触摸板太小而无法使用。我采取的另一条路线是手动过滤掉 z 属性太高的目标,但这不起作用,因为沿 z 轴的目标在边缘仍然比沿中心登记得更高。 Amplitude 效果不佳,因为它以模块最敏感的部分为中心。我考虑通过添加 abs(phi angle – 90 degree) * multiplier 手动更改所有目标的 z 参数值 对所有目标,但不幸的是 phi 角度参数不是可访问的传感器目标参数。最后,我只能通过使用弯曲的触摸板来匹配检测范围的曲率,或者获得 Walabot Developer 版本来解决这个问题。
阅读更多细节:Walabot 触控板
制造工艺