XMove是我和几个死党从2010年开始开发的一套人体动作捕捉系统,软硬件全部自行开发,投入了大量的精力,历经三年,发展四个版本。

今年春节回到老家,翻出了2011年春节时焊电路用过的松香和和硬盘角落里的代码。感慨万分,遂有此文。文章过长,分为两部分,本文为2010-2011年,XMove从第一代到第三代的故事。

诞生于考研的第一代

保研尚未确定,我挤在考研自习室里非常无趣,看到了一篇关于加速度传感器的新闻。也许是弥漫在空中的泡面味和臭脚味刺激到了我,我灵光一现,想到了利用这种传感器开发游戏控制器的想法。彼时,市面上还没有这样的成熟产品,更谈不上AR和VR了。

我似乎都忘记了考研,之后是疯狂的元器件采购,我创下了一天拿6个快递的记录,跑了无数趟电子市场。也许你不不信,我的第一代电路板竟然是自动布线的!

第一代XMove非常简陋,只使用了一枚MMA7455加速度计,裸露的电线,伸出来的无线发射器,非常山寨,只有位于双手和双脚的四个节点。

回家之后,别人都在看考研书,我在盛夏的酷热中通宵达旦地焊电路调代码,终于在某天夜里的凌晨两点,我迷迷糊糊地发现了bug,程序被我调通了!当时兴奋地差点撞到天花板。

我妈妈给我缝了一个简单的手套,能把传感器套在手上而不影响操作,很贴心:

玩极品飞车9看起来是这个样子,怎么刹车呢?左右脚的传感器能很好地实现加速和刹车,不过肯定没有力回馈啦。

我给它开发了第一版的宣传册,现在看来感觉好浮夸:

我还用MFC设计了第一版服务器端的控制软件,所有的C++代码都在一个文件里,路子特别野,连图表控件都是一个个的点画出来的(80后可能听过有种叫GDI的技术):

第一代版本非常简陋,却赢得了一致好评,在当时的全国大学生创新竞赛中轻松拿了一等奖。想起来都要偷笑,总共的开发时间也不超过10天...

第二代:手持控制器

开发完第一代的XMove,我得知自己已顺利保研,在那段现在想起来最无忧无虑的时光里,我开始着手第二代系统的研发。

第一代系统没有按键,加速度计只能检测线性动作,精度不够。在那个街机还是诺基亚N97的时代,陀螺仪很稀奇,比米粒还小却几百块钱一枚。这套控制器的硬件堪称豪华。有了硬件大神的加盟,我们的硬件比之前做的精细多了。

第二代的主要进步是下面这个带有按键和彩色LCD的手持手柄,还内置了我为其在裸机上开发的操作系统,从底层调度,硬件驱动到上层的GUI控件,都是纯手工打造的,C代码约一万行。

这个手持终端在2KB内存的单片机上,实现了漂亮的动态菜单,支持人机对战的五子棋,俄罗斯方块:这些游戏都可以通过旋转控制器来实现,几乎不需要按键:

甚至我还在上面开发了能通过旋转操作的中文输入法,只要旋转它就能输入全部的文字,单手利器,也算是当时一个很超前的创新吧:

那段时间,我每天早上起来先打两个小时的游戏,中午吃过饭拿根雪糕,慢悠悠地在北邮的主干道上遛弯,之后便拿着电脑去实验室写代码。看得出当时的我是有多闲,能投入那么多时间。

小学有个梦想,就是拥有一个无所不能的掌上电脑,换了三台文曲星都不过瘾。这个自底向上设计的“电脑”算是实现了这个梦想,大四那年,我把它随时随地地装在身上,没事就看看现在几点,气压多少,还用它的指南针导航。现在想想真是好中二。

第三代黄金岁月

2011年春天,大四的我边写毕业论文,边将上两代的硬件进行了充分的整合,优化软件,开发了当时比较完善的XMove第三代。这是硬件的全家福:

它的最主要功能就是玩游戏,演示效果相当好。这是当时用全身动作捕捉玩街霸4的场景,减肥利器,打5分钟就气喘吁吁,校领导相当喜欢把它介绍给外面的领导看:

