자이로스코프 API가 Froyo에도 들어있었습니다만, Gingerbread에는 정확히 명시되어 있네요.
자이로는 원래 3개 축에 대한 회전(각) 속도를 구하는게 목적이지만, 민감한 반응성을 이용하면 카메라와 연동해서 촬영시 손떨림 방지 기능을 구현해도 좋을것 같습니다. 봄에 출시할 오드로이드에도 자이로스코프를 탑재하려고 노력중입니다. ^.^
그런데 지자기 3축, 가속도 3축, 각속도 3축.... "드디어 9축 완성입니다"라고 좋아하기는 이릅니다.
기압계를 이용한 고도 측정이 추가되는 분위기 입니다.
아직은 정확도가 떨어지지만, 올 하반기에 출시되는 기압계는 오차 1미터 이하로 빌딩의 몇층에 있나까지 알 수 있어, 위치 기반 서비스(Where I am ?)에 활용된다고 합니다. 그럼 10축이 되겠죠.. ㅎㅎㅎ
아래 소스는 Gyroscope API 예제 입니다. 한번 읽어봐 두세요.
Sensor.TYPE_GYROSCOPE:
All values are in radians/second and measure the rate of rotation
around the X, Y and Z axis. The coordinate system is the same as is
used for the acceleration sensor. Rotation is positive in the counter-clockwise
direction. That is, an observer looking from some positive location on the x, y.
or z axis at a device positioned on the origin would report positive rotation
if the device appeared to be rotating counter clockwise. Note that this is the
standard mathematical definition of positive rotation and does not agree with the
definition of roll given earlier.
values[0]: Angular speed around the x-axis
values[1]: Angular speed around the y-axis
values[2]: Angular speed around the z-axis
Typically the output of the gyroscope is integrated over time to calculate
an angle, for example:
private
static
final
float
NS2S
=
1.0f
/
1000000000.0f
;
private
float
timestamp
;
public
void
onSensorChanged
(
SensorEvent
event
)
{
if
(
timestamp
!=
0
)
{
final
float
dT
=
(
event
.
timestamp
-
timestamp
)
*
NS2S
;
angle
[
0
]
+=
event
.
data
[
0
]
*
dT
;
angle
[
1
]
+=
event
.
data
[
1
]
*
dT
;
angle
[
2
]
+=
event
.
data
[
2
]
*
dT
;
}
timestamp
=
event
.
timestamp
;
}
In practice, the gyroscope noise and offset will introduce some errors which need
to be compensated for. This is usually done using the information from other
sensors, but is beyond the scope of this document.
추신: Degree 값이 아니고 Radian 값이므로 주의 하세요~