简介:基于stm32F103c8t6单片机为主控,以MPU6050作为主要传感器的动作捕捉手套设计,能与电脑上基于UNITY3D软件开发的上位机进行通信,在上位机上实时显示手套状态。
一、需求分析
- 制作一个动作捕捉手套,要求每个手指至少实现两个关节的识别,并且能通过上位机显示对应3d模型。
- 人手指的结构相对比较复杂,由多个关节组成,因此需要在手上的关键位置布置若多个传感器,采集每个手指和关节的运动信息。
- 我们可以把手看做是一个多个向量首尾相连的模型。
二、方案论证
方案一:基于stm32为主控,采用多个弯曲传感器。
- 采用多个弯曲传感器,采集手指节之间的弯曲程度,换算成指节间的相对角度(即上图的β角)。
- 优点:程序与电路设计方便。
- 缺点:弯曲传感器昂贵,做成一个手套价格太高。一个弯曲传感器只能识别一个旋转轴的旋转,手的部分关节可以有两个方向的转动,这部分的转动需要增加弯曲传感器来识别。
方案二:基于stm32为主控,采用多个MPU6050传感器。
- 采用多个MPU6050,采集每个手指节与世界坐标下的夹角,通过换算和数据处理还原出手的运动模型。
- 优点:每个MPU6050可以识别三个旋转轴上的角度变化,因此能够更准确的反应手的运动,成本相对采用弯曲传感器低。
- 缺点:电路板数量多,布线存在一些困难,程序设计相对其他两个方案稍复杂。
方案三:基于stm32为主控,采用多个电位器识别手指角度:
- 多个电位器与手指关节联动,通过ADC获取分压数值再换算成角度还原手的运动模型。
- 优点:价格低廉,电路简单,程序设计简单
- 缺点:手套设计结构复杂,容易损坏。
通过综合考虑,采用方案二作为传感器方案。其他功能实现方案如下:
1、无线通信:采用蓝牙串口模块实现单片机与PC的通信,方便快捷。
2、PC端使用unity3d开发一个上位机,PC端调用串口的API获取单片机数据,然后在反应到模型上。
三、调试与测试结果
方案设计完善后进行实际制作。
- 第一步:先焊接单片机主控板并对其硬件电路进行测试,测试各个模块电压是否正常,升降压芯片,电源管理芯片等是否正常工作。测试结果正常。
- 第二步:对单片机烧写简单例程,测试单片机能否正常工作,测试结果正常。
- 第三步:使用单片机读取主控板上的MPU6050测试其是否正常工作,测试结果正常。
- 第四步:焊接各个手指上的MPU6050小模块,硬件测试有无短路断路,测试能否使用单片机正常与其通信,所有MPU6050全部测试正常。
- 第五步:测试与配置蓝牙通讯芯片,测试正常。
至此,所有硬件测试完成,进入软件调试环节。
- 第一步:读取所有MPU6050模块的数据,打包通过蓝牙发送到PC上位机。
- 第二步:PC上位机使用Unity3D编写程序,调用.NET框架提供的串口API读取数据并解析,将数据映射到3D模型上。
- 第三步:优化程序。
最后将电路板装配到手套上,完成设计。
最后测试结果为:上位机能识别手套五个手指上两个关节的运动,以及前臂与手掌在空间的运动,带有静止校准功能。手套通过无线传输数据,带有电源管理能进行充放电。