目录
一 综述
二
1.软件包
2.包内容
三、
1.硬件包
四、
1. 使用方法
2. 准备工作
3. 设备连接
4. Arduino程序烧写
5. 正式工作
6. 运行结束后
五、模型调整API
一、 综述
SuperMDK是哈工大MultiWorld团队开发的针对unity3d开发者使用的MDK(Motion capture Development Kit)。
硬件设备由一块树莓派,四块arduino uno以及7块MPU-6050传感器组成。
硬件传感部分数据经过封装呈现,在unity中可以直接使用。不介绍对应理论。
团队的目标是提供一种可以拖拽即使用的SDK,用最简单的方式开发体感应用,团队也认为这点在本文中得到了很好的体现。
二、 软件包
图 1 unity导入包
image.png如图,引用包名为SuperMDK+版本号。
image.png包内容
图 2 包主要内容
image.png图 3 包主要内容
image.png image.png-增加下拉菜单MDK
-点击后分别跳转到该项目的帮助文档跟github网站
-Material 文件夹下包括模型使用的各种材料,在此可以替换模型和贴图使用开发者自定义的材料选项。
-scene 文件夹下包括了开发包提供的基础场景,场景中有项目的模型和可以更改的选项。(下文有具体内容)。
-scripts 文件夹下是包中运用的各种脚本(unity默认的C#文件)。
{
Fpstest.cs 文件是默认执行fps统计脚本,将脚本实时显示出来。
testUdp.cs 文件是UDP广播接收端执行脚本,是实例化UDPclient数据接收所依赖的父类。
Rightarm.cs是模型驱动脚本,文件中包括了参数矫正、滤波等内容。
}
图 4 man 场景下内容
Main Carema 是主摄像头。
Directional Light 是方向光源,为场景提供灯光。
Man 是实例模型,开发者可以通过改变脚本来改变模型对应关系。
Canvas 是画布,默认UI组件在此执行。
EventSystem 是时间收集器,收集工作方案工作中事件问题。
UDP 是空类,执行TestUp文件,实例化UDP广播接收端。
FPStest同样是空类,执行FPSTest文件,实例化FPS测试类。
图 5 包导入后unity视图
三、 硬件包
硬件组成中,Arduino uno负责读取MPU-6050 模块数据,通过串口发送到树莓派当中。
树莓派接受数据后进行预处理并通过UDP广播形式发送到局域网内。理论上局域网内任何终端(windows、android等设备)通过app应用可以查看到对应模型动态状态。
四、 使用方法
准备工作
设备连接
MPU1:arduino1
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
MPU2:arduino1
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
AD0 : 3.3V
MPU3:arduino2
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
MPU4:arduino2
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
AD0 : 3.3V
MPU5:arduino3
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
MPU6:arduino3
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
AD0 : 3.3V
MPU7:arduino4
Vcc :3.3v
GND :GND
SCL :A5
SDA :A4
Arduino程序烧写
Arduino程序在您拿到手中时已经烧写进板子中,可以直接使用。需要将arduino和树莓派通过USB线连接
正式工作
将树莓派和开发的电脑连接到同一个局域网内。
在树莓派上启动终端
输入命令:
本树莓派自带 openser.sh 脚本
./openser.sh
#或者手动开启Arduino 的串口
sudo chmod 777 /dev/ttyUSB*
#或者
sudo chmod 777 /dev/ttyACM*
继续输入命令:
python udpargs.py /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
运行UDP程序。
image.png程序注解:四个参数分别代表了四个Arduino
运行程序,开始UDP广播。
为了开发者调试方便,我们将传送的数据打印在终端上,以便开发者对数据进行监测
回到unity当中
双击打开man场景
图 8 unity运行
点击运行键开始运行unity端程序
图 9 开始运行截图
- 开始连接 点击开始连接,unity将开始接受UDP广播内容。开始传播
- 暂停连接,为了调试参数,预留的功能,可以暂停连接
-
继续连接,调整后可以继续开始连接。
image.png
注:socket 端口只能初始化一次,请记住只能点击开始链接一次。
运行结束后
我们需要对服务器进行关闭,执行关闭服务器程序代码:
python closeser.py
至此,一次完整的调试过程结束。
五、 模型调整API
image.pngElement0-6 代表了一个模型的7个活动关节:
0:leftForeArm
1:LeftArm
2:RightForeArm
3:RightArm
4:LeftUpleg
5:RightUpleg
6:Head
Socket 代表了挂载testudp.cs 脚本的游戏物体
BodyAssembly.cs脚本API :
//默认构建函数,定义初始值
public BodyAssembly(GameObject gameobject) ;
//定义默认初始角
public void getDefault();
//获取基本旋转角
public void getRotation(float[] fRotation);
//获取与初始脚的差值
public void getMinus();
//转动方法
public void RotateArm(GameObject gameobject);
public void RotateLeg(GameObject gameobject);
public void RotateLeg(GameObject gameobject);
六、结束语
SuperMDK在考量了成本问题后,提供了以上的方法解决成本问题,团队也尽可能的降低使用MDK的团队的学习成本,目前基本实现拖拽即编程的目标,使零学习成本、低学习成本开发体感游戏成为可能。
团队也将加快研发和维护进度,提供更完善的平台和技术。
也欢迎更多团队帮助宣传和使用我们的产品。
联系方式:liaoboo323@outlook.com
github地址
网友评论