忍者ブログ
幅広く、浅く、ゆるく、気まぐれにが目標のブログ的なもの。
[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

396 2010 11 11 ジャイロセンサについて


タイトルはこうつけましたが、
最初の方は愚痴ですね
あとは役に立ちづらい情報
まあ、たたないだろうが
前回のうつな回より気分にはうつ
簡単に言えば、投げやりにおれなんて何の役にもたたないんだよ
ってな感じ
前回のうつ話の始まりは確か無力感から始まりましたが
今日は無力なのは充分承知だ
だが、役にたたない無駄だ
という感じかな
いや~
本当に最初は何にもならない愚痴ですよ
こんなところで一人で言ってもしょうがないとは思いますが
本当に何なんでしょう私
タイミングが相変わらずかなり悪く
やってもできない
そんな勝手な解釈も悪いのはわかっていますが、
それでも…
モチベーションが持たなくてもやらないことはないんですが
なんだかんだ理由をつけても
やったりやらなかったりと大変中途半端
明らかな無気力より
よりたちが悪い
集中力がないんですかね
本人にだけ問題がある
けして、誰かのせいではない
本人が悪い
でも諦めとやる気が折り混ざって中途半端
やるにはやるが
どうもだめ
皆さんが教えても大したことはできない
いや、何も理解できてない
だが、諦めないから
より訳が分からない
理解する気がないのに
やろうとする
意味をわかろうとしないのに
使おうとする
マジカルナンバー0?
それでもやる
諦める
どうにもならない 

私が完全にできるものなんてない 
誰にも誇れない
上辺の知識を知らない人にかすめるに限る
はぁ~
珍しくよし、これをやるぞと決めても
何らかの理由でちゃんとできることはない
と思うからこそ一つの簡単なつまずきで全てをこぼす
選択肢を間違え続ける
あてにならない
もっとちゃんとできるようにはなりたいのだけど… 

という感じで
後半です
いつの間にか大変重要な立ち位置になってしまった
ジャイロセンサです。
最初はやってみるか
と軽い感じで始めたはずが
自己位置推定においてなくてはならないものに
リアルワールドではオドメトリなんてずれるのだよ
あざ笑うかのよう
だいぶ重いものになってしまった
申し訳ない限りではあります。
障害物の検知と回避にはあまり関係はないのですが
自己位置を理解する上では必要不可欠なもの
自分の今の向きってかなり重要
方位センサを用いる手もありますが、
定番はこれ 

使用するのが
サイズは大きいが、素晴らしい精度の光ファイバージャイロではなく
小さいが技術の向上により精度が上がっている
振動型ジャイロ
軽し、小さいからね。
  最初に使っていたのが、ストロベリーリナックスに売ってた
"IMU 5 Degrees of Freedom"
三軸加速度と二軸ジャイロを搭載
ADXL335+IDG500
電源電圧:3.3V
これでいろいろ学んだんですよ。
赤い基板。
とりあえず、回路が駄目な私は周りに教えてもらいながら
SH7125でAD変換してその数値をシンプルタームでPCに表示
最初は加速度と角速度すらミスして何を表示しているかもわかっていない。
三軸の加速度と二軸のジャイロですから。
これはやっと把握
で、使うのは二軸のジャイロ
しかし、どうやらそのままでは使えない
ということがわかった。
グラフにすると全くの静止状態でもブレまくる
これではね・・・・。
これも教えてもらいながら、補正。
補正内容としては
=((現在の値*4)+(過去の値*6))/10
フィルタをかけて補正。
まあ、4とか6はヒューリスティックに決めた値だから、そのときに応じて変更
入力される電源電圧自体がぶれていた時はコンデンサをGNDとVCCの間に挟む。
接続自体がUSBならまあ、PCによるらしい。
今回の場合はUSBではなくRS232Cだけどね・・・。
一応これで多少の安定は保たれたかに見えたが

その前にAD変換はセンサの値をアナログからデジタルに変えるのだが、
変えた後の値はいきなり角速度が出るわけもなく
そのままでは使えないので計算
今回の場合はSH7125のについているAD変換器を使用。
だから分解能は10bit
電源電圧は3.3V
サンプリング周波数は10m
これを考慮して手計算
=(AD[V]-平均値[V])/(2^(10[bit])*19[m]/5[V])
  でよかったはず。
これで角速度がでる。
さらに使いたかったのは角度
簡易な積分
=[deg/sec]*割り込み時間
ででる。
これで安心と思ったら、 
ジャイロって温度でドリフトするんですね。 
ドリフト言うのは、角度が全くの静止状態でも
0で保てずに段々と動き続ける
さらに積分をしているため
積分誤差がたまり続ける。
これも大分迷惑。
これをなくすことにいろいろと悩んだんですよ。

最初に使ったのはあとからこの方法は大分マイナーだと知ったのですが
当時(数週間前)はこれならいけるのではと
かなり安易にとりあえずで、
プログラムに実装してみたんですよ。
内容としては
ADを加算して割って小数点を切り捨てたものと
ADを加算して割ったものを比較
ある決めた値より大きいか、小さいかを比較する
小数点を切り捨てたものの方が大きかった場合、
最小二乗法で近似した値をオフセットに
小さかった場合は
そのままの値をオフセットにする
このオフセットをADの値から引く
これをADの値として計算する。
ややこしい。
赤い基板の方ではまあまあ安定したんだけどね。
もっと簡単にした方がいい 
というか理論もわかってないのにつかなということで
もっと簡単な方法を試した

平滑化です。
より簡単にいうと平均化かな
値を何個かの平均の値を使用 
=AD-|(AD-平滑化値)|
でいいかな
こちらは試してない。
この平滑化の値は計算時に毎回変えるのではなく
最初にとってそのまま使い続ける。
これで数値をとれば、温度のドリフトはある程度防げるはず。
まだ、問題の積分誤差はあるのだけど。
こちらはただただ上がり続けるものなので 
こちら側も計算上で引き続ければいいはず。

まあ、ジャイロ側はこんな感じで 
他にいろいろあったのが、 
ジャイロセンサの値を受ける側がいろいろ変わった件について
私は回路については本当に駄目駄目なので
結果的には全てがだめだめでしたが・・・・
ともかく、マイコンも変化が
最初はSH7125の内部AD変換10bitだったが
分解能が足りないのではということで
PIC+外部AD変換16bit
これが私の最小二乗のプログラムを重すぎて使えなかった。
ということで
  SH+外部AD変換16bit
  まあ動いたには動いたのですが
前に言ったようにこのアルゴリズムでは使えない。
平滑化をつくっていたのですが
最終的にはRTミドルウェア上で動かすため
マイコンからのAD変換の値を受けるコンポーネントが必要に
私はこれでも作成しようと
かなり思考錯誤したのですが
環境作成時点でできてない・・・
間に合わない。
ということでできる先輩が作成
よって
PIC+外部AD変換に戻った。
どうやらPICで計算するのは重いらしく
計算はコンポーネントでしているよう。
平滑化も4つで行っているよう。
結果的に私は役立たず。
駄目だこりゃ。
さらに何もしてないのではまずかと
調整を任されたのですが
回路的に壊しましたよ。
はぁー
電子回路基礎をもっとべんきょうします。

ちなみにジャイロセンサの方も変わりました
赤い基板から 
1軸の高精度ジャイロに
まあ、壊したんだけどね。
コンポーネントについてもしっかりと学ばないと
やることはまだまだたくさんある
今のところは中途半端に役立たず。
では次回。
PR
コメントを投稿する

HN
タイトル
メールアドレス
URL
コメント
パスワード
カレンダー

12 2025/01 02
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア

最新CM

[06/05 ProrUnioroMut]
[05/07 Axonryunene]
[08/03 にゅん。]
[07/24 にゅん。]
[07/19 にゅん。]
最新TB

プロフィール

HN:
ねこう・へば~
性別:
男性
バーコード

ブログ内検索

カウンター

アクセス解析

お天気情報