2013-03-29 51 views
0

我正在嘗試使用加速度計讀數來瞬時計算關於初始位置的腿的角度。Android:僅使用加速度計確定傾斜角

當我接近這個時候,我決定我需要記錄一個平均的重力矢量並計算出我目前的讀數和那個之間的某個角度。

理論上看起來似乎是合理的:重力的讀數在腿的每個位置都是不同的,所以在靜止的位置讀數應該收斂到一個向量,我可以用它來找到腿的角位移,在開始時。但是,我嘗試了幾種組合:兩個矢量之間的角度只使用Z和Y分量(使用this);計算重力和電流之間的差異向量,並做atan2(dY,SQRT(dX^2 + dZ^2));計算atan2(dY,dz)...(其中dY和dZ分別是Y和Z分量的當前矢量和重力矢量的相減)

這些解決方案似乎都不工作,所以我想知道如果我可以做到這一點。

有沒有人有解決方案?

+0

只能用加速度計獲得傾斜角度。關於初始位置,您無法獲得「腿的角度」。後者需要陀螺儀或磁力計。 – Ali

+0

@ ravemir-你能找到解決方案嗎?我面臨同樣的問題。歡迎任何幫助。 – nia

+0

我發表論文已經有6個多月了,經過一段時間與Hoan討論後,我決定使用指南針指導並專注於完成剩餘的工作。但我有一個預感,我可以使用主成分分析(請參閱[我的論文]](https://fenix.tecnico.ulisboa.pt/publico/department/theses.do?thesisID=2353642465657&contentContextPath_PATH=/departamentos/dei/lateral/dissertacoes&method = showThesisDetails&selectedDepartmentUnitID = 1911260507896&locale = en_EN)參考文獻25和35)。這將是一個開始的好地方。隨意討論! :) – ravemir

回答

1

假設設備綁在屏幕上,屏幕朝向與用戶相同的方向,那麼您可以計算角度作爲屏幕表面與東北平面之間的角度。我只是在這裏給你這個想法,你必須做更多的工作才能知道角度是低於還是高於東北飛機。該角度可以計算爲

Math.acos(event.values[3]/norm of event.values[3]); 

因此,如果用戶站立,那麼角度將是90或-90,這取決於您的約定。當腿向上移動時,角度的絕對值將會減小。一條大腿平行於東北飛機,即屏幕平放並且腿向上移動,您將獲得與腿向下移動相同的角度,因此您需要使用更多信息來弄清楚。
如果屏幕與用戶的正面方向正交,則必須計算東北平面與正交於屏幕的平面之間的角度。我讓你解決這個問題,它可能是event.values 0 or 1上面的等式,具體取決於設備是縱向還是橫向。

+0

理論上看來似乎是合理的:重力的讀數在腿的每個位置都是不同的,所以在靜止的位置讀數應該收斂到我可以用來找到腿的角位移的矢量。你能詳細解釋爲什麼它不起作用嗎? – ravemir

+0

我不明白「讀重力」是什麼意思,你的意思是說它是z座標的值。因爲對我來說重力是重力,它近似爲9.8 –

+0

我的意思是,如果手機靜止,加速度計讀取重力值,沿着它的軸分佈。稍微傾斜手機也會提供重力讀數,但這次沿軸線分佈不同。通過這兩個值是否可以確定定位的變化? – ravemir