スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DC成分の分離

今週末はジャイロや加速度センサの静止ドリフトをハイパスフィルタでカットすることを考える.
これは回路的にコンデンサを直列に入れる等でも実現できるが,実際やってみると過渡応答が出たりしてあまりパッとしなかった.
そこでソフトで処理すべく,新しいdsPIC33F64GP802(RAM16kByte品)を目一杯使う.

ジャイロの静止ドリフトの追跡,除去には不感帯ハイパスフィルタが向いている.(一定レンジ以下の信号をノイズ+ドリフト成分として分離)
移動平均とばらつき±σの帯(ボリンジャーバンド)を使ってジャイロドリフトを追跡する.


上記のグラフような感じで,十分ゆっくりとした移動平均をドリフト推定値として追跡し,データ分散がXσの帯を外れたら動的信号として積分処理へ回す.
帯の中の信号は積分せずに強制0とすることで,時間経過による静止ドリフトはXσの確率以下でほぼ0になる.
帯の幅と移動平均の周波数を調整することで,時間と共にセンサノイズの分散が変化した場合でも安定したドリフトの追跡が可能となる.

これまでのアルゴリズムをまとめると,
静的なドリフトはこの方法で追跡しつつ,積分絶対値は加速度と地磁気で補正する.
動的なドリフトは温度係数や静止ドリフトを延長した推定で補正する.

これまでの成果として姿勢の取得はだいぶ安定してきた.
なので今後はこれをPCB化しておもしろいアプリを作って行きたい.
スポンサーサイト

マイコンへの実装など

今日はマイコン.
dsPICにIMUのプログラムを移植して動作確認を行う.
多少の最適化を行って座標変換と積分周期は2.5msecとなった.
デジタルフィルタを9本同時に使うためRAM容量が足りずもっとRAMの多いバージョンを注文した.

ついでに絶対座標での加速度を2回積分して位置情報を取ってみたが,まったく使えないことが分かった.
いろいろフィルタを通してみるも参考値にもならない発散ぶり.ちょっとがっかり・・・.

資料整理

今日はIMU座標変換の資料などを忘れないうちにいったん整理する.

ちなみに今回の姿勢算出はすべてZXY型オイラー角を使用しているため,ピッチ角が90deg近辺で精度がイマイチである.
ジンバルロックを回避するには四元数を使うか,オイラー角をどこかで切り替えて使うと良い.
NECトーキンの3Dモーションセンサではオイラー角を2種類切り替えて使用して精度を保っている.(最近,通販が無くなってる?)

実際には静止角と動作角をうまくブレンドするところにもポイントがあるが,このあたりも資料にまとめていきたい.

地磁気による方位算出

ジャイロ,加速度,地磁気を統合処理するために新しい6軸ボードを稼働させる.

$350以上するボードだが,なにやらジャイロのアウトプットが変だ.2個あるIDG-300のゼロ点出力が酷くばらついていて,ドリフトがものすごく大きい軸がある.
前回のボードにも同じチップが載っていたが,特段おかしな挙動はしていなかった.
メーカーの実装ミスかと思い,拡大鏡でハンダ部分を見てみるも不良は見つからない.
パターンの導通も正常.ボードの不良ではないとしたらデバイスがいかれている?いやいや,そんなハズは・・・
しかし,sparkfun社のForumをのぞいてみると,同じようなトラブルではまっている人がたくさんいることに気付いた.
どうやらIDG-300は当たり外れのあるチップのようだ.

気を取り直して,とりあえず地磁気センサの動作チェックを行う.

座標変換はロール角,ピッチ角をジャイロか加速度センサで求めておき,残りのヨー角のみを3軸地磁気ベクトルのXY偏角から計算することにした.
地磁気は精度が悪いと思っていたが,意外に応答性も分解能もソコソコ良い.ただし,Vブロックを数cmまで近づけると,あさっての方向を指した.近くに鉄や磁気源があるとダメだ.

現在,座標計算はすべてPC側でやっている.
今後はこれをマイコンに移植してIMUユニットとして簡単に使えるようにしておきたい.

3軸地磁気センサ

今日はヨー軸補正用の3軸地磁気センサを試す.
使用しているのはHoneywel社MR型センサ.センサ自体には単純な抵抗4つの平衡ブリッジが載っているだけで,磁気入力があるとみかけの抵抗値バランスが崩れ電圧が出力されるという原理らしい.sparkfunの評価基板には100倍の簡易アンプが付いている.
とりあえず動作はO.Kだった.
センサ性能としては50Hzで0.12uTの分解能と書いてある.
地磁気の実測値は水平面で一回転させたときにレンジで88uTだったのでこの数値からすると分解能は0.5deg程度だ.

座標変換がちょっとややこしい.
3軸の地磁気ベクトルは地球の磁北を指すわけだが,これが水平ではなく地面の中を指すのである.
となるとリファレンス取りには測定点の緯度なんかも考慮しないといけないのだろうか?
それともとりあえず水平方位だけ出せれば良い場合には,もっと簡単に算出できるのだろうか?
もうちょっと探っていこうと思う.

