聊聊体感游戏背后的小科技
科技活动
原创
科技学堂/文
阅读:9993
收藏:0

微信图片_20170719164604.jpg

运动传感器LSM303   ADXL345  ADXL335  MPU6500


相信不少朋友会喜欢诸如《EA 真实赛车》或《Labyrinth 2 HD》这类重力传感类游戏。只需要轻轻倾斜手机或平板,就可以操纵汽车或弹珠的运动,简单有趣。

微信图片_20170719164609.jpg

那这类游戏控制过程是如何实现的,或者换句话说,手机和平板是如何感知自身的倾角变化呢?

这不得不提及运动状态检测的两大重量级传感器:

陀螺仪与加速度传感器

陀螺仪和加速度传感器基本上覆盖了从手环、手机、VR头盔到无人机、无人驾驶所有运动检测领域。


我们先来看看最常见的消费电子拆解:

QQ截图20170719164624.png
微信图片_20170719164629.jpg

苹果手表传感器(注2)

微信图片_20170719164636.jpg

HTC VR头盔运动传感器(注3)

QQ截图20170719164656.png


评测及拆解中的InvenSense 773C、C451、MPU6500、LSM330芯片便是消费电子常用的运动检测芯片,包含3轴陀螺仪与3轴加速度计,也就是常说的6轴运动传感器。


陀螺仪 VS  加速度计


QQ截图20170719164710.png


陀螺仪是利用角动量能量守恒原理制造的仪器,当转子高速旋转时,转子具有定轴性(陀螺仪定轴性可观看文章尾部视频),转子旋转的轴线不会随陀螺仪框架的改变而改变,因此可以通过测量转轴(z轴)与常平架所确立的空间坐标系与陀螺仪相互垂直的框架所确立的坐标系各轴之间的夹角,来获取空间运动姿态,即下图所示的Roll(翻滚)、Pitch(俯仰)、Heading(朝向)三个维度的旋转角度。


微信图片_20170719164714.jpg

飞行姿态(注6)

陀螺仪可以检测角度的变化,但却不擅长检测线性加速度检测,比如上图的飞机,如果遇到上升或下降气流,但只要姿态相对地面保持水平,陀螺仪的读数就不发生变化(转子与框架的相对角度不变)。


这种变化可以通过加速度计进行测量。

微信图片_20170719164720.jpg

加速度计原理图(单轴)(注7)

图示为单轴的加速度检测计。按照牛顿的第二定律F=ma,检测质量m已知,弹簧形变与外力F正相关,而形变的数值可以通过输出电压获得,进而求出加速度a的数值。按照xyz相互垂直的关系,即可构建出3轴的加速度计。


与陀螺仪类似,加速度计也有自身的不足,不擅长检测物体的旋转运动。比如物体绕z轴旋转时,物体的加速度即所受的重力加速度,加速度方向指向地表,虽然物体在旋转,但加速度计读数无变化。

微信图片_20170719164725.gif

加速度计水平旋转,读数不变

(数值细小变化是手动旋转无法保持绝对水平所致)


陀螺仪擅长自身旋转运动的检测,不擅长线性运动检测,而加速度计却擅长线性运动检测,两者结合,优势互补,所以文章开头的各类消费电子都采用两者结合的检测芯片,比如MPU-6500。


得益于科技的进步,现在手机里的陀螺仪和加速度计都变成了MEMS(Micro Electromechanical System,微机电系统)了,比如电子陀螺仪:

微信图片_20170719164731.jpg


游戏控制原理解密

回到文章最开始的游戏原理,如果把手机与陀螺仪类比,那玩游戏时手机的倾斜正好与飞机的Roll、Pitch运动类似,自然陀螺仪可以完成游戏的操纵。


加速度计能否实现类似游戏控制呢?


用手机玩这类游戏时,手机的相对位置不会有太大变化,可以近似认为是在相同位置的倾斜变化,此时芯片检测到的加速度为静态加速度,与重力方向相同且大小一致,即xyz轴上的加速度的矢量和等于重力加速度

QQ截图20170719164751.png


所以当手机发生倾斜时,重力加速度在各轴上的加速度发生变化,且各轴上加速度数值大小与倾斜角度呈线性相关。于是我们可以借此计算出各轴的倾斜角度。


我们查看芯片数据手册中的说明,发现当x轴与重力加速度方向一致时,x轴方向上对应值为-1,相反时为1,可以得到单轴倾斜角度与加速度值之间的关系。以此类推可获取其他轴的倾斜角度,进而推出手机姿态。

微信图片_20170719164755.jpg

芯片水平与垂直状态下各轴加速度计读数(注8)


对于手机游戏而言,通常只需判定1至2轴加速度变化,比如《Labyrinth 2 HD》需要分析x和y轴上的加速度进而计算倾角,而《EA 真实赛车》只需判定x轴(或y轴,取决于芯片安装方向)即可,因为汽车只需要控制左转右转。


ADXL345加速度计

实践是检验真理的唯一标准,我们看下加速度计能否完成倾角检测。


所需元件

Arduino UNO  ×1     ADXL345        ×1  

 9g舵机            ×1      面包板             ×1    

杜邦线          若干


微信图片_20170719164803.jpg

连线图


看下运行效果:

微信图片_20170719164808.gif

加速度计倾角检测





陀螺仪定轴性(注9)

投稿邮箱:info@makerclass.cn
标签: Arduinotem
发表评论