Android 가속도계 정확도 (관성 탐색)


109

나는 안드로이드 폰에 관성 내비게이션 시스템을 구현하는 방법을 찾고 있었는데, 가속도계의 정확도와 판독 값의 지속적인 변동을 감안할 때 어렵다는 것을 알고 있습니다.

우선 전화기를 평평한 표면에 놓고 X 및 Y 방향으로 1000 개의 가속도계 판독 값을 샘플링했습니다 (테이블과 평행하므로 중력이이 방향으로 작용하지 않음). 그런 다음 이러한 판독 값의 평균을 구하고이 값을 사용하여 전화기를 보정했습니다 (각 후속 판독 값에서이 값을 뺍니다).

그런 다음 다시 테이블에 놓고 X 및 Y 방향으로 5000 개의 가속도계 판독 값을 샘플링하여 시스템을 테스트했습니다. 보정이 주어지면 이러한 가속도는 각 방향에서 0 (대략)까지 더해져야합니다. 그러나 이것은 사실이 아니며 5000 회 이상의 총 가속도는 0에 가깝지 않습니다 (각 축에서 평균 약 10 회).

내 코드를 보지 않고 대답하기 어려울 수 있지만 더 일반적인 의미에서 ...

이것은 단순히 휴대폰 (HTC Desire S)에서 가속도계 판독 값이 얼마나 정확하지 않은지 보여주는 예입니까? 아니면 코딩에 오류가있을 가능성이 더 큽니까?


1
webvr-polyfill은 훌륭한 영감의 원천입니다. github.com/borismus/webvr-polyfill/tree/master/src 가속도계 데이터를 사용하여 VR 센서를 폴리 필하는 방법을보십시오 : github.com/borismus/webvr-polyfill/blob/master / SRC / ...
SC

답변:


128

선형 가속도를 두 번 통합하여 위치를 얻지 만 오류는 끔찍합니다. 실제로는 쓸모가 없습니다.

여기에 설명하는 이유 (구글 테크 토크) 에서 23시 20분는 . 이 비디오를 강력히 추천합니다.

문제를 일으키는 것은 가속도계 소음이 아니라 자이로 백색 소음 입니다. 6.2.3 오류 전파를 참조하십시오. (그런데 자이로 스코프도 필요합니다.)

실내 포지셔닝과 관련하여 다음이 유용하다는 것을 알았습니다.

Sigma-Point Kalman Smoothers를 사용한 RSSI 기반 실내 로컬라이제이션 및 추적

신발에 장착 된 관성 센서로 보행자 추적

단일 가속도계를 사용하여 보수계의 성능 향상

이 방법이 실제 응용 프로그램에서 어떻게 작동하는지 또는 멋진 Android 앱으로 전환하는 방법을 모릅니다.

비슷한 질문 있습니다.

최신 정보:

위의 Oliver J. Woodman, "관성 탐색에 대한 소개", 그의 박사 논문보다 더 새로운 버전이있는 것 같습니다.

실내 환경을위한 보행자 위치 파악


2
오래 전 일이라는 것을 알고 있지만 후속 질문이 있습니다. Android JB의 카메라에는 '파노라마'기능이있어 휴대 전화를 회전 하거나 한 축을 따라 선형으로 이동하여 파노라마 사진을 찍을 수 있습니다 . 이를 위해서는 전화기의 위치를 ​​상대적으로 정확하게 추적해야합니다.이 답변이 링크 된 비디오에 언급 된 20cm / s 오류보다 더 좋습니다. 어떻게하나요? 관성 추적의 품질을 향상시킬 수있는 방법이 있습니까? 아니면 영리한 이미지 처리를 사용하여 카메라 만 사용합니까?
Tom

1
@Tom 나는 후자를 믿는다, 전화는 순수하게 이미지 처리 알고리즘에 의해 사진을 함께 연결한다. 파노라마 사진을 만들기 위해 전화기가 위치를 추적해야한다고 생각하는 이유는 무엇입니까? 90 년대에는 일반 카메라로 가능했고, 당시에는 카메라에 가속도계가 없었습니다. :) 물론 사진은 일반 PC에서 연결되었습니다. 그러나 이에 대한 위치는 필요하지 않으며 이미지 처리 알고리즘으로 충분합니다. 도움이 되었기를 바랍니다.
알리

이전의 수작업으로 사진을 몇 장 찍고 나중에 꿰매는 작업과는 상당히 다릅니다. 어떻게 든 실시간으로 위치를 추적합니다. 설명하지 않고 설명하기는 조금 어렵습니다. 수동으로 사진을 찍을 필요가 없습니다. 휴대 전화가 다른 사진을 찍을 수있을만큼 멀리 이동했는지 결정합니다. 사진을 찍는 동안 하단에 파노라마 미리보기와 함께 작은 막대가 표시됩니다. 예를 들어 카메라를 너무 아래로 향하게하면 신호음이 울리고 위로 이동해야한다는 것을 알려주는 위쪽 화살표가 표시됩니다.

