February 03, 2009

LiPo電池 400mAh 600mAh

開発をほぼ終えたカメラモジュール用の電池を入手しました。LiPo(リチウムポリマー)の1セル(3.7V)で、容量は400mAhと600mAhです。LiPoは専用の充電回路を用意しなければならない等、その取り扱いには十分な注意が必要ですが、軽くて容量が大きいのでとても便利です。基板面積を小さく抑えたかったカメラモジュールにLiPoの充電回路を内蔵するのはかなり至難の技でしたが、電池が大容量で軽いメリットを考えると、その苦労も大変報われるものです。

LiPo_400_600.JPG
入手したLiPo電池

入手先は耳掛け音楽プレーヤー Timpyで有名なchiakiさんのサイトからリンクがあった香港のラジコンショップ Hobbycityを利用してみました。価格が驚異的に安く、400mAhと600mAhを2個ずつ頼んで、送料込みで20ドルいきませんでした。激安です。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/686

February 12, 2009

Super Sylphide 進捗状況(23) -- 下位プロトコルの策定

オートパイロットシステム Super Sylphideですが、地上側のソフトウェアが整備されつつあり、通信環境に関する作業を中心に行っています。そこで問題となったのが、通信プロトコルや通信回線の太さといった極めて泥臭い話、すなわち試行錯誤が要求される部分を決定しなければならないということでした。今回のその試行錯誤の一端として、決定した下位レベルのプロトコルの話を紹介したいと思います。

現在Super Sylphideのログデータは32bytesの固定長で一つの意味単位(仮にページと呼ぶことにします)を形成しています。その32bytesの先頭バイトがそのページの性格を示しており、例えば'A'ならばセンサのA/D変換結果、'G'ならばGPSからの情報が中には入っているよ、ということを示す仕様にしてありました。
余談になりますが、この32bytes固定長がどこから生まれたのかというと、SDカードのセクタ単位(512bytes)の公約数に由来しています。SDカードはセクタ単位で読み書きを行うこと、また32bytesという長さがだいたいの情報を記録しやすい、さらには内部メモリが少ないマイコンのスタック(多くは256bytes)にも収まるという優れた特長を持っています。

SDカードに記録されたログデータを解析する分には頭出し、つまりどこからページがはじまるかわかっており、なおかつデータの完全性も保障されているのでパースが簡単です。しかしこの32bytes固定長仕様のログデータを、リアルタイムに通信でやり取りしようとすると、どこが先頭なのか認識できない、ましてや途中でデータが途切れるおそれがあります。そこでこのデータを包み、頭出しとデータの完全性を確認する機能を追加する下位プロトコルを策定することになりました。色々と検討した結果、以下の図のような仕様としました。

low_protocol.png

ヘッダ(12bits、0xF7E)は頭出しを簡単に行えるようにするためのもので、いままでのログデータから最も出現頻度が低い組み合わせを選びました。ヘッダに続く4bitsはこの意味単位の性格づけ(要返答など)をするために予約としました。続く2bytesはシーケンス番号で、トランザクションを構成する際に利用します。その後には32bytes固定長ページが続き、最後に付加したCRC-16によってデータの破損がないか検出できるようにしました。データの破損は付加されているCRC-16と受信側で新たに計算したCRC-16を比較し、不一致の場合はデータが破損していると判断、次のヘッダがでてくるまで受信結果を破棄するようにしました。

この下位プロトコルを用いた通信の実験をSuper SylphideをUSBでパソコンに接続し行った結果、良好に動作していることを確認しました。データの破損検出については、通信に使うエンドポイント以外をbulk転送で埋めると、転送速度が落ちデータの歯抜けがおきることを利用して確認しました。通信回線を無線のXBeeに置き換えた場合どうなるかが、最大の山場です。近いうちに実験をしてみたいと考えています。

※DSPの開発が一段落したので、DSPの開発遍歴についてまとめました

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (5) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/687

February 18, 2009

『猫カメラ』 試作中

こんな怪しいサイトを構えていると色々な話が舞い込んできますが、カメラモジュールを役立てていただける方が現れました。例によって未踏がらみなのですが、猫にぶら下げるカメラがほしいとのことでした。題して『猫カメラ』。

catcam_top.jpg
catcam_bottom.jpg

写真にあるとおり、設計と実装が完了しました。カメラに加えて、GPS、Bluetooth、加速度計などが組み込まれています。サイズは2 x 1.4inch(約51 x 36 mm)です。回路図やファームについては、動作確認が取れ次第公開しようかと考えています。

