February 01, 2008

MacOSX(10.5) launchd

Mac miniでサーバをしようと内部を分解したりしていましたが、最近は様々なサーバ系ソフトのインストールに追われています。世の中便利なパッケージがあるようですが、やはりトラブルの際には色々とわかっていたほうがよいと思うので、『漢は黙ってソースからインストール』(笑)を選択しています。現在のところ、プロキシ(squid-cache)データベース(PostgreSQL)のインストールが完了しました。その過程で、MacOSXの起動時の挙動がかなり変更されていてサービスを自動起動するのに戸惑ったので、そのことを記事にしたいと思います。

長くなりそうなので、メインページから来られた方は続きをどうぞ。

続きを読む "MacOSX(10.5) launchd"
15:34 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/617

February 06, 2008

XBeeでワイヤレス電力計

昨年は、とあるプロジェクトでワイヤレス電力計なるものを作っていました。コンセントにさすだけで、家電製品の消費電力モニタリングを気軽にできるというコンセプトです。そろそろこのプロジェクトは完全に終了となるわけですが、せっかくなので紹介しておこうと思います。

分解写真と構成図
emeter.jpg
current_monitor.gif

主要な部品は、ZigBeeのモジュール(Maxstream XBee)、電力用IC(Analog Devices ADE7753)、マイコン(Silicon Laboratories C8051F410)、MicroSDです。ケースやCT(Current Transducer、電流測定用のコイル)等は、東急ハンズなどで3000円くらいで買える簡易電力測定器のエコワットという製品を分解して使っています。AC100Vは危ない(←笑えない事件がありました)ので、ケースはとても重要でした。写真左の基板はエコワットに元々入っていた基板で、NE555を使って簡易的に電力の測定をしているようでした。

この電力計は複数台を同時に使用することができます。身近な家電製品にこの電力計を設置したところ、ある日の計測結果は下のグラフのようになりました。

時系列グラフと積算グラフ
20071231.png
20071231_sum2.png

グラフを見る限りではちゃんと計測できているようです。冷蔵庫が間欠動作をしていたりなど、計測をするまでは気が付かなかったことが多数あり非常に楽しめました。この電力計を使うことで省エネへの注意喚起もできるに違いない、ということでプロジェクトの方は大成功でした。

※その後、この電力計の設計資料を公開しました。

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

February 11, 2008

『GPSのための実用プログラミング』

最近このサイトへアクセスしてくださる方の傾向を観ると、GPS関係のキーワードで検索エンジンから来られる方が多いようで、特に自作GPSロガーは大人気となっています。そのような流れを受けて、今後もできるだけGPS関連の情報は充実させていきたいと考えています。その長期計画の一環として、GPS参考書『GPSのための実用プログラミング』の紹介、並びに掲載されているC言語コードをC++化したことについて、この記事では触れたいと思います。

僕はGPSの受信機をソフトウェアで構成することに元々興味があったので、以前は『Open source GPS C/A信号の抽出』の記事にもあるとおり、GPSのL1電波(1575.42MHz)から意味のある情報、例えば擬似距離(pseudo range)や搬送波位相(carrier phase)を抽出する、といった信号処理側から攻めていました。ところがこの攻め方はあまりメジャーのようではなく、その意味のある情報から更に計算を行って、現在位置といった測位を行うほうに興味がある方が多いようです。そのような方にお勧めしたい本として、電子航法研究所の坂井先生が書かれた『GPSのための実用プログラミング』という本があります。出版元は東京電機大学出版局です。

GPSのための実用プログラミング

この本は上記測位の点に要点を絞って解説された本で、C言語のコードと共に測位計算の手順が紹介されているので非常にわかりやすい本です。GPSの計測データの保存フォーマットとして一般的なRINEXファイルについても触れられているので、たとえGPS受信機を持っていなくてもIGS等のインターネット上に公開されているRINEXファイルを元に測位計算を体験してみることができます。

