June 01, 2012

HMC5843 と HMC5883L を見分ける

オートパイロットシステム Super SylphideTiny Featherで使っている地磁気センサについての話です。Honeywell の HMC5843 あるいはその後継の HMC5883L という製品なのですが、両者をソフトウェアで見分ける必要が最近ありました。というのも、5843は少し前にディスコンになった製品で、地磁気センサのみ5883Lに変更して設計をやりなおしており、新旧バージョンの違いをソフトウェアで吸収しようとしました。もう少し込み入った事情を書くと、例えば両センサは一つでX/Y/Zの3軸分とれるのですが、軸の物理的配置やその読み出し順が異なり、それをソフトウェアで補正する必要があったためです。

HMC58x3.png
軸配置など

ソフトウェアで区別をするということになると、特定のレジスタを読み出して区別ができそうです。5843と5883L、両方ともIdentification Register A/B/C というまさにうってつけのレジスタがあります。が、しかしなんと、両者で同じ値 'H', '4', '3' を返してくるのです! 使い物になりません!! 5883Lの方を 'H', '8', '3' とでも返してくれればいいものを…。

仕方がないので、別の作戦を使うことにしました。両センサともバイアスモードというのが備わっており、一定の地磁気が加わったのと同じ状態を疑似的に作り出すことができます。バイアスモードでかかる疑似地磁気の大きさはそれぞれ0.55G(5843) と 1.1G(5883L) で異なります。これを利用することにしました。すなわち、通常の計測を行った結果とバイアスモードで計測を行った結果の差をとり、その差が大きいか小さいかで5843と5883Lを見分ける、という算段です。

現在のところ、hmc58x3.hhmc58x3.cpp のようなコードでうまく動作しています。HMC58x3#init() に見分けている部分があります。ちょっと強引ですがなんとか区別がついたので満足しています。

※さらに別の地磁気センサを使いだしたので、軸定義についてまとめをつくりました。

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

June 08, 2012

富士川滑空場のGPS測位

先日、TinyFeatherでとった人力飛行機のログについて記事を書きましたが、その際Google Earthが特に高度についてどのような測地系で管理されているのか、ということを書きました。そこで、ログを取った富士川滑空場に自身で赴く機会があったので、GPSを使った測位をしてみました。@HirakuTOIDA くんにも協力いただいています。

測位を行ったのは滑走路の四隅です。使った機材はTinyFeatherに搭載したu-blox LEA-6T受信機と、カーナビなどに使われている廉価なGPSアクティブアンテナ(DigiKey: 931-1135-ND)です。LEA-6Tで搬送波位相などの生データを四隅それぞれ15分ほど取得、得られたubx形式データをRINEX形式に変換、高須先生のRTKLibを使って解析をしました。解析はPPP-Staticモード(Forward-Backward)を使い、軌道やクロックの精密歴はIGSのRapidを使いました。解析結果としては四隅のいずれにおいても水平位置で10cm以内の範囲に収まっています。解析に使った元データや解析結果の詰め合わせ fujikawa-survey.zip を置いておきます。

結果をGoogle Earth上に表示してみました。水平位置は概ねあっているようです。

fujikawa_survey.jpg
全体像

しかし拡大してみるとEarthの写真のずれがよくわかります。2m程度ずれているようです。

fujikawa_survey_north.jpg
北側

fujikawa_survey_south.jpg
南側

高度について、解析結果は50m程度でした。Google Earthではこの地点は0mに近い高さがでますので、やはり前の記事の予測どおりGoogle Earthの高さはGPS高度からジオイド高を考慮した標高で間違いないようです。

※パラメータ調整によって相対StaticでFix解が求まるようです。詳しくは@HirakuTOIDAくんのサイトにて

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

June 15, 2012

近くの電子基準点を求める

ひとつ前の記事で富士川滑空場のGPS測位に関して記事を書きましたが、解析を行うに当たっては結果を示したPPP-Staticなどの単独測位以外にも相対測位も試してみました。相対測位を行うにあたっては、位置がそれなりに正確にわかっている基準点が必要となるのですが、国土地理院が設置している電子基準点のデータを使うのが便利です。

解析をするにあたっては、誤差要因を合わせるためにも、できるだけ近い電子基準点を選択する必要があります。しかし機械的に近い電子基準点を選択するのが、難しい状況にあります。これは電子基準点の位置データは公開されているのですが、公開サイト上での検索方法は地図を使って視覚的に選ぶ必要があるためです。

そこで機械的に電子基準点を選べるよう、Rubyでスクリプトを起こしてみました。geonet.rbというものです。Rubyの標準ライブラリだけで動くはずです。使い方を以下に示します。

ruby geonet.rb --mode=update # 初回起動時やしばらくぶりに立ち上げた際、電子基準点の位置データを更新する
# => dataというディレクトリに最新情報がダウンロードされる

ruby geonet.rb 35.681382 139.766084 # 東京駅(北緯35.681382度 東経139.766084度)の最寄の電子基準点を求める
# => The nearest station is 93016 (lat, lng, alt) = (35.780214284, 139.81281785, 4.597450407), about 11752.6740443314 m. # 最寄の電子基準点は93016であり、東京駅から直線距離で約11.8km。

ruby geonet.rb 35.681382 139.766084 --rinex=true Jun 1 +0900 2012 # 指定時刻(2012/7/1 JST)における東京駅最寄の電子基準点(93016)の観測データ(nav, obs)を取得する
# => 30161530.12o.gz, 30161530.12n.gz # 基準点の観測データ

こんな感じで使えます。なお電子基準点までの距離は、ヒュベニ式(hubeny formula)で出しているので、正確ではないです、また高度方向も対応していませんが、最寄の電子基準点を出すには十分なはずです。

※あわせてGPSの時刻処理や精密歴を取得するスクリプトの記事もどうぞ。

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

June 29, 2012

TinyFeather ADS Rev.D 基板

最近ちょっと忙しいので、基板写真をはっつけて定期更新に変えたいと思います。以前、TinyFeather ADSという拡張機器を作っている話を書きましたが、それのRev.Dをつくりました。事情はお察しください(笑)。

ADS_revD_top.jpg

ADS_revD_bottom.jpg

事情を少し書くと、MicroSDカードスロットをつけたはいいが、当初予定していたマイコンのROMがさほど大きくなかったため結局FATを載せられず、MicroSDカードが残念なことになってしまったという経緯があります。ということでマイコンを当初のC8051F350からMC9S08GW64CLHに変えました。ファームはこれからです。

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