なお、使い方について色々倫理的なことを考えだすと厳しいものがあるかもしれませんが、技術的には大変面白い企画だと思います。これならMake:のイベントに出せますかね(笑)

※(2009/10/31追記)カメラの部分が気に食わない事態が発生したのでVer.2を作成中ですが、このバージョンのEagle回路図基板レイアウトを公開します。

※※(2010/4/11追記)装着するとこんな感じに。

catalog_rena.png
にゃー(copyright: 米澤氏)。

被写体は依頼人の米澤氏のところのレナさん。研究成果はCat@logにまとめられています。ちなみにリンク先の動画内の動画は別のデバイスを使って撮りました。このデバイスではそこまでスムーズな動画は撮れません(Ver.2でもQVGAで5fps程度です)。

※(2010/5/18 追記)Make Tokyo Meeting 05で展示します!!
※※MTM05の一日目の様子を撮りました。
※※※MTM05の二日目の様子もあります。
※※※※デジカメウォッチTechOnで紹介されました。

19:49 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (7) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/688

February 25, 2009

Rails 2.2以降 + PassengerでRailsBaseURIが機能しない

某プロジェクトの関係でソースコードを共有する仕組みを考えていたのですが、最近はgithubを使うのがはやりのようです。これまではsubversionを使っていたのですが、よい機会だと思いgitに手をだしてみることにしました。そこでgithubを使おうと思ったのですが、はじめはソースをプライベートの状態で開発を開始したいとの申し出でしたので、githubを前提とするならば有償サービス(最低7ドル、機能対価格表)を利用しなければいけないようでした。そこでgithubクローンで、かつ、rails上で動くオープンソースのgitoriousを試してみることにしました。今回の記事はそのインストールで躓いた部分の備忘録です。

gitoriousにはインストールレシピがあり、ubuntu用チュートリアルを参考に行いました。基本的にそのチュートリアルをなぞればパッケージの導入自体は完了しました。railsをapacheと協調動作させるためのpassenger(いわゆるmod_rails)については、プロジェクト管理ツールのredmineを前回インストールした際に導入済みでしたので、これといって難しいこともありませんでした。
一つ躓いたことといえば、7.4のrakeを使う部分でrake db:create RAILS_ENV=productionをしようとしてもエラーで止まってしまうので、mysqlのコンソールに入り、CRETAE DATABASE gitorious_production;と手動でSQLを発行する必要がありました。

このチュートリアルを元にインストールをすると、gitoriousを動作させるサイトは(バーチャル)ホストのルート(要はhttp://gitorious.naruoka.org/のようなURL)になりますが、それではいやなので、passengerのマニュアルに従って、動作するURLを1階層下に落とす(http://www.naruoka.org/gitorious/のようなURL)ことにしました。RailsBaseURIをapacheの設定ファイル内で宣言するなどすればよいようです。
しかしながら404のページが表示されてしまい、うまく動作しませんでした。redmineのときはRailsBaseURIを設定するだけでルートでなくとも動作したので、思い当たる原因がありません。

しかたがないのでエラーの箇所を突き止めるべく、ソースを弄りだします。まずは404のページだけではデバックのしようがないので、404ページをリンダリングしているrails提供のファイルgitorious/app/controllers/application.rbのApplicationController.render_not_foundメソッドをrender :text => $!.inspect + $@.inspectとして、エラー情報を吐き出させるようにしました。するとgitorious/vendor/rails/actionpack/lib/action_controller内でURLが解決できなく困っているようです。『ActionController RailsBaseURI』をキーワードに検索すると、『RailsBaseURI and relative_url_root』という、まさしく探していた情報が手に入りました。どうやらRailsに付属するActionControllerの仕様が2.2から変更されたために生じた問題のようです。実際、vendor/rails/actionpack/lib/action_pack/version.rbを見てみるとgitorious付属のrailsのバージョンは2.2.2とありますので、どうやらこの原因で間違いがないようです。

解決方法を探ってみると、結局config/environment.rbから呼び出される環境別の設定ファイルconfig/environments/production.rbにおいて、config.action_controller.relative_url_root='/gitorious' とすることで解決できました。散々引っ張っておきながら、これだけで解決してしまうあたりがなんともフレームワークを利用しているという感じです。こんな簡単に解決する話なら、gitorious本家のマニュアルにも書いておいて欲しいものです。

09:12 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/689