May 04, 2006温度ドリフト先日、MEMS加速度計(STMicroのLIS3L02AS4、3軸1パッケージの加速度計)、ジャイロ(Analog DevicesのADXRS150、1軸1パッケージのジャイロ)の恒温槽試験をしてきました。 例のプロトタイプをそのまま突っ込み、室温(15℃くらい)~-10℃~40℃~室温という温度プロファイルで静置してみました。結果が図のような感じ(横軸が温度のチャンネル、ADXRS150内蔵の温度センサを利用。あと、詳細な結果はPDF)なのですが、温度ドリフトってやっぱりあるようですね。しかも個体差がかなりあるようです。本格的に使う場合はやはりテーブルを作って補正をする必要があると思います。 May 07, 2006英語コメントスパムへの対処今までコメントスパムの対処方法として『HTMLタグを徹底的に認めない』や『禁止IPに登録されたのをわからなくする』、『MD5等を使ってコメント欄を偽装する(こちらは記事にしていません)』などを行ってきましたが、先日等々大量の英語スパムに見回れました。仕方がないので、英語スパムを駆除する方法を考えることにしました。 方法としては、日本語の文字が入っていないものをはじく方法を採用することにしました。特定の人が投稿できなくなる可能性があることに抵抗があったため、今までやらなかったのですが、とうとう諦めることにしました。 どうやらこの手の対策はプラグインでできるようですが、それらのプラグインはMovableType 3を要求しているようです。このサイトは未だにMovableType 2.661で運営されているので、動作するかわかりません。 そこで、いつものことながらソースをハックします。 use Jcode;
すると$str_encodingに英語のみの場合は'ascii'が、日本語が含まれる場合は'UTF-8'等が代入されます。詳しくはJcodeのマニュアルをどうぞ。my $str_encoding = getcode($str); そこで以下の改造をしました。 /path/to/MT/lib/MT/App/Comments.pm(MT2.661だと162行目付近)に追加 use Jcode;
my $comment_encoding = getcode($q->param('text')); if ($comment_encoding eq 'ascii') { return $app->redirect($entry->permalink); } これで英語コメントを無条件にはじけます。 May 09, 2006May 14, 2006好きな料理は何?
[Tips]
この間、『好きな料理は何?』という話になったのですが、その場では返答に困ってしまいました。小さい頃は、あれ食べたいとか、これ食べたいという欲求がとてもあったのに、今はどうして返答に困るほど食べたい物がないのだろう?、少し残念な気分になりました。これではいけない、何か食べたいものが絶対あるはずだと思い、普段の食生活を省みてみることにしました。 わかりました、僕の好きな食べ物。それは卵料理です。 これで好きな食べ物が見つかったものの、よく考えてみないと好きな食べ物って本当にわからないものなのでしょうか、実は少し心配です。脳年齢が衰えている疑惑も…。 May 18, 2006プロポとPCの接続
[Aero & Astro]
[Computer]
室内飛行機の航法系を検討していましたが、その中でビデオカメラを用いて位置や姿勢の同定を行うというプランがあります。 このプロポですが、ある機種にはトレーナー機能というものがあります。これはラジコン初心者が上級者と共に操縦の練習をするための機能で、いってみれば自動車教習のようなシステムです。すなわち、初心者と上級者の2台のプロポをトレーニングケーブルと呼ばれるケーブルで繋ぎ、初心者がおかしな操縦をしたな、と上級者が判断した場合に、上級者の操縦が上書きされるようにするシステムです。つまり、今回はトレーナーケーブルを流れる信号を模擬して入力してやることにより、人間でなくともプロポによる操縦が可能となるわけです。 以下、続きをどうぞ。 ※その後、接続が完了しました。 続きを読む "プロポとPCの接続"May 21, 2006MeCab-0.91をCygwin Rubyで
[Computer]
日本語の文章をコンピュータで解析する形態素解析というツールがあります。ちょっと使う用途がでてきたので色々と触ってみているのですが、そのツールをRubyから使うためのバィンディングがうまく動いてくれません。 事の発端は以前Chasenを使っていたのですが、Chasenはあまり早くないのでより早いMeCabを使ってみることにしました。最終的にはおそらくどこかのサーバになるので、実行する環境は*NIX系のOSを想定すればいいのでしょうが、とりあえず実験環境ということでWindows+Cygwin上にMeCab-0.91をインストールしてみることにしました。 MeCab本体のインストール自体はMeCabのインストールページにあるとおりでうまくいったのですが、MeCabをRubyからコントロールするためのバィンディングがうまく動いてくれません。バィンディングのインストールは数箇所修正することでコンパイルが通っているのですが、いざサンプルコードを動かしてみようとするとコアを吐いて落ちます。 続きをどうぞ。 続きを読む "MeCab-0.91をCygwin Rubyで"May 27, 2006PIC 16F648Aと闘う日々プロポとPCを接続するためのマイコン入りアダプタを作っていました。 このアダプタを作ることが最終目的では全くないので、お金と時間は惜しむことにしました。 とりあえず前回の記事にあるとおり、プロポに送るパルスをマイコンで作り、PCからそのパルス幅をコントロールすることができれば、目的を達成できます。今回はパルス幅の精度が命なのでタイミングにはこだわることにし、パルスを生成するためのタイマー、PCとシリアル通信するための機構であるUSARTはすべて割り込みを使って処理することにしました。 タイマーの割り込みについてはすんなりと動きました。ところがです、USARTの割り込みが全く動きません。CCS社のC言語規約によれば #use RS232(baud=9600, rcv=PIN_B1 xmit=PIN_B2)
のように記述すれば、USARTからのデータ受信割り込みを認識し、処理が行えるとのことです。しかしこのように記述しても全く動く気配がありません。
#INT_RDA void main(){ while(TRUE); Webでこのような症状を調べてみると、次の2点が重要のようです。
さらに調査をすすめてみると、同じ現象に遭遇している人がいました。CCS社のユーザーフォーラムによると、古いバージョンのコンパイラでは16F628に対してuse RS232がうまく働いていないようです。 そういうわけで、コンパイラのバージョンをあげることを検討していますが、CCS社のコンパイラは購入後30日しかアップデートを受けられないようです。有償のソフトウェアなのだから、無償でアップデートできて当然(しかもバグなわけで)だと思うのですが、いわゆ保守の一環ということで駄目なのでしょう。 横着せずにフリーのコンパイラを使っていればよかったと反省しています。仕方がないので、別のコンパイラを使うことにしました。 May 31, 2006プロポとPCの接続完了
[Aero & Astro]
[Computer]
プロポとPCを接続する話ですが、コンパイラのバグに遭遇するなど不運な事態に遭遇したものの、ようやく完成しました。回路図(EPS版)と使用したPIC(16F648A)に焼きこむためのバイナリ(HEXフォーマット)、PCからのコントロールライブラリ(C++ヘッダファイル)をおいておきます。
コンパイラのバグですが、結局バージョンをあげる(3.174->3.249)ことで解消されました。バグと戯れている間にPICのアセンブラが読めるようになったので、その成果がプログラムにも反映されているかと思います。 set_TIMER1(get_TIMER1());
などとすると、思ったとおりの動作が実現できず、タイムラグが発生します。これはタイマー1が16bitタイマーであるのに対し、PIC16には16bit操作命令が存在しないため、8bit命令を駆使して実行されます。そのためタイマー1のカウント値を読み込んだ直後にカウント値が設定されることはなく、タイムラグが生じているようです。
そのようなことを踏まえて、今回のソースを書きました。一部書き方が素のC言語のようになっている部分がありますが、その部分がタイミングシビアな部分です。あと、結局バグが生じていたINT_RDAはバージョンをあげることにより解消したものの、今回は使用しないことにしました。 現在快適にプロポのコントロールができています。室内飛行機の自律制御に向けて、次は機体搭載機器の検討をしてみる予定です。 ※その後、接続部分を基板化しました。 |
かれんだ~
スポンサード リンク
|