我如何制作运动捕捉服



前言


在我的小镇上,我致力于解决非同寻常的技术问题。因此,这一次,体操运动员本应按照其节目进行表演的节目的组织者决定为她的表演增加一些“亮点”。即,在屏幕上显示体操运动员的剪影,这将重复她的动作并以某种方式与其他效果互动,从而使所有内容都具有互动性。无法解决“额头”问题。 Kinect显然无法应付任务,也无法捕捉到与他至少有10米距离的人的活动,即使在黑暗中。因此,决定做一些“自己的事”。展望未来,我会说表演没有发生,但是我对这个想法感到非常兴奋,以至于我将我的实验作为一个单独的项目继续进行,后来称为冲动

开始使用




收到必要的组件后,我便开始为未来的设备制作原型。即:

  • Arduino UNO是著名的控制器设计器,可让您在短时间内开发原型。
  • HC-06-蓝牙模块,将用作无线通信的手段。该模块非常简单,具有UART接口。
  • MPU-6050-当时唯一可用的惯性传感器。我立即购买了2个,以检查它们如何成对工作,因为将来在一个系统中最多需要使用15个传感器。该传感器结合了加速度计和陀螺仪以及温度传感器以调节输出。

从清单中获得所有信息后,我已经很渴望看到mpu在起作用。在官方的Arduino论坛上,有几个使用这些传感器的示例,我使用了其中一个。为了连接传感器,使用了5个引脚(触点):

  • VCC,GND-一切都清楚,电源和地线。值得注意的是,传感器的工作电压为3.3v,但在5v时感觉很好。耗电量小于0.05Ah
  • SCL,SDA-实际上是与传感器进行“通信”的引脚。这些引脚负责i2c接口。该接口实现了同一总线上设备之间的切换,换句话说,总线是街道,而房子是设备。
  • INT-中断引脚。传感器上的数据准备就绪后,主控制器会立即处理这些数据。

但是,此示例仅显示终端中加速度计的“原始”值,并且编写了代码以将其转换为熟悉的角度,然后实施了卡尔曼滤波器,所有这些都已经占用了Arduino UNO资源的70%。尽管如此,相当平滑的角度值已经到达终端,该设备在空间上相当快,尽管只有几分钟,此后FIFO缓冲区已满。但是它起作用了!



稳定!


逐渐地,整个系统的持续时间使工作传感器的欢乐性黯然失色。尽管我没有为FIFO缓冲区苦苦挣扎,但它溢出了。值得注意的是,那时关于这些传感器和通常类似的系统的信息很少,必须逐字逐字收集这些信息。确定问题出在i2c接口的实现上之后,我开始朝这个方向进行搜索,并找到了I2Cdev用户库,该库旨在代替arduino的标准连线库。令人惊讶的是将这个库与mpu-6050结合使用的嵌套示例。在此库上重建项目后,我还收到了原始数据,并用我的代码将其转换为角落,但是没有更多的溢出。这是一个小小的胜利。后来,在研究图书馆内部时,我发现了很多有用的东西。所以举个例子现在使用来自传感器和加速度计和陀螺仪的数据。事实是,加速度计允许您确定静止时设备的确切倾斜角度,直到外力作用到设备上为止,而陀螺仪旨在补偿这些相同的力。来自两个传感器的数据的使用变得很明显,在这里找到了一种互补滤波器。但是,存在零漂移的问题,但稍后会更多。

!


再一次是礁石。这次我遇到的问题是使用第二个mpu-6050传感器。我已经在本文中对i2c接口进行了类比,其中总线是街道,设备在家里。假设必须到达特定设备的数据包是邮递员。邮递员需要两件事-包裹和地址,每个房子都有自己的唯一地址,而设备必须有自己的地址。问题恰好在mpu-6050传感器的地址上,对于所有此类传感器都是一个-0x68。该地址在出厂时已刷新到传感器控制器中,但是无法找到固件并更改每个传感器的地址。国外论坛提供了一种解决方案:一个接一个地连接传感器,第一个传感器的一个脚连接到第二个传感器的AD0,并在0x69处可用,但是此方法涉及的使用不超过2 mpu,我立即将其删除。

解决方案是晶体管。想法是在每个传感器前面的i2c引脚上放置一对晶体管,并交替打开它们。该算法很简单-有必要从第5个传感器读取数据,关闭第5个传感器以外的所有门(或在必要时将其打开)并读取,然后以类似的方式从其余传感器获取数据。结果可以在本文的第一张照片中看到,并且非常可行。以类似的方式,我设法连接了4个传感器,但这并没有以最好的方式影响稳定性,当我用尽晶体管时,我决定使用更紧凑,更稳定的微电路。

接线图
image

该阶段唯一幸存的照片(对此致歉):



门控制器


