最近要在项目中用到 Leap Motion,无意中发现了一个 Go 语言的 Leap Motion 库:
- https://gobot.io/documentation/platforms/leapmotion/
示例代码看起来很简单,但是要实际运行起来还需要一些条件。
在示例代码中,我们看到它连接的是 6437
端口,这其实是一种比较老的 Leap Motion 使用方式了, 6437
实际上是一个 websocket 端口,Leap Motion 驱动会通过这个端口将数据帧发送给连接的客户端,这一功能是给 LeapJs
库使用的,让网页端也能使用 Leap Motion,但是自从 5.0
版本以后,这一功能就从 Leap Motion SDK 中删除了。
如果要继续使用这个功能,有两个选择:
- 一是降 Leap Motion SDK 版本,但是要找到旧版本的下载地址可能要花一些功夫;
- 二是使用 UltraleapTrackingWebSocket ,他是官方专为新版本 Leap Motion 能继续使
LeapJs
库用而提供的方案。
UltraleapTrackingWebSocket 并未提供预编译版本,需要我们自己编译,Github 地址如下:
- https://github.com/ultraleap/UltraleapTrackingWebSocket
按照 ReadMe 去编译的话,大概率是编不出来的,缺一些步骤,所以这里记录一下 Windows 上的编译过程。
UltraleapTrackingWebSocket 需要依赖 libwebsockets
和 LeapSDK
,官方建议我们使用 vcpkg 管理依赖,会简单很多,那咱也是主打一个听劝。
安装 vcpkg
vcpkg 是 C++ 的包管理器,C++ 终于有包管理器了,然而我早就不做 C++ 开发了。。。安装过程比较简单,按照官网指示一步一步操作即可。
首先下载 vcpkg 源码:
> git clone https://github.com/microsoft/vcpkg.git
然后进入源码目录,执行一个脚本:
> cd vcpkg
> bootstrap-vcpkg.bat
这个脚本最终会去下面的地址下载 vcpkg.exe
放到源码目录下。
- https://github.com/microsoft/vcpkg-tool/releases/download/2025-04-16/vcpkg.exe
这种操作属实是头一回见,放一起发布不好吗?如果你在执行脚本的时候遇到网络问题,可以直接点击链接下载,然后放到源码目录下。注意不要点我这里的链接,当你执行脚本的时候,第一行日志就会打印出下载地址,用那里的地址。
> bootstrap-vcpkg.bat
Downloading https://github.com/microsoft/vcpkg-tool/releases/download/2025-04-16/vcpkg.exe -> E:\project\c\vcpkg\vcpkg.exe...
虽然我们可以自行下载 vcpkg.exe
放到 vcpkg
目录下,但是脚本并不会检测文件是否存在,这样是为了保证版本兼容。我们可以看一下 vcpkg.exe
的下载地址,与版本有关的是一个日期,这个日期在 vcpkg/scripts
目录下的 vcpkg-tool-metadata.txt
文件的第一行。
VCPKG_TOOL_RELEASE_TAG=2025-04-16
其实我们完全可以拿这个日期拼装出正确的地址自行下载。接下来我们稍微修改一下 vcpkg/scripts
目录下的 bootstrap.ps1
文件,他才是真正下载 vcpkg.exe
的脚本。我们将第52行至64行的代码包裹到一个 if
判断中,如果 vcpkg.exe
存在就不去下载了。
if (!(Test-Path "$vcpkgRootDir\vcpkg.exe")) # 新增
{ # 新增
if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64' -or $env:PROCESSOR_IDENTIFIER -match "ARMv[8,9] \(64-bit\)") {
& "$scriptsDir/tls12-download-arm64.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg-arm64.exe" "$vcpkgRootDir\vcpkg.exe"
} else {
& "$scriptsDir/tls12-download.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg.exe" "$vcpkgRootDir\vcpkg.exe"
}
Write-Host ""
if ($LASTEXITCODE -ne 0)
{
Write-Error "Downloading vcpkg.exe failed. Please check your internet connection, or consider downloading a recent vcpkg.exe from https://github.com/microsoft/vcpkg-tool with a browser."
throw
}
} # 新增
其实 bootstrap-vcpkg.bat
的全部功能就是调用 bootstrap.ps1
,之所以不直接调用是因为 Windows 默认的脚本执行策略是”严格”,会阻止脚本执行,大家可以参考微软官网。
如果我们自行下载 vcpkg.exe
的话,其实这个脚本已经没有执行的必要了。但是如果我们依然执行的话,会看到一段输出:
vcpkg package management program version 2025-04-16-f9b6c6917b23c1ccf16c1a9f015ebabf8f615045
See LICENSE.txt for license information.
Telemetry
---------
vcpkg collects usage data in order to help us improve your experience.
The data collected by Microsoft is anonymous.
You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics,
passing --disable-metrics to vcpkg on the command line,
or by setting the VCPKG_DISABLE_METRICS environment variable.
Read more about vcpkg telemetry at docs/about/privacy.md
意思很明显,vcpkg 会搜集用户使用数据,但是可以禁用。
第一种方式是调用 vcpkg.exe
时加上一个 --disable-metrics
参数,但是每次都要加肯定不是我们想要的。
第二种方式是调用安装脚本 bootstrap-vcpkg.bat
时,加上 -disableMetrics
参数。它的本质是在 vcpkg
目录下创建一个名为 vcpkg.disable-metrics
的空文件,所以,如果你安装时没有传这个参数,可以自行创建这个文件。
第三种方式是设置 VCPKG_DISABLE_METRICS
环境变量。第三和第二种方式都是永久性的,所以选哪种都可以。
最后将源码目录添加到环境变量,这样 vcpkg 就安装好了。
编译UltraleapTrackingWebSocket
基本上还是按照官方步骤来,编译之前先下载依赖:
> vcpkg install libwebsockets --triplet x64-windows
这一步可能会遇到网络问题,重试几次就好了。然后下载 UltraleapTrackingWebSocket 源码,进入源码目录创建 build
文件夹:
> git clone https://github.com/ultraleap/UltraleapTrackingWebSocket.git
> cd ultraleap-tracking-websocket
> mkdir build
> cd build
下一步是 make 我们的工程,这里有两个要注意的地方:
一是将 -DCMAKE_TOOLCHAIN_FILE
后面的路径换成我们自己的 vcpkg 安装目录。二是需要设置下 LeapSDK
的目录,如果已经安装过 Leap Motion SDK,在安装目录下能找到,如果没有安装,可以直接从👉这里👈下载,然后找个地方解压,设置下 LeapSDK_DIR
环境变量指向解压的目录即可,这里设置临时环境变量就行了。
> set LeapSDK_DIR=E:\project\c\UltraleapTrackingWebSocket\LeapSDK
> cmake -DCMAKE_TOOLCHAIN_FILE=E:/project/c/vcpkg/scripts/buildsystems/vcpkg.cmake ..
make 成功以后我们就可以我们就可以编译了。
cmake --build .
可以用 cmake
编译,也可以双击 build
目录下的 LeapWS.sln
在 visual studio 中打开编译。
运行
在命令行运行编译出来的 Ultraleap-Tracking-WS.exe
,然后再运行 Go 的 Leap Motion 示例,就能看到手势数据了。