作者mantour (朱子)
看板Physics
標題Re: [問題] 如何用accelerometer計算移動距離
時間Sat May 8 22:20:07 2010
※ 引述《kewang (617公車)》之銘言:
: ※ 引述《kewang (617公車)》之銘言:
: : 我查了很多資料,大約有下列幾種算法
: : 1. Inertial navigation system:看了wikipedia後,還是找不到相關的計算公式
: : 2. d = ∫∫a dt:看起來是一個很合理的公式,可是我要如何去定義這兩次積分的上下
: : 限呢,因為a會一直變,所以t要怎麼定義會比較好?
: : 3. d = V0*t + 0.5*a*t^2:跟上面第2點差不多的問題
: : --
: : ◆ From: 118.167.141.66
: : → iidkasr:如果可以精確的定義兩個時間點 在這段時間內的d都能求吧 05/07 22:58
: : 推 ckaha:如果加速度器夠準 兩次積分是沒問題 但MEMS的精準度... 05/08 10:33
: : → ckaha:其實一次積分就已經讓速度會有一個定量的偏移了 05/08 10:34
: 我今天把程式實作出來了,但是數據一直不正確
: distance = 0
: startTime = Time.Now()
: while
: startTime = endTime
: endTime = Time.Now()
: distance += 0.5 * x * (endTime / 10E9 - startTime / 10E9)^2 * 100
: loop
這明顯錯了呀,你的速度沒有隨時間增加
我不知道你用的是什麼language,假定你的x是量到的加速度
應該最少要改成類似這樣
distance = 0
velocity = 0
startTime = Time.Now()
while
startTime = endTime
endTime = Time.Now()
distance += ( velocity*(endTime / 10E9 - startTime / 10E9) +
0.5 * x * (endTime / 10E9 - startTime / 10E9)^2 * 100 )
velocity += (endTime / 10E9 - startTime / 10E9)*x*100
loop
: 我猜主要是t的這個算法,還有startTime跟endTime的取值方式好像有問題,所以算出來
: 非常奇怪。(Time的單位為ns)
: 不知道有板友可以幫忙看一下我的公式是否有誤,感恩
: 另外,上面說的積分公式,我還是不清楚要怎麼取值,有板友也可以幫忙一下嗎??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.57.65.131
推 kewang:沒錯沒錯,我忘了把V0*t加上去了,因為我誤以為初始速度為0 05/08 22:24
→ kewang:之後的速度也為0,物理真的應該重修才對 囧rz 05/08 22:24