不过当时最酷的莫过于用来玩使命召唤(一种风靡全球的第一人称射击游戏),用双手柄控制枪,用脚部传感器控制跳跃和行走,动作数据可以送入SVM(一种分类算法)中,能够识别上膛,标准,扔手雷等动作。不过我当时机器学习刚入门,对于流式的动作识别就无能为力了。

这是我当时为其设计的宣传册,是不是比第一代的强很多?我居然为了它,放弃了当时实验室的春游,现在想起来好后悔~

外页:

内页:

之后我自学了C#,用WinForm技术开发了这一版本的桌面控制端,比第一代漂亮多了,能够监控每个传感器的实时运动数据,茶壶能够准确地展现每个传感器的姿态。这是我第一次在桌面端编写如此复杂的软件,不过代码非常乱...

有两个特别有趣的演示一定要提一下:

远程机械手控制

把传感器绑在自己的胳膊上,就能通过XMove的动作捕捉,实时地1:1 远程控制机械手。

整个结果非常流畅,不过机械手是淘宝购入,自行组装,受限于舵机的扭矩,手臂速度太快就跟不上了。当年一天的演示就烧掉了三个舵机!演示也很吸引眼球,但我居然一张照片都没有留下来,好郁闷。

虚拟现实(VR)

六年之前,我们就自行实现了VR系统。我在淘宝上用2300大洋买了头戴显示器,分辨率640*480, VGA接口,不支持立体显示,不过那是当时能找到的最好的头戴了。包装盒外面印刷了比基尼美女,看着特别像羞羞电影的设备,我都不好意思拿出来给人看...

某一天晚上,我把笔记本电脑背在书包后面,把XMove的传感器装在全身四个位置,戴上头戴显示器,开启了使命召唤2。 那是反映二战的一道关卡,虽然设备简陋,但我在空旷而黑暗的实验室楼道里,蹦蹦跳跳,左躲右闪,竟然真的融入了那个场景,15分钟的体验让我至今印象深刻。虽然比不了现代的VR设备,但身边同学不停地喊“SB”,就知道那时有多么欢乐了。

然而不幸的是,这些我也一张照片没留下来。VR眼镜后来上交学校,这样的体验有且只有最后一次。

结语: 那是我的黄金时代

大四的这一年,我对XMove达到了几乎狂热的程度,连电脑桌面都是我设计的XMove主题。这三代,综合起来花费了我大四一年近500小时的开发时间。由于要做PCB,要焊接,要在文本编辑器写C代码和调试,要与其他传感器的通信和协同,还要面对不少外部困难,最终还是完成了。XMove带给了我数不清的荣誉和进步,我的技术栈也基本上是那个时代发展起来的。

大四毕业了,它的故事才刚刚开始。我着手进行第四代的开发,它的目标堪称宏伟,技术难度异常复杂。不过,它带给我的不仅是进步的喜悦,更是深陷泥潭中的痛苦,过度设计的教训。这些会在下一篇文章里,容许我慢慢地讲给各位读者听。

