January 01, 2009謹賀新年 2009
[Timely]
明けましておめでとうございます。今年もよろしくお願いします。
過去の年賀絵柄の探索は昨年の記事『謹賀新年 2008』から辿れます。 ところで年明け早々ですが、GPS的大イベントがあります。日本時間で8時59分60秒が挿入されますので、世界標準時をGPS時刻に変換するgpstime.rbは更新しておきました(笑)。 January 05, 2009RedMineの導入等
[Computer]
正月ということで集中的にやりためたことをやってみました。忘れっぽいので何をしたか、備忘録として箇条書きを残しておこうと思います。 (1) Ruby(Rails)で動くプロジェクト管理ツール Redmineを導入してみました。 (2) 携帯用メールゲートウェイの導入 (3) Foneraが相変わらずつながらない January 14, 2009車輪の再発明、もといmatrix.hの更新
[Computer]
行列演算を使うことが多いため、勉強がてら自作のC++行列ライブラリ matrix.hを作っています。このたびUnscented Kalman Filterを実装する必要があり(kalman.h)、そこで使う行列のsqrt(平方根)を取れるようにしましたので、お知らせしておこうと思います。いわゆる『車輪の再発明』ですが、プログラムを常に書いていないと忘れてしまう体質なので、リハビリの一環ということで自己満足しています。 自作ライブラリということで怪しさ満点なのですが、たとえエラー処理がへたれていても(笑)、計算の正しさは確保したいので、検証を行いました。方法は以前の記事『SWIGによる行列/複素数 C++ライブラリのRubyへの移植』と同じで、SWIGでラップ、Rubyからライブラリを呼び出せるようにして、RubyのMatrixライブラリによる計算と比較を行ってみました。FenrirMathTest.rbがテストケースですが、今回追加したsqrtを含めて全てクリアしているようです。コンパイル方法などは、前述の記事をご参考にしてください。 この検証作業をするにあたって、はじめ何も考えず適当にラッパー生成ジェネレータSWIGに通したところ、コンパイルエラーがでました。行列の成分が複素数の場合(Matrix<Complex<FloatT> >)に、固有値を求めるeigenや平方根を求めるsqrtで文句を言われます。しかしSWIGは賢く、関数のラッピング禁止(%ignoreというキーワードで指定できます)をテンプレートの特殊化においても正しく理解してくれるので、%extend Matrix<Complex<FloatT> > { %ignore eigen; }で華麗に解決することができました。このあたりの格闘をSWIGインターフェイスファイル FenrirMath.iに見ていただけると嬉しい(笑)です。 ※その後、裏側でGNU Scientific Library (GSL)にも対応してみました。 January 21, 2009カメラモジュール基板 Rev.Bsparkfunの1.3M PixelのカメラモジュールTCM8240MDを使った基板ですが、搭載されているCPLD(Altera MAX2)とマイコン(SiliconLaboratories C8051F342)のファームがほぼ完成に近づき、動作まで後一歩のところまでこぎつけることができました。 ファームが動きそうになっていく過程でVHDLコード内にあるモジュール、例えばSDRAMコントローラなどの効率化を色々と図っていました。例えばSDRAMコントローラですと、バーストアクセスや状態遷移の効率化を行っていました。 そこで表題にもあるとおり、基板の設計をしなおしました。いつもどおり、Eagleの回路図とレイアウトを公開します。
CPLDに水晶発信器を接続できるようにしました。この水晶ですが、2.5 x 2.0 mmのとても小さいものです。DigiKeyで買える中では最小のようでした。 20枚ほど基板は発注しましたので、余りそうです。部品をご自身で集めることができ、ノークレーム、ノーサポートで楽しんでみたいという奇特な方がいらっしゃるようでしたら、生基板の実費での配布など、対応を検討してみたいと思います。 ※その後、画像取得ができました。 January 28, 2009カメラモジュールによる画像取得カメラモジュールを作っていましたが、ようやく画像の取得に成功しました。基板は最新(Rev.B)のものではなく古いものでの成功です。
搭載されたマイコン(C8051F342)とCPLD(Max2 EPM570)用のファームウェアは公開しています。取得画像サイズといったカメラに関する制御は、microSD上のファイル(cam.datという名前で保存したバイナリファイル、サンプル)でコントロールできるようにしました。画像の取得を目指していた際、レジスタの設定方法がよくわからず、いちいちマイコンのROMに書き込むのが面倒くさくなったので、このような方式にしました。怪我の功名というか、この仕組みは非常に便利です。上の画像のレジスタ設定は、sparkfunフォーラムでの議論を利用しています。 また、画像の保存形式は独自定義なので、ビットマップ(bmp)に変換するRubyスクリプト log2bmp.rbを用意しました。ビットマップのファイル形式を調べていたのですが、OSによってバージョンの差異があったりと意外に置が深いのですね。ここでは最も単純なWindows 3.0で定義されたものに則っています(log2bmp.rbはbitmap.rbに依存しています)。 まだまだカメラのレジスタで不明な部分が多いため、上の画像よりも大きなサイズの画像の取得や色合いの良い露出設定ができていません。しかしながらCPLD上に実装されたSDRAMコントローラ等が機能していることは画像が取得できたことによって確認できたので、非常に大きな前進を果たせたと満足しています。 ※その後、色の問題とVGAサイズの取得に成功しました。色の問題はRedとBlueのチャンネルをlog2bmp.rbで逆転させていたことが問題で、現在は修正済みのものに差し替えてあります。取得した画像は以下のとおりです。
なお、この画像の取得にはcam_VGA.datのレジスタ設定を使用しました。 ※※続いてSXGA(1280 x 1024)も取得成功しました。設定はcam_SXGA.datです。
次はjpegでの取得を目指してみることにします。 |
かれんだ~
スポンサード リンク
|