JSON C++/Python SDK_四元数使用手册

1. 概述

1.1. 功能

本SDK基于JSON传输格式获取手部各关节四元数,支持Windows和Linux两种环境。

1.2. 文件下载

(目录中的Quater文件,已开源)

  • Windows版(提取码: 3c5z

  • Linux版(提取码: gna4

1.3. HandDriver端设置

  • 勾选“数据发送”,即打开数据发送开关。

  • 如需传输IMU数据(仅支持带IMU的手套),点选IMU选项,否则不传输IMU数据。

  • 选择发送帧率,支持120Hz、90Hz、60Hz三种帧率,发送帧率默认为120Hz。

  • 点击目标地址中的“+”图标,填入接收端的IP地址和端口号,方可进行数据发送(本地发送填写127.0.0.1)。

  • 端口号默认为5555,如有修改,请保持与SDK端一致。

  • 设置完成后,点击“应用”按钮进行保存。

1.3.1. HandDriver2.2.2之后

传输格式请选择JSON,使用本SDK时数据内容请选择“四元数”,请勿勾选旧插件

1.3.2. HandDriver2.2.1之前

  • 数据格式欧拉角、四元数、VMC为三选一,三者为互斥选项。使用本SDK时请选择“四元数”(老版本HD中选择“SDK”)。

  • 勾选“旧插件”时,按照HandDriver2.1.1之前版本传输角度值,详见这里

2. 坐标系及数据定义

2.1. 坐标系

HandDriver发送的数据是按照右手坐标系标准,如下图所示,蓝色 Z 轴朝上。

2.2. 数据格式

发送的数据格式如下图所示,包括:设备ID、帧数、设备名称、连接状态、电量、IMU数据、骨骼旋转四元数以及控制器数据。

注:手指的四元数顺序是XYZWIMU的四元数顺序是WXYZ

Proximal
Intermediate
Distal

Index, Middle, Ring, Little Finger

MP

PIP

DIP

Thumb

CM

MP

IP

3. C++ SDK Windows版

本DLL中编写了一个 GloveSDK 类,用于创建单独的接收线程,接受和解析HandDriver发送的关节四元数数据(不含控制器数据)。

3.1. 数据结构定义

3.2. 数据调用

3.2.1. 获取手套的数据

  1. 获取手套设备信息

获取设备信息示例(如图),获取设备其他信息以此类推:

  1. 获取手套手指节数据

GloveSDK 类中有一个长度为 8 ,数据格式为 PairGloveData 的数组 GloveData ,代表可以存放 8 双手套,访问时用下标,例如:GloveData[0].HandData_L.JointDatas[6] (访问了0号设备左手数组里的第六个指节数据,其中JointDatas[6]对应的数据如图所示)。

3.2.2. 四元数转欧拉角

通过glove_sdk调用四元数转欧拉角的转换方法 glovePtr->toEulerAngle() ,此处需要注意四元数的顺序。

3.2.3. 欧拉角转旋转角

调用转换方法RadToAngle()获得旋转的角度

3.3. 接口函数定义

3.3.1. 初始化

函数说明:根据参数创建一个Socket,若成功则开启一个线程接收数据。

参数说明:udp_ip 为接受数据的IP地址, udp_port为端口号,与发送端HandDriver一样即可。

返回值说明:若成功则返回true,失败返回false。

3.3.2. 关闭线程

函数说明:用于关闭接收线程,清理Socket。

参数说明:

返回值说明:

3.3.3. 注册回调函数

函数说明:用于注册回调函数,在程序解析完json数据后调用。

参数说明:callback 一个类型为GloveCallBack的函数,函数的参数类型可在.h中修改。

返回值说明:无。

3.3.4. 打印线程入口

函数说明:用于打印数据到控制台。

参数说明:GloveSDK的对象指针,打印线程将打印其数据。

返回值说明:无。

3.3.5. 限制打印内容

函数说明:调用后打印参数将只打印帧数用于Debug。

参数说明:无。

返回值说明:无。

3.4. 示例Demo及说明

3.4.1. Demo工程说明

HandDriver_x64_Cpp_Quater工程包含HandDriver_x64_Cpp_Quater文件夹和HandDriver_x64_Cpp_Quater.sln文件,其中HandDriver_x64_Cpp_Quater文件夹里包含有库文件,如需单独使用可以在此处复制。Visual Studio 的版本为 vs2019(使用高版本时按照日志修改即可),c++14。运行 HandDriver_x64_Cpp_Quater.sln,选择 x64 平台,即可运行示例程序。

3.4.2. 代码流程简介

  1. 声明一个函数用于注册回调。

  1. 创建一个 GloveSDK 的实例。

  1. 注册回调函数。

  1. 创建Socket并检测是否成功,成功则开始接收数据并解析。

  1. 开启打印线程,打印glove_sdk的数据

  1. 调用只打印帧数函数

  1. 等待输入 保存程序

  1. 结束,关闭清理socket

4. C++ SDK Linux版

4.1. 数据结构定义

4.2. 数据调用

4.2.1. 获取手套的数据

  1. 获取手套设备信息

获取设备信息示例(如图),获取设备其他信息以此类推:

  1. 获取手套手指节数据

GloveSDK 类中有一个长度为 8 ,数据格式为 PairGloveData 的数组 GloveData ,代表可以存放 8 双手套,访问时用下标,例如:GloveData[0].HandData_L.JointDatas[6] (访问了0号设备左手数组里的第六个指节数据,其中JointDatas[6]对应的数据如图所示)。

4.2.2. 四元数转欧拉角

通过glove_sdk调用四元数转欧拉角的转换方法 glove_sdk.to_euler_angle() ,此处需要注意四元数的顺序。

4.2.3. 欧拉角转旋转角

调用转换方法rad_to_angle()获得旋转的角度

4.3. 接口函数定义

4.3.1. 初始化

函数说明:根据参数创建一个Socket,若成功则开启一个线程接收数据。

参数说明:udp_ip 为接受数据的IP地址, udp_port为端口号,与发送端HandDriver一样即可。

返回值说明:若成功则返回true,失败返回false。

4.3.2. 注册回调函数

函数说明:用于注册回调函数,在程序解析完json数据后调用。

参数说明:callback 一个类型为GloveCallBack的函数,函数的参数类型可在.h中修改。

返回值说明:无。

4.3.3. 打印线程入口

函数说明:用于打印数据到控制台。

参数说明:GloveSDK的对象指针,打印线程将打印其数据。

返回值说明:无。

4.4. 代码流程简介

  1. 获取手套数据并计算欧拉角

  1. 创建Socket并检测是否成功,成功则开始接收数据并解析

  1. 开启打印线程,打印glove_sdk的数据

4.5. 范例

  1. 启动终端,进入SDK文件夹根目录,运行如下build命令:

若在执行上述命令出现报错为g++编译器版本问题时,运行如下命令:

  1. 由此能生成可执行范例GloveSDK,在同一目录下,用如下命令运行服务器范例:

5. Python SDK Linux版

5.1. 数据结构定义

5.2. 数据调用

5.2.1. 获取手套的数据

  1. 获取手套设备信息

获取设备信息示例(如图),获取设备其他信息以此类推:

  1. 获取手套手指节数据

GloveSDK 类中有一个长度为 8 ,数据格式为 PairGloveData 的数组 GloveData ,代表可以存放 8 双手套,访问时用下标,例如:GloveData[0].HandData_L.JointDatas[6] (访问了0号设备左手数组里的第六个指节数据,其中JointDatas[6]对应的数据如图所示)。

5.2.2. 四元数转欧拉角

通过glove_sdk调用四元数转欧拉角的转换方法 glove_sdk.to_euler_angle() ,此处需要注意四元数的顺序。

5.2.3. 欧拉角转旋转角

调用转换方法rad_to_angle()获得旋转的角度

5.3. 接口函数定义

5.3.1. 初始化

函数说明:根据参数创建一个Socket,若成功则开启一个线程接收数据。

参数说明:udp_ip 为接受数据的IP地址, udp_port为端口号,与发送端HandDriver一样即可。

返回值说明:若成功则返回true,失败返回false。

5.3.2. 注册回调函数

函数说明:用于注册回调函数,在程序解析完json数据后调用。

参数说明:callback 一个类型为GloveCallBack的函数,函数的参数类型可在.h中修改。

返回值说明:无。

5.3.3. 打印线程入口

函数说明:用于打印数据到控制台。

参数说明:GloveSDK的对象指针,打印线程将打印其数据。

返回值说明:无。

5.4. 代码流程简介

  1. 获取手套数据并计算欧拉角

  1. 创建Socket并检测是否成功,成功则开始接收数据并解析

  1. 开启打印线程,打印glove_sdk的数据

5.5. 范例

启动终端,进入SDK文件夹根目录,运行如下build命令:

Last updated