2
실제로는 이미지 처리를 사용하는 것 같습니다. 파노라마를 시작하고 카메라 앞에서 손을 흔들면 위치 추적 시스템이 상당히 혼동됩니다!

@Tom 좋아요. 나는 주로 이미지 처리를 사용한다고 생각하지만 (마지막 의견도 제안했듯이) 방향 추적과 결합 될 가능성이 높습니다 (위치는 아님).
Ali

19

나는 단지 큰 소리로 생각하고 있으며 아직 안드로이드 가속도계 API를 사용하지 않았으므로 저를 참아주십시오.

우선, 전통적으로 가속도계에서 내비게이션을 얻으려면 6 축 가속도계가 필요합니다. X, Y 및 Z의 가속도 필요하지만 회전 Xr, Yr 및 Zr도 필요합니다. 회전 데이터가 없으면 장치가 태도를 변경하지 않는다고 가정하지 않는 한 벡터를 설정하기에 충분한 데이터가 없습니다. 어쨌든 아무도 TOS를 읽지 않습니다.

아, 그리고 INS가 지구의 자전과 함께 표류한다는 것을 알고 있습니까? 그래서 그것도 있습니다. 한 시간 후 당신은 신비롭게 15 °의 경사를 우주로 올라가고 있습니다. 그것은 당신이 전화로는 아직 할 수없는 위치를 그렇게 오래 유지할 수있는 INS를 가지고 있다고 가정합니다.

내비게이션에 3 축 가속도계를 사용하더라도 가속도계를 활용하는 더 좋은 방법은 가능할 때마다 INS를 보정하기 위해 GPS에 연결하는 것입니다. GPS가 부족한 경우 INS는 훌륭하게 칭찬합니다. GPS는 나무에 너무 가까워서 3 블럭 떨어진 곳에서 갑자기 쏠 수 있습니다. INS는 훌륭하지는 않지만 적어도 유성에 맞지 않았다는 것을 알고 있습니다.

당신이 할 수있는 것은 전화 가속도계 데이터와 그 많은 것을 기록하는 것입니다. 몇 주 가치가 있습니다. 좋은 (정말 좋은) GPS 데이터와 비교하고 데이터 마이닝을 사용하여 가속도계 데이터와 알려진 GPS 데이터 간의 추세 상관 관계를 설정합니다. (프로 팁 : 좋은 지오메트리와 많은 위성이있는 날에 대해 GPS 연감을 확인하고 싶을 것입니다. 어떤 날에는 위성이 4 개 밖에 없을 수도 있고 충분하지 않을 수도 있습니다.) 휴대 전화를 주머니에 넣고 걷고 있으면 가속도계 데이터가 매우 구체적인 패턴을 기록합니다. 데이터 마이닝을 기반으로 해당 사용자와 함께 해당 장치에 대한 프로필을 설정하고 GPS 데이터가있을 때 패턴이 나타내는 속도의 종류를 설정합니다. 회전, 계단 오르기, 앉아있는 것을 감지 할 수 있어야합니다 (속도 시간 0으로 보정! ) 및 기타 다양한 작업. 전화기를 잡는 방법은 완전히 별도의 데이터 입력으로 취급되어야합니다. 데이터 마이닝에 사용되는 신경망 냄새가납니다. 즉, 입력이 의미하는 바를 모르는 것입니다. 알고리즘은 패턴의 경향 만 찾고 INS의 실제 측정에는주의를 기울이지 않습니다. 그것이 아는 것은historically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now.그리고 그에 따라 조각이 앞으로 이동합니다. 주머니에 휴대 전화를 넣는 것만으로도 4 가지 방향 중 하나로, 주머니를 바꾸면 8 가지 방향 중 하나가 될 수 있기 때문에 완전히 눈이 보이지 않는 것이 중요합니다. 휴대 전화를 잡는 방법도 여러 가지가 있습니다. 우리는 여기서 많은 데이터를 이야기하고 있습니다.

당신은 분명히 여전히 많은 드리프트를 가지고있을 것이지만, 장치가 당신이 걷는 것을 멈췄을 때를 알 수 있고 위치 드리프트가 영속적이지 않을 것이기 때문에 당신이이 방법으로 더 나은 행운을 누릴 것이라고 생각합니다. 과거 데이터를 기반으로 당신이 가만히 서 있다는 것을 압니다. 기존 INS 시스템에는이 기능이 없습니다. 드리프트는 향후 모든 측정 및 화합물에 기하 급수적으로 지속됩니다. 경건하지 않은 정확성 또는 정기적으로 확인하는 보조 탐색 기능은 기존 INS에서 절대적으로 중요합니다.