ジャイロ2個で精度UP

今日はジャイロを2個使ってドリフトを相殺するアイデアを試す.

このように向かい合わせに配置したセンサ同士を熱伝導性ゲルでくっつける.
2個のセンサチップで温度特性や外乱に対する挙動が同じであれば,差を取ることで誤差はキャンセルされるはずだ.(角速度信号は反転しているので2倍になって出力される.)
2つのセンサが同じ温度になった状態からスタートして,100秒間の静止ドリフトを取ってみると下記のようになった.

単一のジャイロでは同じ方向にドリフトが進行するが,差動合成された信号の積算値はほぼゼロで安定していることが分かる.
いろいろな条件でテスト中だが,ゼロ点安定性の向上にかなりの効果がありそうだ.
1軸に2個のセンサをー使うのでコストはかかるが,このような手でも精度UPが可能なことがわかった.

サンプリングレートUP

今日はDSPの特性を生かすべくサンプリングを高速化してS/N比が向上するか試す.
結果はセンサによってはかなり向上することがわかった.

高周波側のノイズが強い場合はできるだけ高いサンプリングレートにしたほうが遅延が少なく高いノイズカット性能が得られることがわかった.
また,ジャイロの積分ドリフト量としてもLPF最適化で約20%減少することがわかった.

DSPの処理時間はきわめて高速(64tapでも10usec程度)なので,複数の信号を同時にフィルタリングする場合もかなりサンプリング周波数が上げられる.ソフトウェアの移動平均ではこうは行かない.

今日はDSPのすごさが身にしみた一日だった.

デジタルフィルタのテスト

今日はdsPICのフィルタサブルーチンを試す.
これまでまったく使ってこなかったDSP機能を,microchipのデジタルフィルタデザインツール(ライト版は$30)を購入してサクッと試す.

わずか$30のソフトだが,IIRフィルタ,64TapまでのFIRフィルタでローパス,ハイパス,バンドパスフィルタを設計することができる.
(フィルタの設計といっても,難しい式なんかは一切必要ない!欲しい領域と阻止領域を数値で打ち込むだけである!)
ツールがCコードを自動生成してくれるので,MPLABで再コンパイルして実行すれば即座にフィルタの特性を変更することができる.
あまりのレスポンスの良さに衝撃を受けた.

まずはジャイロ信号にLPFをかけながらパラメータをいじり,デジタルフィルタに慣れる.
IIRフィルタは数Tapで構成される自己回帰型フィルタ.

少ない処理で急峻な降下特性が得られるが,オーバシュートが出やすい.
また,なにやらカクカクした動きをすることがあり,静止→動く→静止となった場合にゼロ静定せずにオフセットが残留したり,振動モードになるなどちょっと扱い辛い一面もあることがわかった.

FIRフィルタは特性の善し悪しがTap数に比例する.

移動平均もこのFIRフィルタの一種である.係数がすべて1の移動平均に対して,うまく調整したFIRフィルタでは高周波特性がいくぶん良くなる(原信号が鈍らずに通る)ことがわかった.

このジャイロではサンプリング1kHz時に20Tap,50Hz程度で時間遅れ10msec程度がベストのバランスのようだ.平滑化後のノイズ幅が1~2bit程度になるので,今使っているdsPICのA/D分解能(12bit)もちょうど良いかんじ.
dsPICのDSP機能にはこのフィルタ機能以外にもベクトル演算,行列演算もサポートしてる.逆行列や転置行列もDSPで計算してくれるみたい.いやはや数百円のコントローラとは思えないデラックスさだ.

ドリフトの補正うまくいかず

今週末は引き続きジャイロのドリフト補正をいろいろ試行錯誤する.
まずはカルマンフィルタで入力を温度,出力をゼロ点からの角速度ドリフト量として補正を行ってみる.
しかし,結果がイマイチ芳しくない.
ノイズの分散値をいろいろいじって見るも,移動平均での補正と大差ない結果で,最尤推定の効果が薄い.どうもシステムダイナミクス自体に誤差がある模様.
 調べてみると,一定値と置いている補正係数(温度/角速度)も周囲温度が変わるとかなり変化していることが分かった.
(試しに 100sec間 何もせずに放置(上)
途中でセンサにハンダごての小手先を近づけてムリヤリ温度を変化させた(下)場合.)

周りの気温が急激に変化すると,温度と角速度の比がオフセットしてしまい補正が効かなくなる.結果,積分ドリフトが急激に増加するようだ.
つまり補正値一定ではダメで,補正値を何かで補正しないといけない.あるいはセンサを恒温槽にでもいれて外気温の変動を減らすとかしなければならない.

うーん,ここまでが限界なのか・・・
プロフィール

もやね

Author:もやね
長野県在住の会社員(メカニカル・エンジニア).
ロボットは完全な趣味としてやってます.
E-mail:
mo_ya_ne[a]yahoo.co.jp
[a]⇒@

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
FC2カウンター
ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。