PC側でデータを受け取るプログラムは、csv形式のデータをディスクに落とすように作って あります。このページのグラフはその様にしてPCに取り込んだデータを表計算ソフトで グラフ化したものです。
データのサンプリング周波数は、そもそもRCジャイロがRCサーボ用のPWMパルスを 入力信号とし、同じ周波数のPWMパルスを出力してくるので、成り行きでRCサーボの PWMパルスの周波数と同じ50Hzとなっています。
下の測定例は足のスリップを抑えた歩行モーションのものです。 (約6秒強の時間サンプリングしてプロットしてあることになります。)
加速度測定サンプル
角速度測定サンプル
転倒時のログ
ピッチ軸方向の角速度が「 PG03 ch1(pitch)」、前後方向の加速度が「ADXL ch0(X)」そして ピッチ軸方向の角速度の積分値(角度)が「sum(pitch)」です。以下のように読みました。
転倒判定については、「状態の継続」の判定を確実にするのはプログラムが面倒なので、加速度 センサの出力値を ローパスフィルタの式に通して、その結果についてある瞬間の値が一定以上である ことを以って「転倒」としました。ちなみに関連する辺りのソースはこんな感じです。 フィルタについては一時学生の頃凝っていた様なおぼろげな記憶が有るのですが、ほとんど、 容易に思い出せそうも無いほど忘れているのがちょっと悲しかったです。
adxl_gain = (float)0.2; /*ADXL202の読み取り*/ if(switches.adxl_on == 1 && fall_over == 0) { read_adxl(&sio); /*ローパスフィルタ処理*/ for(i = 0; i < 2; i++) { adxl_data_f[i] = adxl_data_f[i] + ((float)sio.adxl_data_s[i] - adxl_data_f[i]) * adxl_gain; /*転倒判定*/ if(adxl_data_f[i] < - 300.0 || adxl_data_f[i] > 300.0) { fall_over = 1; } } if(fall_over == 1) { action.sequ_count = 0; action.count = 0; } }
このグラフで縦軸の18000は、約90度 に相当するので、プログラムで、例えば90度旋回したいときは「積分値が18000を超えたら 旋回モーション停止」等とします。
このグラフでは約3歩で90度左旋回しています。少し下に下がっている部分は、脚を踏み出 すときに接地脚がスリップして、右に進路がぶれている状態に対応しています。