각 장치와 각 개인은 자신의 프로필을 가져야합니다. 그것은 많은 데이터와 많은 계산입니다. 모든 사람은 다른 속도로, 다른 단계로 걷고, 휴대폰을 다른 주머니에 넣는 등의 작업을 수행합니다. 실제 세계에서이를 구현하려면 서버 측에서 처리하기 위해 번호 처리가 필요합니다.

초기 기준선에 GPS를 사용했다면 GPS가 시간이 지남에 따라 자체적으로 마이그레이션하는 경향이 있지만 영구적이지 않은 오류가 있습니다. 한 위치에 수신기를 앉아 데이터를 기록합니다. WAAS 수정이없는 경우 100 피트 주변의 임의 방향으로 표류하는 위치 수정을 쉽게 얻을 수 있습니다. WAAS를 사용하면 6 피트까지 내려갈 수 있습니다. 최소한 ANN의 알고리즘을 낮추기 위해 배낭에 서브 미터 RTK 시스템을 사용하면 실제로 더 나은 운을 얻을 수 있습니다.

내 방법을 사용하면 INS와 함께 각도 드리프트가 계속됩니다. 이것은 문제입니다. 하지만 지금까지 n 명의 사용자에게 몇 주 동안 GPS 및 INS 데이터를 쏟아 부을 수있는 ANN을 구축하고 실제로이 시점까지 작동하게했다면 지금까지 빅 데이터를 신경 쓰지 않아도됩니다. 그 길을 계속 따라 가면서 더 많은 데이터를 사용하여 각도 드리프트를 해결하십시오. 사람은 습관의 생물입니다. 우리는 보도, 문을 통과하거나, 계단을 오르는 것과 같은 일을 거의하고, 고속도로를 가로 지르거나, 벽을 통과하거나, 발코니를 벗어나는 것과 같은 미친 짓을하지 않습니다.

따라서 Big Brother에서 페이지를 가져 와서 사람들이가는 곳에 대한 데이터 저장을 시작한다고 가정 해 보겠습니다. 사람들이 걸을 것으로 예상되는 위치를 매핑 할 수 있습니다. 사용자가 계단을 오르기 시작하면 이전 사람이 걸어온 것과 같은 계단 바닥에있을 것입니다. 1000 번의 반복과 최소 제곱 조정 후 데이터베이스는 해당 계단의 위치를 ​​매우 정확하게 알고 있습니다. 이제 사람이 걷기 시작할 때 각도 드리프트와 위치를 수정할 수 있습니다. 그녀가 그 계단을 치거나 복도를 내리거나 보도를 따라 내려갈 때 어떤 표류도 바로 잡을 수 있습니다. 데이터베이스에는 사람이 걸어 갈 가능성 또는이 사용자가 과거에 걸어 왔을 가능성에 따라 가중치가 부여 된 섹터가 포함됩니다. 공간 데이터베이스는이를 위해 최적화되어 있습니다.divide and conquer의미있는 섹터 만 할당합니다. 레이저가 장착 된 로봇이 검은 색 이미지로 시작하여 모든 벽이있는 곳을 밝게 비추면서 메모리에 미로를 칠하는 MIT 프로젝트와 비슷합니다.

트래픽이 많은 지역은 더 높은 가중치를 받고 아무도없는 지역은 가중치가 0입니다. 교통량이 많을수록 해상도가 높습니다. 본질적으로 모든 사람이 있었던 모든 곳의지도를 만들어 예측 모델로 사용할 수 있습니다.

이 방법을 사용하여 사람이 극장에서 어떤 좌석을 차지했는지 결정할 수 있다면 놀라지 않을 것입니다. 극장에가는 사용자가 충분하고 해상도가 충분하다면 극장의 각 행과 각 행의 너비를 매핑하는 데이터가있을 것입니다. 더 많은 사람들이 한 위치를 방문할수록 그 사람의 위치를 ​​예측할 수있는 정확도가 높아집니다.

또한, 이런 종류의 연구에 관심이 있다면 GPS World 잡지를 (무료) 구독하는 것이 좋습니다. 매월 나는 그것으로 괴짜.


"가능할 때마다 INS를 보정하기 위해 GPS에 연결해야합니다. GPS가 부족한 경우 INS는 훌륭하게 칭찬합니다."이것이 내가 이해하는대로 Kalman 필터링의 목적입니다. 그것은 상대방의 약점을 상쇄하기 위해 각 방법의 장점을 결합
endolith

8

단위를 포함하는 것을 잊었 기 때문에 오프셋이 얼마나 큰지 잘 모르겠습니다. ( "각 축에서 약 10 개"는별로 말하지 않습니다. : P) 그렇긴하지만 하드웨어의 부정확성 때문일 가능성이 높습니다.