光荣与梦想 | XMove动作捕捉系统(一)相关推荐

  1. 【Nokov】动作捕捉系统标定与机械臂各坐标系的说明

    导语:这一周的工作先是完成了度量系统Nokov的标定,然后对机械臂自身的编码器得到的坐标值与动作捕捉系统Nokov测得的坐标值进行了比较,来观察二者之间的误差.在这个过程中我对Nokov软件Seeke ...

  2. 惯性动作捕捉系统在虚拟主播中的应用

    大家都看过网络直播,吃播.美妆.拆箱测评等等题材,花样繁多,不胜枚举. 而虚拟直播,大家是否有看过呢? 虚拟直播并不是真人作为主播,而是类似于动画人物形象的虚拟二次元主播,例如"一禅小和尚& ...

  3. 全球及中国三维精密动作捕捉系统行业研究及十四五规划分析报告

    [报告篇幅]:106 [报告图表数]:145 [报告出版时间]:2022年1月 报告摘要 2021年全球三维精密动作捕捉系统市场规模大约为 亿元(人民币),预计2028年将达到 亿元,2022-202 ...

  4. (转)认识动作捕捉系统 浅谈三种主流解决方案

    转自http://news.17173.com/content/2016-03-14/20160314102718031.shtml 目前动作捕捉系统有惯性式和光学式两大主流技术路线,而光学式又分为标 ...

  5. 光学动作捕捉系统使用教程:刚体贴点说明

    一.光学动作捕捉系统定义: 光学动作捕捉系统的本质是定位系统,它通过捕捉附着于被测物表面的反光标志点,获取反光标点球心的三维坐标,进而去识别多个反光标志点多构成的一个模型.通过计算分析,来获取与其相关 ...

  6. 动作捕捉系统用于机器人关节位移与几何参数标定

    机器人在工业领域和日常生活中起到重要的作用,要完成的任务也越来越复杂,这就需要机器人动作执行时足够精准.机器人的绝对精度是评价机器人性能的一项重要指标. 要提高机器人的绝对精度,需要进行高精度标定.标 ...

  7. NOKOV动作捕捉系统使多场协同无人机自主建造成为可能

    近年来,工业机器人的兴起使得建造的效率和安全性得以提升,但由于机器人由于大小与活动范围的限制,在大型建筑上难以施展拳脚.上海同济大学建筑系的无人机自主建造小组,正在进行以无人机取代工业机器人进行空中建 ...

  8. 动作捕捉系统用于苹果采摘机器人

    随着我国农业产业化结构调整和互联网+模式的兴起,水果种植对于农民创收起到重要作用.相比于已实现种植收割全自动化主要粮食作物(如小麦.玉米),目前苹果.梨果等表皮薄易损伤的水果仍然需要人工采摘,这极大提 ...

  9. 动作捕捉系统用于柔性机械臂的末端定位控制

    柔性机械臂是一种新型仿生机械臂,其设计受到自然界中生物结构启发,比如象鼻.章鱼爪.蚯蚓和蛇等.与传统机械臂相比,柔性机械臂可以在材料变形范围内进行任意形状的弯曲运动,通过调整自身形态在狭小复杂的空间内 ...

最新文章

  1. 推断股票强弱最有效的一个方法
  2. 视觉SLAM总结——视觉特征子综述
  3. c++17(9)-多参数列表
  4. ios开发问题汇总(一)
  5. mongodb java 开源_开源的Mongodb java client -- mango发布
  6. 根据Request获取客户端IP
  7. mysql数据库中 pri_mysql数据库part2
  8. NUC1154 Vertical Histogram【打印图案】
  9. 快速备份和还原 MySQL 数据库的另一种方法
  10. js 程序执行与顺序实现详解
  11. 得力助手 消防员的 消防机器人_机器人化身消防员“得力助手”,进入危险火场执行工作|机器人日报...
  12. html用css美化表格
  13. 开源无线管理软件_开源无线电系统向育空地区及其他地区提供紧急警报和音乐
  14. DLL load failed: %1 不是有效的 Win32 应用程序的解决办法
  15. tolua学习资料汇总贴
  16. Android手势密码
  17. python123作业怎么提交_使用python提交作业
  18. from PyQt6 import QtCore, QtGui, QtWidgets ImportError: DLL load failed while importing QtGui:
  19. Java 程序是如何执行的
  20. 一阶差分序列garch建模_最全:ARCH, GARCH等模型家族是什么?软件如何做?怎么解释?...

热门文章

  1. 自动sqlldr脚本
  2. 【整理】Linux驱动中,probe函数何时被调用
  3. 软件公司因女员工怀二胎拒绝与其续约
  4. Asp.net网站的自动部署-sqlserver数据库的自动部署
  5. 【转载】用三段 140 字符以内的代码生成一张 1024×1024 的图片
  6. 集群理论讲解(续三)
  7. 大数据flume日志采集系统详解
  8. 云计算或将逐步被认可
  9. 利用单片机快速实现家庭智能控制平台
  10. 基于windows 2012部署oracle 12.1.0.2 rac历险记