一种将这些微电路结合起来并允许您与许多mpu传感器通信的设备,我称之为门控制器。一位已经有蚀刻板经验的好朋友为我提供了帮助,但我需要的是以前蚀刻所没有的质量。由于有许多相交的走线,因此需要两层板,但多层板也可以作为原型。这项工作的结果是一个异常的董事会:

在热中






现在仍然需要检查设备是否正常运行。一次连接了10个传感器后,监视器上会出现完全相同的有关成功初始化的消息-设备正在运行!



Gimble Lock,四元数,可视化


在俄罗斯的铰链式锁或折叠框架中的万向节锁-在陀螺仪领域,在某些情况下,在空间方向上是一种不愉快的现象。在没有对此现象进行详尽说明的情况下(关于该主题有很好的说明性视频和可视视频),我只是说,这种铰接锁不允许传感器旋转360度。XZ轴(与水平面的偏差)限制在-45至45度之间,且超出这些限制的定义不正确。对这个主题进行了更详细的研究后,结果发现解决方案在我的眼中。 MPU-6050是六轴传感器,并且板上装有dmp。 Dmp(数字运动处理器)执行了我在主代码中编写的所有操作,以使主控制器闪烁这么长时间,甚至过滤值。另外,dmp可以四元数形式输出数据,这可以让您绕过铰链锁,也可以减小转发数据包的大小。在这一点上,我继续与四元数相识,早些时候我在Unity3D中与它们一起工作并有了一些想法。简单来说,四元数是一个数字系统(4个数字),描述了空间中某物的旋转。只记得Unity,我试图描绘这样的东西:



控制者


Arduino和门控制器已经证明了自己的合理性,但并不打算在最终版本中使用它们。现在该使控制器具体化并针对特定任务进行量身定制了。到那时,我已经为将来的控制器修改了固件,并以最佳方式配置了dmp,这使我拒绝使用中断。因此,每个传感器通过四个引脚而不是以前的五个引脚连接。同样,门控制器中不需要六个芯片中的两个。所有这些改进导致了一个事实,即未来设备的电路板是在两个方向上设计的,不再需要“顶置”的设计。



房屋


该设备逐渐采用了最终形式,下一步是使案例符合逻辑。显而易见的解决方案是订购或转向3D打印服务。但这一切都是简单而有趣的,因此我们购买了自己的3D打印机用于几件事情。在没有任何说明的情况下,他们将其组装在直观的水平上,但是一切顺利。通常,组装,配置和打印准备工作本身应该单独提供,但这不是关于此的。使用所有测试材料,剩下的就是等待ABS塑料到达。

3D打印机




为了进行仿真,选择了123D-Design程序。该程序非常直观,任何在3D图形编辑器方面至少有经验的人都会很快掌握它。



然后,我打印了所有情况,通过4针细线将传感器连接到控制器,为传感器安装好支架,将所有部件放在一起,得到了现成的,独立的,可穿戴的套装。对于第一个原型是相当合适的。







软体类


由于某些情况,我将Unity3D推迟“稍后”,因为截止日期已不多了,所以我不得不快速编写一个可视化程序。我使用Xors3D图形引擎已经很长时间了(也许有人知道这一点),但这一次并没有让我失望。但是,在他还清之后,我没有回到Unity,而是继续在此特定引擎上开发服装的视觉环境。



当前功能列表:

  • 可视化-程序显示一个人的模型,该模型实时重复一个人穿着西装的所有动作
  • 自动校准-允许您随时随时校准西服
  • 定位-模型也可以像人一样在空间中移动,可以蹲伏,行走等。
  • 记录/播放-所有动作都可以记录和播放。
  • 第一人称视角模式-提供了Oculus Rift和其他虚拟现实头盔的图像输出。
  • 互动性-穿着西装的人可能会影响虚拟世界。踢球,开门,旋转转盘等 (物理引擎)

结论


目前,该项目拥有1个完全正常运行,自主,可穿戴和无线的原型以及所有必要的软件。开发这种服装花了8个月的时间(我休息了2个,总共休息了6个),但对我来说,这是一个完整的时代。在项目期间,我提高了自己的技能,尝试并做了很多我以前不了解的东西,我赚了一点。

当我开始的时候,对“它是如何工作的”只感兴趣。这类服装的存在我还不知道。但是,在开发期间,至少有3个这样的项目来到了众筹网站,我想以某种方式发展冲动作为商业项目,但是当我在贝加尔湖跨界地区表达自己的想法非常困难。现在没有足够的动力坐下来准备第二个原型,该原型已经是无线的并且基于9轴传感器,因此对于我来说,这个项目很可能仍然是一次巨大而有用的经验。在本文中,我想总结所有已完成的工作,尽管此处未显示,但仅显示20%。并非所有人都会对大量的代码和焊接时间,3d打印,大量的试验和错误以及大量的材料感兴趣,但我将尝试在评论中回答此类问题。

Source: https://habr.com/ru/post/zh-CN392353/


All Articles