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. 自述创业史 | XMove动作感应系统(二)

    XMove是沙漠君和几个死党从2010年开始开发的一套人体动作捕捉系统,软硬件全部自行开发,投入了大量的精力,历经三年,发展四个版本.文章分上下篇,本文为下篇,前三代的故事在<光荣与梦想| XM ...

  2. 光学动作捕捉系统中的反光标识点(Marker点)

    动作捕捉系统本质上是一种定位系统,通常需要在目标物布置定位设备进行追踪.以红外光学为原理的动作捕捉系统,主要由由光学镜头.动作捕捉软件.反光标识点.POE交换机.和若干配件组成,其中反光标识点(Mar ...

  3. 真人动作捕捉系统 for Unity

    真人动作捕捉 在Asset Store中浏览Mecanim相关的资源时,发现了这个 资源信息 Asset Store:https://www.assetstore.unity3d.com/#/cont ...

  4. AI动作捕捉技术,会让制造业大幅度降低成本吗?

    现代动作捕捉系统应该是起源于100多年前的动画工业,通过一种叫做"动态遮罩或影像描摹"的技术,动画师们可以获得流畅的.栩栩如生的动作:后来到了20世纪80年代,动画师们设计出带有活 ...

  5. VUP虚拟直播与光学动作捕捉技术

    虚拟直播将虚拟场景.虚拟形象实时显示在观众面前,虚拟场景与人物替代了原有的耗费较大搭建成本的实景场景与真人出镜,为观众带来全新的视觉体验,同时新技术降低了原有场景搭建成本,是近些年继AI.VR.动作捕 ...

  6. 短期连载 第1回 万代南梦宫工作室动画的流派 BNS动作捕捉汐留工作室的采访

    原文链接:http://cgworld.jp/interview/201607-bandainamco.html     因开发了[偶像大师],[铁拳],[XX传说]系列等各种游戏而被广为人知的万代南 ...

  7. 梦想CAD控件系统变量说明

    这里介绍一些常用系统变量有String.double.long.McGePoint3d等类型,其中有部分系统变量是随图纸保存,再次打开时就会读取图纸中的系统变量,有些系统变量不随图纸保存,其作用来控制 ...

  8. (Java实现) 光荣的梦想

    光荣的梦想 Time Limit:10000MS Memory Limit:65536K Total Submit:110 Accepted:45 Description Prince对他在这片大陆上 ...

  9. 人体动作捕捉格式之BVH

    BVH简介 BVH是BioVision公司推出的一种人体动作捕捉文件格式.这种文件以节点为核心元素,记录连续数帧内人体骨架的运动. BVH=? 研究一个东西的时候我比较喜欢先研究它的名字.BVH可以认 ...

随机推荐

  1. ubuntu 系统 opencv3.1.0 安装

    opencv编译安装 编译环境安装: sudo apt-get install build-essential 必需包安装: sudo apt-get install cmake git libgtk ...

  2. java工程师联通XX面试题目

    什么是“长连接”和“短连接”? 所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接解释2长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据 ...

  3. 控制流之for

    for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目.我们会在后面的章节中更加详细地学习序列.使用for语句~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  4. [iOS Animation]-CALayer 显示动画

    显式动画 如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆 上一章介绍了隐式动画的概念.隐式动画是在iOS平台创建动态用户界面的一种直接方式,也是UIKit动画机制的基础,不过它并不能涵盖所有的动 ...

  5. STM32内置参照电压的使用(转)

    源:STM32内置参照电压的使用 每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17. 根据数据手册中的数据,这个参照电压的典型值是1.20V,最小 ...

  6. iOS校验身份证是否合法

    //身份证号验证 1900+/2000+的年份日期的正则表达式经过修改,目前貌似是对的,如果哪位朋友发现错误希望能够给与提示 //返回yes位表示格式正确,否则为错误 -(BOOL)IDCardAut ...

  7. 源码解析-knockout源码准备

    准备包括心理和资源两方面. 心理 我看过一句话说,当你用一个框架时,不要忙着看一遍使用教程就开始写项目,先去看看框架原理. 这句话我深以为然.现今前端快速发展,很多前端攻城狮都很茫然:框架更新太快了, ...

  8. STM32音乐播放器,文件查找的实现

    使用FATFS只是完成了一个基本的文件读写,有时候我们需要扩展一些功能,比如MP3实验,需要上一曲下一曲的切换,扩展的代码如下 //显示目录下所有文件 u8 ShowFileList(u8* dirP ...

  9. iOS开发网络数据之AFNetworking使用 分类: ios技术 2015-04-03 16:35 105人阅读 评论(0) 收藏

    http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库.最新版本支持session,xctool单元测试.网络获取数 ...

  10. 从字符串拼接看JS优化原则

    来自知乎的问题:JavaScript 怎样高效拼接字符串? 请把以下用于连接字符串的JavaScript代码修改为更高效的方式: var htmlString ='< div class=”co ...