PowerPoint 簡報

Download Report

Transcript PowerPoint 簡報

2010/10/01 陳宗隆
*上節課回顧再延續
*On-line即時資料計算
*特定時間資料抓取
*即時資料計算
*簡易計步器
*上節課回顧
*上節課學了一些東西,校正、讀寫COM port、 signal中
斷、程式封裝
*但顯示出來的數據到底有什麼用呢?
*光看X、Y、Z這些加速度的波形,一定看得眼花撩亂,
我們走一步對這些波形產生了什麼影響?
*平放的時候你可以清楚分辨你是對哪一軸作用,但任意
放置時,根本不知道我們對哪一軸作用
*我們必須去計算出對我們有用的數值再來做分析
* 1. G值
* 2. 運動時加速度的水平、垂直分量
*
* 程式練習-信號停止裝置(com_signal.cpp)
* com_signal.cpp資料停止後就能不再讀取了,更改一下條件,
可以再繼續讀取:
* 用signal的函式,當按視窗右上角的x時,可以讓Witilt V3停
止讀取並結束程式
* 而按下Ctrl+C可以停止資料輸出(但是繼續抓資料),再按一
次可以繼續輸出資料
* 用法極像halt,signal的用法很多種,可以自行發揮創意控制
sensor
* 參考程式碼請看com_time.cpp
* 第二種作法類似,不過是讓程式busy waiting,而不是去控制
要不要顯示
*
*程式練習-一整筆資料的抓取
*以Witilt V3為例,他的格式為X=1.023Y=0.222,
但以現在讀資料的方式,可能最後一行不會完
全讀完,所以等到每行都補齊了再進行計算較
為方便
*簡單的範例請看com_analyze.cpp
*
*程式練習-有效範圍抓取與地心引力的擷取
*測試各種靜止擺放方式
*參考即時資料計算的靜止平均計算
*目標:
1. 抓取sensor所給予的前200筆資料作運算
2. 濾掉前50筆資料,再抓200筆資料作運算
3. 比較前兩種情況所得的數據
*參考 com_g0.c
* g0.cpp
* Int invalid=0;
*
*
*物理意義:
*測量到的重力加速度的長度為 1
*長度為1,表示所受到的重力加速度是 1g
*實際測量:
*長度不一定為 1
*濾過的資料,誤差較小
*程式練習-角度旋轉計算(請自行練習)
*之前有利用gyro測試旋轉的角度,再把資料貼到
Excel,但是這樣無法了解旋轉的即時情況,所
以配合即時處理,將目前所測量到的角度顯示在
螢幕上
*Gyro測量出來的為角速度,每個週期為輸出頻
率的倒數(100Hz即1/100秒),亦即將每個角速
度乘時間週期,累加起來即為我們要的角度
*參考程式碼請看com_rotate.cpp
*程式練習-平滑
*用意:
*避免讓資料變動太大
*讓數據波動比較緩和,不會那麼劇烈
*想法:
*將最近幾筆資料作平均,讓變動變小
*效果:
*減少值的過大變動
*增加資料的可用性
*
*Key
*儲存過去X筆資料,做區域性平均
*想法:
*移去一筆過去的資料補進一筆新移入的資料
*算平均
原想法: (5筆做平均)
0,1,2,3,4 del 0,add 5
*目標:
-> 1,2,3,4,5 del 1,add 6
*觀察兩個輸出的csv檔 -> 2,3,4,5,6
*使用 com_g0_s.cpp
* G0_s.cpp
* Int Cnt=-1;
*
原想法:
0,1,2,3,4
-> 1,2,3,4,5
-> 2,3,4,5,6
(5筆做平均)
del 0,add 5
del 1,add 6
…
可以這樣做: (5筆做平均)
0,1,2,3,4 del 0,add 5
-> 5,1,2,3,4 del 1,add 6
-> 5,6,2,3,4 …
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
1
12
23
34
45
56
67
78
89
100
111
122
133
144
155
166
177
188
199
1
11
21
31
41
51
61
71
81
91
101
111
121
131
141
151
161
171
181
191
*
1.2
1
0.8
X 0.6
Y
-0.2
X
Z
Y
0.4
Z
0.2
0
*之前的背景知識和程式的撰寫,都是我們之後做計
步器時,可以選用的工具
*我們必須去計算出對我們有用的數值再來做分析
* 重力(G)向量
*運動時加速度的水平、垂直分量
ACC∥
ACC’⊥= ProjG ACC - G
G
ACC⊥= ProjG ACC
ACC
*計步器原理 :
*步行過程中,身體重心產生的上下震動,改變了
計步器所受到的重力加速度,這些加速度會形
成類似正弦波的震盪,再經由某些參數的判斷,
判斷是否為一步
*一般計步器通常會有一個震盪感應器,感測到
一定的震盪強度,就判斷為一步
* 對我們來說我們必須去分化出垂直跟水平分量,才能更清楚我
們在垂直或水平所做的移動。
* 將靜止G當作基底向量,把ACC投影到G求出垂直分量
(ACC⊥),再用向量減法ACC-ACC⊥等於水平分量
* 再由ACC⊥、 ACC∥ 長度平方去分析波形
* 投影公式:
 a b 
b b
b
F
-G
G
acc
 步驟:
1.
2.
3.
4.
acc
F
求出目前靜止時所受重力加速度值(G)
測量移動時(上圖代表水平移動)所受到加速度(acc)
算acc投影到G的投影向量
利用向量加減,算出前進向量(F)
 目標:

測量不同方向移動下的前進向量(靜止->移動->靜止)
 使用 com_move_s.c
*
 a b 
b b
b
*可以發現,走一步的數據中一定有一個max值
*有超過一個定值
*每個max之間一定有一段差距
*可以過一段時間再去判斷值的大小
*我們可以利用剛才所學到的垂直投影向量
*觀察投影向量實際的波形,找波形的特徵
*可利用波峰波谷,設計一個門檻值,再加上波谷與波
峰之間的時間間格,判斷是否為人走一步的波形
* 前置訓練讓初始門檻值更精確
* 動態門檻值設計
*傅立葉轉換…
*這只是計步器粗略的想法而已,有很多方向可以
去思考的, 之後就交給大家去設計一個計步器巴
*Thank you for listening