http://blog.csdn.net/lijing_hi/article/details/7252954#
首先我们来看看陀螺仪传感器和加速度传感器都是用来做什么的。
陀螺仪芯片
陀螺仪传感器最终输出的是什么样的数据呢?是运动轨迹。
而加速度传感器输出的又是什么样数据呢?是角度。
有了这两个作为基础,接下来我们来看看,为什么会把陀螺仪跟角度联系到一起呢?
航空模型爱好者,应该对陀螺仪的实际应用都不感到陌生。在这类飞行器中,陀螺仪的作用正是用来修正飞行器的姿态(角度)的。那么在飞行器中,为什么用陀螺仪来做姿态控制,而不直接用能输出角度的加速度传感器呢?
飞行器在空中是个不稳定的平台,一个很微小的角度倾斜都可以造成运动轨迹的大幅度偏差。如果我们只用可以直接获取角度的加速度传感器来做姿态控制,将很难对飞行器的姿态做出快速准确的修正。陀螺仪获取的运动轨迹数据可以更灵敏、更准确地反应飞行器的运动轨迹,通过运动轨迹来调整飞行器的姿态状况将比直接获取角度更加有效。所以在飞行器上通常使用陀螺仪的数据来修正飞行器的姿态(各个轴的角度),同时也可以混合加速度传感器的数据来做进一步的修正。在实际飞行姿态控制中还涉及到很多相关的算法,这里就不进一步展开了。
这就是大家容易对陀螺仪跟角度产生联系的原因之一。在飞行器的控制中确实在用陀螺仪的数据来修正飞行器的姿态(角度)。但是实际上在iPhone 4中陀螺仪的作用是不同的。
当我们手中拿iPhone 4玩各种需要控制iPhone姿态的游戏时,iPhone虽然往各个方向倾斜,但iPhone 4本身并没有轨迹运动。那么陀螺仪此时能输出什么数据呢?能否用来修正倾斜角度精确性的答案也就出来了。通过iPhone姿态本身来控制的游戏不会因为陀螺仪的加入而带来倾角精度的提升,因为陀螺仪在这种条件下没有办法输出可以用于修正倾斜的数据。
难道iPhone 4上加入的陀螺仪就没有作用了吗?当然不是,三轴陀螺仪的加入将大大丰富iPhone 4上的软件应用,我们已经知道陀螺仪可以给我们带来运动轨迹的数据,可以想象,将来操控iPhone 4的方式将大大得以扩展,未来当你看到手拿iPhone 4,又跑,又跳的人群时不要感到惊讶,这些都是来自陀螺仪带来的扩展。
3轴陀螺仪在iPhone4中的应用畅想
1.导航功能加强,再也不用担心过隧道时GPS信号丢失,陀螺仪可以在GPS信号丢失时提供临时的运动轨迹。
2.各类丰富的体感游戏,也许以后玩iPhone4的游戏都不能只是坐着就搞定一切了。玩iPhone4游戏可以帮助你将减肥的理想变成现实。
方向感應器(accelerometer)是藉由感應某個方向的慣性力大小來衡量其加速度與重力。iOS 裝置內的方向感應器是一個三軸的方向感應器,表示它可以偵測三度空間中的移動或重力。因此讀者可以利用方向感應器得知裝置目前被握持的方式(像是自動旋轉功能),也可以得知它是否是平放在桌上,甚至可以知道是正面朝上還是正面朝下。
unity3d iphone 重力感应控制
方案一:speed
public var simulateAccelerometer:boolean = false; var speed = 10.0;function Update () { var dir : Vector3 = Vector3.zero; if (simulateAccelerometer) { dir.x = Input.GetAxis("Horizontal"); dir.y = Input.GetAxis("Vertical"); } else { dir.x = Input.acceleration.x; dir.y = Input.acceleration.y; // clamp acceleration vector to unit sphere if (dir.sqrMagnitude > 1) dir.Normalize(); // Make it move 10 meters per second instead of 10 meters per frame... } dir *= Time.deltaTime; // Move object transform.Translate (dir * speed); }
也可以把速度换成力
方案二:Force
public var force:float = 1.0; public var simulateAccelerometer:boolean = false; function FixedUpdate () { var dir : Vector3 = Vector3.zero; if (simulateAccelerometer) { // using joystick input instead of iPhone accelerometer dir.x = Input.GetAxis("Horizontal"); dir.y = Input.GetAxis("Vertical"); } else { // we assume that device is held parallel to the ground // and Home button is in the right hand // remap device acceleration axis to game coordinates // 1) XY plane of the device is mapped onto XZ plane // 2) rotated 90 degrees around Y axis dir.x = Input.acceleration.y; dir.y = Input.acceleration.x; // clamp acceleration vector to unit sphere if (dir.sqrMagnitude > 1) dir.Normalize(); } rigidbody.AddForce(dir * force); }
http://cl314413.blog.163.com/blog/static/1905079762012101873818275/