在微软的 Kinect for Windows 全国培训营上,除了能了解到 Kinect 关键技术及交互设计特性,还能看到一些互动项目的展示,其中比较引人注目的是一个 Kinect 控制的机器人,它能根据控制者的身体动作通过光发射模块遥控控制机器人的运行,InfoQ 和作者黄涌进行了简单交流。
InfoQ: 请首先做下自我介绍并向大家介绍下机器人项目的背景??
黄涌:我叫黄涌,目前就读于中国科学院半导体研究所,是中国电机工程学会会员。在微软开展的“码”上 Kinect——Kinect for Windows 全国巡回培训及挑战赛活动中担任技术支持一职,主要负责向开发人员介绍 Kinect 开发基础知识以及全球同步发布的 SDK V1.7 中的最新技术——Kinect Interactions、Kinect Fusion 等,帮助解决开发人员在应用开发中所面临的问题,并提供相关的解决方案。
我的这个项目研究基于景深图像的人体骨骼跟踪算法,并使用微软 Kincet for Windows sensor 和 Kinect for Windows SDK V1.6 组件实现了这一算法。由 Kinect 摄像头负责采样景深及 RGB 摄像头数据,通过 USB2.0 传送给 PC 机,PC 机通过深度图像局域梯度特征跟踪人体骨骼节点,根据骨骼节点信息,比对人体姿态库,将体感信息转换为控制命令,给光发射模块。光发射模块调制光信息,光接收模块接收后将光信号转换为电信号,然后通过 UART 与下位机建立连接,完成数据传递。下位机上 MCU 解析命令,控制两轮自平衡机器人完成相应的技术动作。整体结构流程图如下:
InfoQ: 为什么会想到用 Kinect for Windows 做开发?
黄涌:原来参加过智能汽车竞赛,我是摄像头组的,所以对机器视觉非常感兴趣,同时自己也想弄个测距的项目,Kinect 正好恰和研究之意,所以就用它来开发了,没想到一开发起来,觉得真的非常强大。
InfoQ:简单谈下这个项目的设计思路?
黄涌: 上位机软件设计是本次设计思路的核心,本次设计使用 Visual Studio 2010 编译环境、Kinect for Windows SDK V1.6 组件,所有程序代码使用 C#语言编写。主要包括三个部分:
(1)深度图像局域梯度特征的人体骨骼跟踪算法,主要完成根据 Kinect 传送到 PC 机的深度图像,计算出每帧图片的骨骼节点空间坐标,完成对人体骨骼节点的跟踪;
(2)骨骼信息识别,由骨骼节点信息与人体姿态库比对,产生相应的控制命令;
(3)PC 与下位机通信,完成通信功能。
程序执行流程如下:
光通信的硬件设计与信息调制,采用 LED 可见光传输技术发出高速明暗闪烁的讯号,以无线方式来传输数据。通过对频率的调制,发出特定的编码信号,接收方利用光电敏感器件接收调制光,解调后还原成数据信号,然后将命令传输给机器人。上位机与单片机之间以帧为单位完成数据通信,控制命令的帧格式 0X0A+ 控制命令 (8 位)+0X05。
InfoQ:你觉得这个项目创新在哪些方面?
黄涌:主要在这几个方面:
- 控制上,应用 3D 摄像头识别人体骨骼,将身体动作与机器人运行状态联系起来让人机交互更加自然,增强人体行为真实感觉,而且可以便于不同人群使用。
- 简化人机交互方式,使用更加自然的交互方式,具有替代传统遥控、鼠标、键盘等传统人机交互工具的功能。
- 通信上,采用可见光通信方式,节约能源,无电磁辐射,不需要采用另外的传输介质,可应用于多种场合。
InfoQ:下一步有哪些后续开发计划?是否会将设计方案开源?
黄涌:下一步想做 Kinect 控制的类人机器人,能够实时模仿人类动作;其二引入可见光通信,搭配照明平台;其三,设计由 Kinect 控制的多玩家赛车对抗游戏。设计方案会适时开源的,大家多交流才会更好的进步嘛。
评论