가속도계는 중력에 대한 휴대 전화의 방향을 결정하거나 제스처 (휴대 전화를 흔들거나 부딪히는 등) 감지와 같은 작업에 적합합니다.

그러나 가속도계를 사용하여 추측 항법을 시도하면 많은 복합 오류가 발생합니다. 가속도계는 그렇지 않으면 엄청나게 정확해야하며 이것은 일반적인 사용 사례가 아니므로 하드웨어 제조업체가이를 최적화하고 있지는 않습니다.


답변 해주셔서 감사합니다. 가속도계는 고정되어있을 때 X 축과 Y 축 모두에서 약 -0.8ms ^ -2를 읽으므로 이것을 오프셋으로 사용했습니다. "약 10"비트는 센서에서 단일 축에 대한 각 가속도를 합산하여 5000 회 이상 반복하여 총 0ms ^ -2가되지 않았 음을 의미합니다 (오프셋 위아래로 균등하게 변동하는 경우와 같음). 값), 대신 한 방향으로 가속도를 더 많이 등록하는 경향이 있었는데, 위치를 찾기 위해 이중 통합 한 후 휴대폰이 1 분에 3m를 이동하는 것처럼 작동했습니다.
woodstock365

항공 항법 용어 "데드 레커닝"사용에 +1. 추측 항법은 INS보다 카메라로 탐색하는 데 더 적절하게 적용됩니다.
RyanJMcGowan

7

Android 가속도계는 디지털이며 동일한 수의 '버킷'을 사용하여 가속도를 샘플링합니다. 버킷이 256 개이고 가속도계가 -2g에서 + 2g까지 감지 할 수 있다고 가정 해 보겠습니다. 즉, 출력이 이러한 "버킷"측면에서 양자화되고 일부 값 집합을 뛰어 넘을 것입니다.

Android 가속도계를 보정하려면 1000 개 이상의 포인트를 샘플링하고 가속도계가 변동하는 "모드"를 찾아야합니다. 그런 다음 출력이 얼마나 변동하는지에 따라 디지털 포인트 수를 찾아 필터링에 사용합니다.

모드와 +/- 변동을 얻으면 Kalman 필터링을 권장합니다.


1
교정 방법을 찾고있었습니다. 귀하의 제안이 필요한 것 같습니다. 확인 만하면됩니다. 모드를 찾으면 0.5라고 말합니다. "그런 다음 출력 변동 정도에 따라 디지털 포인트 수를 찾아 필터링에 사용하십시오."라는 메시지를받지 못했습니다. 좀 더 자세히 설명해 주시겠습니까?
Nazerke 2013 년

1
가속도계에 256 개의 출력 포인트가 있고 판독 값 사이에 0.015m / s ^ 2 씩 변동한다고 가정 해 보겠습니다. 장치를 테이블 위에 놓으면 출력이 0.015m / s ^ 2의 배수로 변동될 수 있습니다. 0 +/- (X * 0.015)의 판독 값을 얻었다 고 가정 해 보겠습니다. X (짝수)를 찾아야합니다. 예를 들어 내 X는 3 일 수 있습니다.이 경우 0.045 m / s ^ 2 미만인 가속도계 판독 값의 변화를 무시합니다.
Alex Stone

그래서 안드로이드 폰 가속도계는 아직 그다지 좋지 않습니다 .. 맞습니까?
Techsin 2013

4

나는 이것이 꽤 오래되었다는 것을 알고 있지만 당면한 문제는 주어진 답변에서 다루지 않습니다.

당신이보고있는 것은 중력의 영향을 포함한 장치의 선형 가속도입니다. 휴대 전화를 평평한 표면에 놓으면 센서가 중력으로 인한 가속도를보고 9.80665 m/s2하므로 현재보고있는 10을 제공합니다. 센서는 부정확하지만 정확하지 않습니다! 유용한 링크와 센서에 대한 정보는 여기 를 참조 하십시오 .


17
아니오-질문을 잘못 읽은 것 같습니다. "... X 및 Y 방향 판독 (테이블과 평행하므로이 방향으로 중력이 작용하지 않음)". 9.8 / s2는 Z 축에 있습니다.
teapot7 2013 년

0

X 및 Y 방향의 가속도계 판독 값 (이 경우 전적으로 하드웨어 노이즈)이 평균 주위에 정규 분포를 형성한다고 가정합니다. 분명히 그렇지 않습니다.

시도 할 수있는 한 가지 방법은 이러한 값을 그래프에 표시하고 패턴이 나타나는지 확인하는 것입니다. 그렇지 않은 경우 소음은 통계적으로 무작위이며 적어도 특정 전화 하드웨어에 대해 보정 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.