掲載されているC言語のコード(某所で公開されていますが、本の購入者のみ利用可能ということなのでリンクは控えさせていただきます)は非常に役に立ちましたが、僕自身の理解を深めるにためにも掲載コードの一部(第2章~第4章)を、色々と構造化して僕の好きなC++風に書き換えてみました。せっかくなのでコードを公開しようと思いますが、著作権の問題もあるかと思いますので、現在問い合わせ中です(肩透かしでごめんなさい→その後公開しました、記事末尾参照ください)。

ちなみに本を読み進めるにあたって、いくつか疑問点があり坂井先生に質問したところ、以下のような正誤が第1版ではあることがわかりました。

  • P.55 表3-2 離心率(e)のLSBでビット位置 (誤)159 => (正)167
  • P.55 表3-2 Δn のスケール (誤)-31 => (正)-43
  • P56 表3-3 軌道傾斜角(i_0)のビット位置 (誤)139 => (正)137

またさらに以下の疑問点があったので、問い合わせております(→その後、いずれの項目も指摘のとおりという返答をいただきました)。

  • P.63 表3-7 クロック補正係数(a_f2, a_f1, a_f0)の順が逆、正しくはa_f0, a_f1, a_f2ではないか
  • P.112 (3.16)のピアースポイント計算式 (誤)0.00137 => (正)0.0137ではないか

いずれの問題点も、GPSの仕様書『GLOBAL POSITIONING SYSTEM STANDARD POSITIONING SERVICE SIGNAL SPECIFICATION』(PDF)と付け合せた上での結論です。
ちなみにGPSは上記仕様書によると、その仕様上の定数を世界測地系WGS84に沿って定めているのですが、WGS84で元々定められた地球の自転速度(7292115E-11[rad/sec])ではなく、新しい時刻規定に基づいてWGS84で定められた自転速度(7292115.1467E-11[rad/sec])を使っている(WGS84仕様書(PDF)の3.2.4 参考)等、細かな違いがありプログラムを組む上でかなりはまりました。微細な違いに思われるかもしれませんが、光速からmm単位まで、様々なオーダーが入り乱れるGPSのことですから、このような微細な違いでも確実に効いてきます。

※その後、プログラムを公開を坂井先生にご快諾していただきました。080205_gpsフォルダからダウンロードできます。このプログラムの使用にあたっても、元のCプログラム同様、以下の条件でお願い致します、とのことです。

★プログラム例および関連するデータファイルの利用について
このプログラムは,本書(注:『実用GPSプログラミング』)をお買いあげいただいた方のみご利用いただけます。各データ(注:元のC言語プログラムならびに付属データ)の著作権およびその他の権利は,著者(注:坂井先生)が有します(注:ここで公開しているC++言語のプログラムについては加えてこのサイトの所有主のfenrirが有します)。読者個人による利用については特に妨げませんが,利用の際には,修正の有無にかかわらず本書を出典として明示してください。内容の無断複製・転載・再配布などはしないでください。各データは,すべて使用者の責任においてご使用下さい。使用したことにより生じた,いかなる直接的,間接的損害に対しても,著者(注:坂井先生)・当出版局(注:東京電機大学出版局)は一切の責任を負いません(注:ここで公開しているC++言語のプログラムの使用による損害ついてもfenrirはその責任を一切負いません)。

内容は4章までではなく5章までとしました。実行はVC2005 Express Editionとg++-3.4.4で確認しました。一部別ディレクトリ(commonnavigation)のヘッダが必要になると思いますが、実行環境に応じて調整を行ってください。
また応用を考え、ヘッダとして切り出したものも作りました。座標系についてのcoordinate.h、GPSのC/AコードやEphemerisについてまとめたGPS.h、RINEXフォーマットについてまとめたRINEX.hがあります。ex_header_sect5.cpp(5章の内容を上記ヘッダの組み合わせで実現するもの)を参考にすれば使い方がわかると思います。

