本SDK基于Protobuf传输格式获取手部各关节角度或四元数数据,支持Windows和Linux两种环境。
HandDriver_Win_x64_Cpp_Protobuf_src_yyyymmddmmss
HandDriver_Linux_Cpp_Protobuf_src_yyyymmddmmss
HandDriver_Py_Protobuf_src_yyyymmddmmss
1.3. HandDriver端设置
打开设置面板,勾选“数据发送”,即打开数据发送开关。
选择数据内容,欧拉角或四元数。通常机器人领域选择欧拉角。
附加选项:如需传输IMU数据(仅支持带IMU的手套),点选IMU选项,否则不传输IMU数据。
选择发送帧率,支持120Hz、90Hz、60Hz三种帧率,发送帧率默认为120Hz。
点击目标地址中的“+”图标,填入接收端的IP地址和端口号,方可进行数据发送(本地发送填写127.0.0.1)。
HandDriver手部模型关节和数据说明2.2. Protocol Buffer 定义文件
Protocol Buffer定义文件(Protocol Buffer Definition File)如下:
handdriver_teleop.proto
handdriver_teleop.proto
关于接收的角度值,可参考HandDriver端数据页,此页数据与SDK接收数据一致:
HandDriver手部模型关节和数据说明3. C++ SDK - Windows版
本项目是一个C++ 应用程序,专为实时接收和解析手部数据。它利用 Windows Socket (Winsock2) 进行 UDP 通信,并集成 Google Protocol Buffers (Protobuf) 进行序列化数据解析。
本程序作为一个 UDP 服务器运行,监听特定端口的广播或单播数据包。
核心功能:
UDP 通信:基于 UDP 协议,确保低延迟数据传输。
Protobuf 解析:支持解析两种核心数据包:
TeleopDataAngle:基于关节角度的数据(适用于机械手控制)。
TeleopDataQuat:基于四元数的数据(适用于 3D 渲染/Unity/UE)。
跨平台设计:核心逻辑兼容 Linux,网络层针对 Windows 进行了 Winsock2 适配。
本项目依赖 CMake 进行构建管理,依赖 vcpkg 进行第三方库(Protobuf)管理。
安装 Visual Studio: 需包含 "使用 C++ 的桌面开发" 工作负载。
安装 vcpkg:
下载 vcpkg 并运行 bootstrap-vcpkg.bat。
安装 Protobuf 库: powershell vcpkg install protobuf:x64-windows
我们提供了两种编译模式:Release (推荐,性能更优) 和 Debug (用于调试)。
第一步:生成工程文件
在项目根目录下,使用 CMake 配置项目。请确保将路径替换为您本地的 vcpkg 路径。
第二步:执行编译
编译产物:
编译成功后,可执行文件 udp_receiver.exe 及其所需的 DLL (libprotobuf.dll, abseil_dll.dll) 会自动生成在 build/Release 目录下。
程序是一个命令行工具,支持通过参数灵活配置。
程序监听的本地 UDP 端口。需确保该端口未被防火墙拦截。
这里指定解析协议:angle: 解析关节角度数据quat: 解析关节四元数数据
* 场景 1:默认运行
监听 5555 端口,解析角度数据。
powershell build\Release\udp_receiver.exe
* 场景 2:接收 Unity 客户端数据
假设 Unity 发送的是四元数数据到 6666 端口。
powershell build\Release\udp_receiver.exe -p 6666 -t quat
main.cpp 的核心流程如下:
初始化 Winsock: 调用 `WSAStartup` 初始化 Windows 网络库。
创建 Socket: 建立一个 UDP 套接字 (`SOCK_DGRAM`)。
绑定端口 (Bind): 将 Socket 绑定到 `INADDR_ANY` 和指定端口,允许接收所有网卡的流量。
接收循环 (While Loop):
反序列化: 根据 `--type` 选择 `TeleopDataAngle` 或 `TeleopDataQuat` 对象,调用 `ParseFromString()` 解析二进制数据。
数据处理: 若解析成功,调用 `print_*_data` 函数打印数据内容的字符串表示 (`DebugString()`)。
资源释放: 关闭 Socket 并清理 Winsock。
如果您需要自己编写代码来读取数据,请参考以下 C++ 示例:
4. C++ SDK - Linux版
本项目是一个基于 C++ 的 UDP 网络接收程序,专门设计用于接收和解析通过 Google Protocol Buffers (Protobuf) 序列化的手套数据。程序支持两种主要的数据传输模式:角度模式 (Angle) 和 四元数模式 (Quat)。
本项目使用 CMake 进行构建管理。
本项目在 Linux (Ubuntu/Debian) 环境下运行。请按照以下步骤安装所需依赖:
安装基础编译工具
安装 C++ 编译器 (g++) 和 CMake 构建工具:
安装 Protocol Buffers
本项目依赖 Google Protocol Buffers 进行数据序列化。需要安装编译器 (protoc) 和 C++ 开发库 (libprotobuf-dev):
请在项目根目录下执行以下命令:
编译成功后,将在当前目录下生成可执行文件 udp_receiver。
程序通过命令行参数进行配置,支持自定义监听端口和数据类型。
设置数据解析类型,可选值: angle, quat
默认运行 (监听端口 5555,解析 Angle 类型数据):
指定端口和类型 (监听端口 6000,解析 Quat 类型数据):
4.4.1. 主程序流程 (`main.cpp`)
参数解析: 使用 `getopt_long` 解析命令行参数 port 和 type。
Socket 初始化: 创建 UDP socket 并绑定到指定端口 (INADDR_ANY)。
根据 type 选择对应的 Protobuf 消息类型 (TeleopDataAngle 或 TeleopDataQuat) 进行反序列化 (ParseFromString)。
- **`void print_angle_data(const HandDriver::TeleopDataAngle& data)`**
实现:调用 Protobuf 自动生成的 DebugString() 方法输出格式化文本。
- **`void print_quat_data(const HandDriver::TeleopDataQuat& data)`**
功能:打印 Quaternion 类型的遥测数据详情。
5. Python SDK - Linux/Win版
该SDK同时支持windows和Linux。该工具通过 UDP 协议监听指定端口,接收二进制数据包,并根据指定的数据类型(angle 或 quat)使用 Google Protocol Buffers (Protobuf) 进行反序列化,最终将解析后的数据打印到控制台。
安装依赖:
* 协议: UDP* 默认端口: 5555* 数据格式: Protobuf 序列化二进制流
5.2.2. 接收流程 (Python)
创建 Socket: 建立 UDP socket。
绑定端口: 绑定到指定 IP (`0.0.0.0`) 和端口。
循环接收: 使用 `recvfrom` 接收数据包。
反序列化:
如果数据类型为 angle,使用 TeleopDataAngle.ParseFromString(data)。
如果数据类型为 quat,使用 TeleopDataQuat.ParseFromString(data)。
数据使用: 访问解析后的对象字段(如 `msg.LeftHand.joints[0]`)。
脚本 udp_receiver.py 提供了简单的命令行接口。
--port: 指定监听端口 (默认: 5555)
--type: 指定预期的数据类型 (angle 或 quat,默认: angle)
5.3.2. 示例 1: 接收角度数据 (默认)
或显式指定:
5.3.3. 示例 2: 接收四元数数据
如果发送端发送的是四元数格式的数据:
5.3.4. 示例 3: 更改监听端口
监听 6000 端口: