1.一种基于LeapMotion体感控制器的协同手势控制采煤仿真控制方法,其特征在于:采用Hands.Count、FingerType、FingerCount函数完成手势识别,采用InitializeServer、TextField函数创建服务器端Server、客户端Client并实现互连,采用Instantiate、Spawn函数实现虚拟场景的网络化同步,采用SpawnWithClientAuthority、OnStartAuthority、CmdMoveShearer函数实现协同手势控制采煤设备,采用Serialize、Deserialize、isWriting函数实现序列化反序列化,采用SceneSyn函数实现同步变量的最新数据自动同步到各客户端,包括以下步骤:步骤1:基于LeapMotion,设计采煤设备的控制手势并进行识别;
分析各采煤设备功能,设计各自对应的控制手势;分析各手势特征,获取手掌运动追踪数据,通过实时获取手上各点三维坐标数据,完成手势识别;
完成手势识别的具体步骤如下:
步骤1.1:通过Hands.Count函数获得当前视野中手的个数,判断当前手的个数为一只还是两只;
若:判断结果是当前手的个数为一只,则执行步骤1.2;
或判断结果是当前手的个数为两只,则执行步骤1.3;
步骤1.2:单手手势识别;
获取手掌在x、y、z方向上的速度PalmVelocity.x、PalmVelocity.y、PalmVelocity.z,根据公式(1)求出手掌掌心速度PalmVelocity:通过比较当前帧中手掌掌心速度PalmVelocity和设置的最小移动速度
smallestVelocity,判断手势状态;
若:判断结果是掌心速度小于最小移动速度,则手势为静态,执行步骤1.2.1;
或判断结果是掌心速度大于或者等于最小移动速度,则手势为动态,执行步骤1.2.2;
步骤1.2.1:判断当前是否有手指伸出,通过判断出哪几根手指伸出,实现包括单手静态手势张开、数字手势和握拳在内的单手静态手势的识别;
具体为:获取指尖坐标TipPosition(x1,y1,z1)、掌心坐标PalmPosition(x2,y2,z2),根据公式(2)求出指尖与掌心的距离distance:获取手指向量 手掌法向量 根据公式(3)求出手指与手掌法向量角度θ:
当指尖与掌心距离distance大于最大距离MaxDistance并且手指与手掌法向量角度θ为90°时,则判定该手指伸出,然后通过FingerType函数获取伸出手指的名称,通过FingerCount函数确定伸出手指的个数,通过添加手势识别判断条件,识别出张开、数字手势;否则判定当前无手指伸出,则识别出握拳手势;
步骤1.2.2:通过判断手掌或手指运动情况,实现包括单手动态手势前后左右挥动、单指画圈在内的单手动态手势的识别;
具体为:获取手掌在x、y、z方向上的速度PalmVelocity.x、PalmVelocity.y、PalmVelocity.z,得到手掌的包括运动方向、速度在内的具体运动状态,添加手势的识别判断条件,实现单手动态手势的识别;
步骤1.3:双手手势识别;
通过IsLeft、IsRight函数分别识别出左手、右手,添加左手、右手同时识别判断条件,实现双手手势识别;
步骤2:实现单人手势操控采煤仿真控制;
用户单人操作,通过键盘W、A、S、D键控制场景内相机移动实现场景漫游,设计的控制手势为:单手展开左右挥手、上下挥手、食指正反转画圈、数字手势控制采煤机左右行、摇臂升降、滚筒正反转和牵引速度;左手握拳右手展开前后挥动、双手展开上下挥动、双手握拳向前手势控制液压支架收伸护帮板、升降柱和向前牵引;单手握拳前后左右移动、双手握拳上下挥动、左手握拳右手展开上下挥动手势控制铲运机前进倒车左右转、力臂抬放、铲斗上翻下放,实现单人手势操控采煤仿真控制;
步骤3:实现虚拟场景的网络化;
采用C/S模式以及授权服务器方案,在同一局域网中通过IP地址和端口号匹配完成虚拟场景服务器端与客户端的授权与分配,实现不同客户端与服务端同一场景的实时同步漫游,实现虚拟场景的网络化;
具体包括如下步骤:
步骤3.1:创建服务器端Server、客户端Client,使它们互连;
采用C/S模式,多用户在同一局域网中,选择界面中的“Sever”按钮作为服务器端,选择界面中的按钮“Client”作为客户端,服务器端通过InitializeServer函数创建服务器,并在网内广播其IP地址和指定端口号;客户端用户输入服务器端IP地址和指定端口号,通过TextField函数获取用户输入的信息,并通过Connect函数完成匹配,实现客户端与服务器端连接;
步骤3.2:实现虚拟场景的网络化同步;
为虚拟场景中物体创建各自的预制件并在网络管理器上进行注册,分配各自的身份标识net ID,然后通过Instantiate函数使预制件在服务器上实例化为网络物体,当服务器创建后在本地生成一个网络物体的同时,所有连接的客户端触发连接到服务器的事件OnConnectedToServer,并通过Spawn函数派生相同net ID的物体,同时建立物体对象之间的通信关系,实现采煤仿真控制场景的网络化同步;
步骤3.3:实现多用户在虚拟场景中同步漫游;
多用户联入同一局域网后,服务器为每个终端生成一个工人Worker,用户通过键盘W、A、S、D键控制工人行走,通过FollowCamera函数将工人绑定为主相 机的追踪目标,设置主相 机始终位于距离工人模型2.9m远、1m高的位置,使用户界面始终为第三人称视角跟随本地工人行走变动;利用远程过程调用协议,将用户控制本地工人移动操作同步给所有联网的其他终端设备,当服务器端用户控制工人移动,服务器端程序响应,并给客户端程序发送消息作出相同响应;当客户端用户控制工人移动,客户端发送消息到服务器更新位置方向,服务器将新数据反序列化到所有客户端,实现多用户在虚拟场景中同步漫游,用户通过漫游能够近距离观察各采煤设备的构造和协同运行状况;
步骤4:实现多人多终端协同手势控制和采煤仿真控制;
多用户在不同客户端连接服务器,通过各客户端的LeapMotion,协同手势控制同一个虚拟场景,实现不同用户分别控制采煤机、液压支架的协同运作完成采煤工作;多台铲运机协同完成运煤工作;
通过完成协同手势控制和运行状态同步两个步骤,实现多人多终端协同手势仿真控制采煤设备的协同运作,具体包括如下步骤:步骤4.1:实现协同手势控制,具体包括如下步骤:
步骤4.1.1:客户端授权;
用户在客户端获得网络物体权限手势控制物体,通过SpawnWithClientAuthority函数派生该物体并传入网络连接,在客户端物体控制权限属性hasAuthority为true、控制对象标识符playerControllerID为‑1,客户端调用OnStartAuthority函数发起控制这个物体的命令;
步骤4.1.2:协同控制采煤机、液压支架;
用户1手势控制采煤机,使用远程过程调用协议向服务器发送控制请求,发送模式选择只向服务器发送,在服务器端,为相关手势控制采煤机的方法MoveShearer添加[Command]指令,方法名改为CmdMoveShearer;
用户2手势控制液压支架,为相关控制液压支架的方法MoveZhijia同样添加[Command]指令,客户端远程调用[Command]指令下的控制函数,使其在服务器端运行;不同用户在不同终端,通过isLocal函数使当前终端只能控制本地派生的一个网络物体,实现不同用户在不同终端对采煤机、综采支架的协同控制;
步骤4.1.3:协同控制多台铲运机;
不同用户协同控制多台铲运机;
步骤4.2:实现运行状态同步,具体包括如下步骤:
步骤4.2.1:参数传递;
利用远程过程调用协议从远程计算机程序上进行函数调用,将重要参数通过网络传递给其他所有联网的终端设备,发送模式选择发送给除自己之外的每个终端,重要参数包括采煤机Vector3类型的位置坐标、float类型的速度值、Vector3类型的齿轮旋转轴坐标,综采支架Vector3类型的位置坐标、Vector3类型的支柱升降移动坐标,实现采煤机和综采支架的运行状态同步;
步骤4.2.2:序列化和反序列化;
使用远程过程调用协议传递过多参数增加网络占用,多台铲运机采用序列化、反序列化进行网络数据同步,序列化是指通过Serialize函数将铲运机的实时信息存储到信息类然后写入字节流,然后反序列化,反序列化是指通过Deserialize函数读取字节流还原所有数据,同步数据以字节数组的形式传输,其中特殊数据类型Vector3先转换为字符串形式再进行序列化;多用户终端通过isWriting函数判断本地是否写入,用户通过手势控制铲运机时处于写入状态进行序列化,其他终端处于读取状态进行反序列化;
步骤4.2.3:同步变量;
仅服务器授权的物体,通过[SyncVar]标签把相关成员变量配置成同步变量,使用hook指定函数SceneSyn,当变量发生改变,服务器调用指定函数,并自动发送同步变量的最新数据到各客户端,实现场景的动态同步。
2.根据权利要求1所述的基于LeapMotion体感控制器的协同手势控制采煤仿真控制方法,其特征在于:在步骤1中,控制手势包括单手手势和双手手势;单手手势和双手手势分别包括静态手势和动态手势;其中,数字手势控制牵引速度为单手静态手势;左右挥动、画圈手势控制左右牵引、正反转动为单手动态手势;双手食 指交叉手势控制设备紧急停止为双手静态手势;双手展开上下挥动、双手握拳上下挥动手势控制升降柱、力臂抬放为双手动态手势。
3.根据权利要求1所述的基于LeapMotion体感控制器的协同手势控制采煤仿真控制方法,其特征在于:设置的最小移动速度smallestVelocity取0.4mm/s,最大距离MaxDistance取100mm。
4.根据权利要求1所述的基于LeapMotion体感控制器的协同手势控制采煤仿真控制方法,其特征在于:将采煤仿真控制场景基于3D谷歌纸盒眼镜Google Carboard开发,打包安卓APK文件安装到手机上,使移动终端用户与服务器连接,通过佩戴Google Carboard,结合手机能够看到更真实的立体虚拟场景,同时通过LeapMotion完成控制操作,给用户沉浸式的虚拟现实体验。
5.根据权利要求1所述的基于LeapMotion体感控制器的协同手势控制采煤仿真控制方法,其特征在于:在同一局域网中,同一时间内只允许一个终端创建服务器,通过InitializeServer函数创建服务器时更改设置允许连入的客户端数目,实现两人到更多人的网络协同。