※(2008/6/27 追記)富士通 近藤様よりプログラムについてご指摘を戴きました。衛星位置の計算の際に、昇降点の経度を求めるのですが、その補正項について解釈を誤っていたようです。この昇降点は『電波が到達した時刻のECEF座標系における値』でなければならないのですが、補正の際には送信時刻ベース(伝播時間を差し引いた時間)の補正であるエフェメリスからの補正、並びに受信時刻ベース(伝播時間を差し引かない時間)の補正である地球自転の2つがあり、それを混同していたようです。これに基づいてプログラムの修正を行いました。修正前の状態は __MISUNDERSTANDING_ABOUT_OMEGA0_CORRECTION__ をdefineすることで再現できるようにしてあります。『理解するためのGPS 測位計算プログラム入門』の質問コーナーにも同等の内容が触れられており、そちらも参考にしました。
また近藤様には、その他に効率的なニュートン法による解法についてもご指導を賜りましたが、こちらについてはまたの機会に反映する予定です。近藤様、大変ありがとうございました。

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

February 17, 2008

ビットマップ画像をベクトル化するVector Magic

長めの文章を書いていると、本からスキャンしたフローチャートのような図を載せたくなることがよくあります。しかしスキャナで取り込んだ画像というのは所詮ビットマップなので、拡大するとそのクオリティがいまいちです。特にA1やA0といった特大サイズのポスターに使おうものなら、近くで見てくださる方を追い払いたくなるぐらい、細かいところでグチャグチャになっているのが気になってしまうのは僕の悲しい性分です。

そういうわけで今まで本から図を抜粋する際は、スキャナで取り込んだあと、それを下絵にしてイラストレータでeps化してきました。この作業はイラストレータを習熟するのにはとてもよい、言い方を変えればとても時間がかかるので、あまりお薦めはできません。

そこで最近使い出したのが、Vector Magicというサイトです。このサイトにbmpやjpgをアップロードすると、なんと無償で(注:2008/2/17現在の話。その後、有料化されたようですorz)ベクトル変換された結果をepsやsvg形式で受け取ることができます。このサイトのロゴの下絵(fenrir_logo.jpg)をベクトル化するとfenrir_logo.epsのようになりました。パラメータを調整する項目がいくつかありますが、とても丁寧な誘導がついているのでわかりやすいです。

Vector Magicで変換中
vector_magic.jpg

今後はこれでイラストレータ作業から解放されそうです。

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

February 28, 2008

gnuplotで飛行機

最近訳あってgnuplotでグラフを大量生産しています。その中でちょっとした力作ができたので、紹介したいと思います。下のグラフをご覧ください。

飛行機を書いてみました。
ublox_from_gaia_E0_F.gif

背景となっている飛行機の作成方法は単純です。イラストレータを起動、適当な下絵を用意して、できるだけ単純になるよう直線パスでトレースします。そして頂点の座標を読み取って、その座標をgnuplotのplotコマンドでプロットすると、はいできあがり。このようにグラフに背景が挿入されていると、計測データ等が直感的に理解しやすくなります。一度作ってしまえば再利用も可能なので、非常にお薦めです。

飛行機の座標データをさらしておくと、右半分のデータで
[
# 胴体
[[0, 12.02], [0.228, 11.939], [0.374, 11.805], [0.55, 11.519], [0.81, 10.961], [0.976, 10.134], [1.025, 9,25], [1.025, 2.989], [0.965, 2.121], [0.478, -2.994], [0, -2.994]],
# 主翼
[[1.025, 6.802], [8.952, 6.019], [8.952, 4.509], [1.025, 3.744]],
# 垂直尾翼
[[0, 0.415], [0.125, -0.289], [0.167, -1.138], [0.167, -2.042], [0, -2.994]],
# 水平尾翼
[[0.617, -1.534], [2.746, -1.954], [2.746, -2.994], [0.478, -2.994]]
]
という感じで、それほど大量の点をプロットしているわけではありません。少ない頂点でもかなりの絵がかけるものと思われます。

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