2012/12/30

PSoC Creator 2.2でBootloader Hostが起動しない

PSoC Creator 2.2付属のBootloader Hostは環境によっては立ち上がらないことがあるようです。
Windows 7 64bitの環境2つで試してみましたが、いずれも下のようなメッセージが出て起動しませんでした。


この問題はBootloader Hostを互換モードで立ち上げることで回避出来るようです。

Bootloader Hostのショートカット設定
問題のあった2つの環境では、この対策を行うことでプログラムが立ち上がるようになることが確認できました。

これでUSB Bootloaderを仕込む作業を再開できそうです。

2012/12/23

PSoC 5LPはじめました

PSoC 5の進化版PSoC 5LPが入手できるようになったので貼り替えて使ってみました。
100ピンTQFPタイプのPSoC 5LP。型番のマーキングが見やすくなっている
PSoC 5LPには1KBの命令キャッシュが新たに搭載され、31 %性能が向上すると謳われています。
20 us程度かかっていた処理が16 us程度で終わるようになったので、少なくとも20 %程度は性能が上がっているようです。

搭載モジュールの構成にもよりますが、PSoC 5LPは同等の性能を持つPSoC 3/5より安い場合もあるようです。
PSoC Creatorで「標準」とされているチップで比較すると、
PSoC 3: CY8C3866AXI-040 $19.46
PSoC 5: CY8C5568AXI-060 $26.79
PSoC 5LP: CY8C5868AXI-LP035 $15.38
となって、最も性能が高いものが最も安くなっています。

今後はPSoC 5LPをメインに使っていくつもりです。

2012/12/20

InvenSense製慣性センサでのDigital Motion Processorの使い方

計器に搭載しているInvenSenseの加速度・ジャイロセンサですが、Digital Motion Processorと呼ばれる機能を使うと、センサの生データだけではなく6(9)軸分のセンサデータから計算したQuaternionによる姿勢出力を得ることも可能です。
Quaternion出力が得られれば、(逆)三角関数の計算数回程度で演算能力の低いマイコンでも姿勢角を得ることができます。

以下にDMPの使い方の参考になる情報源等を紹介しておきます。
DMP出力を利用するためには、センサ内蔵のプロセッサにコードを流し込む必要があります。
初期化コードは最大で3 kByteほどのようです。

1. I2Cdevlibで公開されているライブラリ

多数のI2Cデバイス用のライブラリを公開しているI2Cdevlibのライブラリを利用するのが今のところ最も簡単なDMPの使い方だと思います。
基本的にArduino向けに書かれたものですが、I2Cの足回りを変更すれば他のマイコンでも使えます。
ただし、必要に応じてCに移植する必要はあります。

ここで公開されているコードはInvenSense製の評価キットのI2Cバスの信号を解析した成果のようで、生データも公開されています。

このライブラリを計器に組み込み、バーグラフにピッチ角を表示したものを下に示します。


I2Cの足回り等のデバイス依存部をPSoC 3/5用に移植しC++で動作確認後、公式にサポートされているCに移植しました。
PSoC CreatorはオフィシャルにはC++には対応していませんが、問題なくコンパイルは行えるようです。

2. InvenSenseのDeveloper's Cornerで公開されているライブラリ

InvenSenseもDMPを使うためのライブラリを公開していますが、基本的にはI2Cdevlibのものと中身は同じです。
I2Cdevlibにはない最新版(ver. 5.1)のコードはMSP430用のものしかないので、マイコン用のライブラリよりドキュメント類や可視化プログラムのほうが有用です。
近日中にver. 5.1のデバイス非依存なコードがリリースされるとの情報がForumでは確認はできていますが、現時点では利用できないようです。

Developer's Cornerからダウンロードできる資料によると、Quaternionはジャイロの積分値を加速度センサで補正して求めているようです。
また、計算は固定小数点で行われているようです。

公開されている可視化プログラムのTeaPotデモを実行した例を下に示します。

静置試験開始時
10分後

姿勢角が正しく取得できていること、10分間の静置の後も重力加速度による補正が効かないヨー角のドリフトが少ないことが確認できています。
この実験は地磁気センサなしで行ったものですが、地磁気補正を入れればさらにヨー角の安定性は増すと思われます。

3. MotionFit SDKのバージョンに関する注意

プロセッサに流し込むコードにはver. 2.0, ver. 4.1, ver. 5.1の3種類があるようです。
これらの区別は、256バイトごとに区切られるメモリバンクの先頭を比較することで行えます。
Bank 4の先頭がver. 2.0, ver. 4.1, ver. 5.1ではそれぞれ0xB4, 0x96, 0xD8となっています。
ver. 5.1より古いものでは加速度センサ・ジャイロセンサのゲインは指定された2g/2000dpsでないとならないらしく、それ以外の設定では異常な姿勢角が出力されることが確認できています。

現時点では一般のマイコンでver. 5.1でDMPを利用できるライブラリはないので、MSP430とMPU-6000をつないだ評価キットもどきを作って、I2Cバスの信号を解析しようとも考えています。

センサの組み合わせ基本的に加速度とジャイロなので、大きな加速度がかかるような環境下では正しい姿勢角が計算できないはずです。
加速度がかかった場合にどの程度の姿勢角のずれが生じるのかをテストして、(特に人力飛行機用として)どの程度使えるかを確認するつもりです。

2012/12/08

SDカードの比較

前回行ったSDカードの書き込み速度テストですが、SDカードによって結構な差があるようなので、いくつかのものを比較してみました。
結果は下の図です。
SDカードの書き込み速度の比較。ライブラリはFatFsを使った。
以前のテスト結果と同じように、一度に書き込むサイズが小さい領域では2 GBのものより1 GBのもののほうが高速なようです。
この傾向からするとより小さい容量のカードを使えばもっと高速に書き込みができるはずです。
512 MBのカードは店頭からほとんど消えかかっていますが、手に入ったらテストしてみようと思います。

2012/12/06

FatFsとemFileの書き込み速度比較

新しい基板にSDカード書き込み機能を実装するにあたって、PSoC 3/5で使用可能な2種類のライブラリの性能を比較してみました。
ひとつはPSoC Creatorに付属のSEGGER社のemFile、もうひとつはおなじみFatFsです。
PSoC 3/5用に移植したFatFsはF-tecのページで公開されているものを使いました。

SDカード(=SPIモジュール)に与えるクロックを25 MHz、CPUクロックを50 MHzにして書き込み速度を比較したのが下の図です。
ただし、PSoC 3/5のSPIモジュールに与えられるクロックは18 MHzまでなので、オーバークロックになっています。
SDカードの書き込み速度の比較
今回はロガー用途で、比較的小さなサイズの書き込みを行うので一度に書き込むサイズは2^0から2^15までを調べました。
全体的にFatFsのほうが書き込みが速く、特に小さなサイズの書き込みでは2倍以上の差があります。

一度の書き込みにかかる時間は512 byte程度までは同じで、emFileで10 ms程度、FatFsで5 ms程度でした。
書き込みにかかる時間が5 ms程度であればデータ取得の合間に十分処理できるので、FatFsを使ってロガーのプログラムを書いていこうと思います。

2012/12/02

Maker Faire Tokyo 2012出展しました

DIY系イベントMaker Faire Tokyo 2012@fenrir_nさん@ina111さんとともに出展してきました。

展示内容は基本的に去年と同じような感じだったのですが、展示物が増えるなど多少進化はしています。

1. 姿勢表示追加

6軸加速度ジャイロセンサMPU-6050のDigital Motion Processorを使って姿勢を表示できるようにしました。
データとしてはピッチ・ロール・ヨーが出ますが、今のところは表示はピッチ角のみです。

センサ内部の姿勢計算アルゴリズムの詳細はわかりませんが、ジャイロの積分値を重力加速度の向きで補正しているようです。

2. 記録飛行の動画作成

10/22に行われた記録飛行の動画に各種計測値を入れたものを会場では流していました。
いろいろなポイントから映像を撮っていたので、4つの動画を組み合わせています。

3. 新基板作製中

新しい電装基板
一ヶ月ほど前に書いた記事の通り、新しい電装基板を作っています。
まだ届いていないGPSモジュール以外を実装して、これから各センサの動作チェックなどを行うところです。

4. ピトー管作製中

上の基板を発注するついでに、ピトー管用の圧力センサ基板を起こしました。
ピトー管用圧力センサ基板
これからピトー管の本体を作ります。
5孔のものを作って迎え角や横滑り角が測定できるかも試してみるつもりです。

展示を見ていただいた方々やその他関係者のみなさま、ありがとうございました。

2012/11/11

新基板設計完了

新電装基板の設計が完了し、Fusion PCBにガーバーファイルを送りました。
外形線が見えませんが、下図が設計した基板です。
表面
裏面
ホットプレートリフローも考えているので部品は片面実装です。

おおまかに仕様を書いておきます。
  • 搭載マイコン Cypress PSoC 5 (ARM Cortex M3 67MHz)
  • 入出力 32チャンネル(全チャンネルアナログ入出力・デジタル入出力対応)
  • 8チャンネルごとに異なる電源を用意(5V、3.3V、OPAMP出力、サーボ用外部電源)
  • シリアルサーボ用RS485 1チャンネル
  • XBee 2チャンネル
  • 6軸加速度・ジャイロセンサ InvenSense MPU-6000
  • 3軸地磁気センサ Honeywell HMC5983
  • 気圧センサ Measurement Specialties MS5611-01BA03
  • GPS u-blox NEO-6P
  • Micro SD
  • Micro USB
  • 電源 1セルLiPoまたはUSB
現在使っている基板からディスプレイを取り除いて、入出力チャンネルを増やしたようなものです。
Maker Faire Tokyo 2012までに届けば展示したいと思います。

2012/10/29

超音波高度計と気圧高度計の比較

以前の記事で予告していた超音波高度計と気圧高度計の比較を行ったのでその結果をまとめておきます。
使用したモジュール等の詳細は以前の記事を参照してください。

下図に測定した気圧・温度を高度に変換したものを示します。
測定した気圧高度とフィルタの適用結果。データを見やすくするために2mのオフセットがつけてある
フライト時間は4分程度ですが、今回の測定条件では0点の気圧は測定開始時と終了時で同じと見なしてよい程度しか変化していないようです。
また、地上滑走時には気圧センサのダイアフラムの振動によるノイズの増加が見えます。

生データにはノイズが多く、表示に使うには難しそうなのでFIRフィルタをかけてみました。
フィルタのカットオフ周波数を下げるにしたがってノイズは減りますが、細かな高度変化をマスクしてしまいます。
カットオフ周波数をどの程度にするかの参考にするためにも、10, 1, 0.1Hzとカットオフ周波数を変えて超音波高度と比較してみました。
今回のデータは記録飛行のものですが、川を越えるなど地面の高さが変化するので、超音波高度と気圧高度ではだいぶ違った値が出ています。
10HzのFIRフィルタをかけた気圧高度。比較のために超音波高度のデータも示した
上図は10Hzの結果です。
生データよりはいくらかましになりましたが、ノイズが多く表示してパイロットに伝えるには適さないものです。
1HzのFIRフィルタをかけた気圧高度。比較のために超音波高度のデータも示した
上図は1Hzの結果です。
細かな高度変化は超音波高度と同じ傾向を示しています。
ノイズも表示に耐えられる程度には少なくなっています。
0.1HzのFIRフィルタをかけた気圧高度。比較のために超音波高度のデータも示した
上図は0.1Hzの結果です。
さすがにフィルタがきつすぎるようで、細かな高度変化の情報は消えています。

以上により、適当なフィルタリングをすれば十分に使える精度の気圧高度計ができると考えられます。
しかし、長時間使った場合のゼロ点ドリフトなど、表示してパイロットに伝えるにはさらなる評価が必要になりそうです。

2012/09/10

一等三角点(三鷹村)のGPS測位

以前、富士川滑空場のGPS測位という記事で、相対Static測位によってばらつきの少ない測位解が得られることを書きました。
しかし、絶対的な座標がどの程度の精度で合っているかは、Google Earthに表示する程度の手段でしか確認できませんでした。
そこで、緯度・経度が既知の三角点の測量を行って、どの程度正しい座標が得られるのかを検証しました。

測位したのは一等三角点(三鷹村)です。
三角点の構造、歴史を説明する看板
写真の説明文にあるとおり、珍しく平地にある一等三角点です。

最寄りの電子基準点(小金井)との相対static測位をRTKLIBを使って行い、
北緯 35.677701620
東経 139.534315158
高度 95.49 m
という結果を得ました。
赤字は三角点の座標と異なる部分です。
今回は衛星の配置がよくなかったのか解のfix率はあまり良好ではなく、解のばらつきは標準偏差/RMSで10 cm以下、最大で20 cm以下です。
測位のようす。GPSアンテナを標石に乗せて測定した
三角点や電子基準点などの座標は、国土地理院の基準点成果等閲覧サービスで調べることができます。
それによると、一等三角点(三鷹村)の座標は、
北緯 35.677701361
東経 139.534316278
高度 95.62 m
となっています。
測位結果と三角点の座標の比較。図の原点が三角点の位置
両者の差は
南北 2.87 cm
東西 -10.14 cm
上下 -12.88 cm
であり、サブメートルの精度が出ていることがわかります。
また、全ての解は三角点を中心とした半径30 cmの円内に入っています。

この結果から、以前行った富士川滑空場の測量もこれと同等のサブメートルの精度で行われており、ほぼ正しい座標が得られていたのではないかと考えられます。

2012/08/28

電装標準化計画

Team'F'向けに作製している電装系ですが、実は某チームにも1台提供して使っていただいています。
交流飛行会2012で話を聞いた限りだと、手間をかけずに計器を積みたいという需要は確実にあるようなので、次のバージョンの電装系はある程度汎用性を持ったものにし、部品代程度での配布も考えています。
同時にセンサとのインターフェースやログの形式も汎用性のある形で「標準化」を行うつもりです。

大雑把な機能は下のビラのようにしようと考えています。
PDF版はこちら
表示部をAndroid端末に任せる他は、現在の電装系の上位互換にあたる機能を備えています。

11月の頭にモデルロケットを含めた電装標準化の話し合いがあるらしいので、その結果を踏まえて詳細な設計を始めようと思います。

興味や意見のある方はコメント欄やTwitter等でコンタクトしていただけるとありがたいです。

2012/08/21

L1帯GPS受信機による短期PPP Static解析の有効性

富士川滑空場の測量データのさらなる解析を行いました。
@fenrir_n さんの行ったPPP Static解析Static解析の示す座標が食い違いを見せるのはなぜか? というのがモチベーションです。

精密単独測位(PPP)と相対測位の違いはPPPに関する覚え書きにまとめられている通りですが、具体的なデータを使ってどの程度の差が出るかを比較してみました。
Static測位とPPP Static測位の比較
図は北東のポイントの測位データの解析結果です。
緑色がStatic解、紫色がPPP Static解ですが、両者には水平方向で1m前後、高さで2.5m程度の差があります。

この差がどこから来るのかを調べるために、電子基準点 蒲原を基準局・静岡清水市1を移動局として、使う周波数帯・測位時間を変えてStatic解、PPP Static解の比較を行いました。
Static測位とPPP Static測位の比較
L1帯15分間のデータを使った
上の図は富士川の測量条件に近い、L1帯の15分間のデータを使った解析結果です。
Static解のFix率がよくありませんが、2つの解には最大1.5m程度のずれがあります。

L1/L2帯の両方のデータを使って解析を行ったものが下の図です。
Static測位とPPP Static測位の比較
L1/L2帯15分間のデータを使った
2周波を使うためFix率は100%になり、電離層遅延の補正が効いているためか、方向によっては2つの解の差が小さくなっています。

Static測位とPPP Static測位の比較
L1/L2帯24時間のデータを使った

さらに、測位時間を24時間に延ばしてみました。
長時間の測位で相対測位にだいぶ近い誤差に落ち着いていることがわかります。

以上の結果から、L1帯GPS受信機を使った短期PPP Static測位では、Static測位のような高精度は期待できないことがわかりました。
PPP Static測位では電子基準点での観測データが不要で、精密軌道・時計には予報値が使えるのでリアルタイム測位ができるでは? と期待していましたが、そう甘くはないようです。

2012/07/19

高度測定法の比較

超音波距離計、GPS、気圧計による高度計測の実験を行ったので、その結果をまとめて人力飛行機に向いた高度計測法は何かを考えてみたいと思います。

超音波高度

Daedalusにも使われた人力飛行機では標準的な高度計測法です。
超音波の放射点と地面等の反射点の(最短)距離を高度としています。

現在使用している超音波距離計モジュールMaxbotix MB1360はかなり広い範囲に超音波を放射するため、グラウンドクルーが機体近くにいた場合などには誤った高度が測定されることがあります。
対策としては、コーンを取り付けて超音波の届く範囲を制限することが考えられます。

波の反射時間を利用した高度計測にはレーザー・電波高度計もあります。
ただし、通常のレーザー距離計で使う光は水を通り抜けてしまい、水面との距離の測定はできないようです。

気圧高度

通常の航空機で使われる高度計測法です。
標準大気モデルでの気圧と高度の関係から高度を求めています。
ゼロ点を適当に定めれば地面との距離もわかります。

人力飛行機の典型的な飛行高度である10m程度で生じる気圧差は小さいものなので、簡単に手に入るものでは最も精度の高いモジュールMeasurement SpecialtiesMS5611-01BA03で実験を行いました。
詳しい特性は同じモジュールで実験を行った@ina111さんのブログ記事を参考にしてください。
気圧高度には0mのリファレンスとして使った気圧が変動すると指示される高度と実際の高度の差が出てしまうという弱点があります。
また、たいていのセンサはダイアフラムのひずみを気圧として検出する方式なので、機体に載せて振動が加わった場合にはノイズが出ることも考えられます。

GPS高度

通常のGPSによる高度で、GPSモジュールから出力されるものです。

WGS84楕円体と測定に使うGPSアンテナの距離を高度としています。
地面との距離に直すには、測定地点のジオイド高、標高データが必要になるため、精度の高い測定を行いたい場合は事前に測量を行うのが望ましいです。

地面の裏側に隠れているGPS衛星からの電波は届かず、水平方向と高度方向のGPS衛星の配置が非対称になるという事情で、GPSの高度情報は水平方向に比べて一般的に精度が悪くなります。

搬送波位相を使って後処理を行えばより高精度な情報が得られます。
(GPS受信機を2台用意すればリアルタイム測位も可能です)
搬送波位相を使う方法には、衛星数が変化するポイントやサイクルスリップが起こるポイントで不連続に座標が変化するという弱点があります。
また、精度は基準点との距離、可視衛星数によって変化します。

測定法の比較

以上の測定法を実績のある超音波高度と比較します。
超音波高度には、グラウンドクルー(?) から反射による乱れが入っています。
(気圧センサは試験飛行で使用したことがないので、データが取れ次第追記します)

単独測位との比較を行ったグラフを以下に示します。
超音波高度・GPS高度(単独測位)・INS/GPS高度の比較
機体が静止しているはずの593640秒程度までに2m程度の高度変化があることがわかります。
高度変化の傾向は似ていますが、変化量には大きな差があります。

後処理Kinematic測位との比較を行ったグラフを以下に示します。
超音波高度・GPS高度(後処理Kinematic)の比較
測量の結果を適用する前のものは、滑走路の南北でのGPS高度の違いを反映して全体的に傾いていますが、測量の結果を適用したものは超音波高度と比較的よく一致しています。
しかし、可視衛星数の変化やサイクルスリップの影響でKinematic測位による高度にはところどころ急激な飛びが見られます。

以上の測定法の特徴をセンサのスペックとともにまとめたものが以下の表になります。

高度測定法の比較

超音波気圧GPS
(単独)
GPS
(後処理Kinematic)
サンプルレート- 10 Hz- 100 Hz
(要平均化)
- 5 Hz- 5 Hz
リアルタイム
(2台の受信機が必要)
絶対高度
(基準点が必要)

(要標高データ)

(要標高データ)
測定範囲- 10 m- 5000 m
(精度の高い範囲)
- 10000 m
(設定で可変)
- 10000 m
(設定で可変)
精度- 数 cm- 数 m
(ノイズ・ドリフトあり)
- 数 m
(ドリフトあり)
- 数10 cm
(飛びあり)

今回行った比較から、試験飛行や琵琶湖など絶対高度が重要な場合は超音波は優れた高度計測法であるといえます。
したがって、人力飛行機での高度計測には超音波距離計をメインに使い、その他の方法は補助的に使うのがよいと思います。

2012/07/18

XFLR5による安定微係数の推算

テストフライトで取得したログが結構な量たまってきたので、詳しい解析にかけてみるつもりです。
具体的には安定微係数の推定を行う予定ですが、初期値・参照値として安定微係数の値が必要になるので、XFLR5を使って求めてみました。

XFLRに機体モデルを入力し、Polars -> Define Stability Analysisで設定を行い解析すると、XFLR5.log等に縦・横の有次元・無次元安定微係数が出力されます。

XFLRで計算した安定微係数
エレベータ入力\delta_eに対する安定微係数は計算できましたが、エルロン入力\delta_a、ラダー入力\delta_rに対する安定微係数をどうやって計算するのかはよくわかりませんでした。
何か設定項目があるのかもしれません。

計算には機体の慣性モーメント・慣性乗積が必要になります。
これらの値は3次元CAD等を使って求めるのが正攻法なんでしょうが、とりあえず大体の値をつかむために、F-tecの設計計算書にあった値を使いました。
(余談ですが、この設計計算書にある安定微係数の推定プログラムでは、主翼・水平尾翼・垂直尾翼の揚力傾斜にDAE11のものを使っているので、安定微係数には多少の誤差があると思います)

安定微係数の推定には簡易推算公式がよく使われます。
XFLRの出力が妥当なものかどうか、簡易推算公式によるものと比較した結果が以下の表です。

縦の無次元安定微係数の比較

簡易推算公式XFLR
C_xu-0.0920 -0.0252
C_zu 0(仮定)-0.000831
C_mu 0(仮定)0.0239
C_xa 0.8830.917
C_za -6.19-6.02
C_ma -1.6-2.76
C_zq -4.98-1.13
C_mq -32.4-31.1
C_zde-0.383 -0.362
C_mde -2.49-2.28

符号・値ともよい一致を示しています。

XFLRが出力する有次元安定微係数の定義は航空機力学入門にあるものとは違うようなので、比較する際には機体重量・慣性モーメント等での規格化が必要です。
また、無次元では迎え角\alphaについての微係数だったものが、有次元では下方向速度\omegaについての微係数になっていたりする点にも注意が必要です。

飛行機設計入門2には、人力飛行機の運動の解析・安定微係数の例が載っています。
この本の安定微係数はいわゆるprimed derivativeであったりするので、こちらの値と比べる場合にも多少の換算が必要になると思います。

ここで得た値を初期値として使い、Filter Error Methodでフライトログから安定微係数を推定してみるつもりです。

2012/07/01

GPSによる閏秒の観測

1秒長い2012年7月1日」をGPSで観測してみました。

GPSの航法メッセージの第18フレーム・サブフレーム4にはUTCとGPS時刻の差などを表す補正パラメータがあります。
このパラメータが正しく解釈されていれば、UTCが59秒、60秒、00秒と変化する様子が見られるはずです。
何年かに1度しかない閏秒挿入なので、モジュールから出てくるGPS時刻・UTC・Leap Secondsがどのようになっているのか0.2秒刻みで観測してみました。
結果は下の図の通りです。

GPS Time of Week = 14.4s
Leap Secondsが挿入直前
GPS Time of Week = 14.6s
Leap Secondsが16秒に
内部計算の影響(?)でUTCが58秒に
GPS Time of Week = 14.8s
GPS Time of Week = 15.0s
UTCが60秒に
ここからが閏秒
GPS Time of Week = 15.2s
GPS Time of Week = 15.4s
GPS Time of Week = 15.6s
内部計算の影響(?)でUTCが59秒に
GPS Time of Week = 15.8s
ここまで閏秒
GPS Time of Week = 16.0s
UTCが00秒に
ここからは通常の時刻出力
モジュール内部でどのような計算が行ってUTCを計算しているかはわかりませんが、米国沿岸警備隊ナビゲーションセンターの資料にある計算式に従っているのではないかと思います。
GPSモジュールによっては閏秒付近で異常な時刻出力をするものもあるようですが、u-blox LEA-6Tでは(UTCが一時的に巻き戻って見えることがあるものの)正しく処理できているようです。

2012/06/28

富士川滑空場のGPS測位

@fenrir_nさんと協力して行った富士川滑空場のGPS測位ですが、RTKLIBのPPP-Staticモードではなく相対Staticモードで解析を行ってみました。
解析の流れは基本的に以前の記事Kinematic GPSによる飛行軌跡の解析と変わりませんが、いくつか気づいたこともあるので書いておこうと思います。

1. ログの取得
以前に書いたように受信機にはu-bloxLEA-6Tを使っています。
ファームウエアのバージョンは6.02です。
この受信機に1575R-Aという型番のパッチアンテナを組み合わせています。
このアンテナは小さくて安いという理由で選定しましたが、GPS L1アンテナ・受信機評価にあるように、アンテナの癖によってもRTK-GPS性能に差が出るようなので、もっと注意して選ぶべきかもしれません。

2. ログの変換
ubx2rinexの他にRTKLIBに同梱されているRTKCONVを使ってもログデータからRINEX形式への変換が行えます。
RTKCONVには、
  • わざわざソースファイルを集めてコンパイルする必要がない
  • SBAS衛星の情報など、ubx2rinexより多くの情報を出力できる
等の利点があります。

3. 電子基準点での観測値のダウンロード
最寄りの電子基準点を探すには@fenrir_nさん作のスクリプトも便利に使えると思います。

4. 精密歴のダウンロード
こちらも@fenrir_nさん作のスクリプトを使ってダウンロードすることもできます。

5. RTKLIBによる解析
電子基準点の座標は地点を手動で選ばなくとも、Get from Position Fileを指定しておけばファイル名から自動的に適切な電子基準点を判断するようです。



Setting1タブのElevation / SNR Maskの設定で低仰角・低C/N比の衛星を排除すると、fix率が上がることもあります。
このパラメータは要調整のようです。


LEA-4T 2 台でリアルタイムキネマティック(RTK) GPSにあるように、Setting2/Statisticsタブのパラメータが標準のままだとなかなかFix解が出ないようです。
ここもパラメータの微調整が必要なところです。



このあたりの調整については、RTKLIB: BeagleBoard-based RTK-GPS reciverに情報があります。

MiscタブのTime Interpolation of Base Station DataをONにすると、国土地理院の電子基準点データ提供サービス経由では30秒間隔でしか提供されない電子基準点の観測値の補間を行うようです。


以上の手順を踏んで解析した富士川滑空場の四隅の座標は、
北西: 35.124669690 138.630666971 46.5418m
北東: 35.124743770 138.630984164 46.4627m
南西: 35.117140819 138.632381104 43.5851m
南東: 35.117192122 138.632682811 43.6902m
となりました。
解の範囲は水平方向で大体1cm程度に収まっています。



搬送波位相を使ったGPS測量の謳い文句通り、cm精度での測位ができているようです。

2012/05/31

ログの仕様

作製している計器のログはSylphideデータ形式で記録しています。
ただし、Sylphide形式には人力機特有のデータを記録するページがないため、独自にHページという拡張ページを作っています。
以下にその仕様をまとめておきます。

オフセット 備考 変換例
0 0x48 ヘッダ ‘H’
[1–2] 0x00 0x00 (予約) 0
3 0xC8 内部時刻LSB 200
[4–7] 0xD0 0x1B 0x00 0x00 GPS時刻
Little Endian
単位はmsec
7120
[(8+n *2)–(9+n* 2)] 0x35 0x0E 回転数計のカウント値
(0≦n≦1)
Little Endian
レシプロカル式・生データ
3637
[12–13] 0x12 0x00 対気速度計のカウント値
Little Endian
直接計数式・生データ
18
[14–15] 0x14 0x00 超音波高度計の計測値
Little Endian
単位はcm
20
[(16+n* 2)–(17+n* 2)] 0x49 0x71 操縦桿入力のAD変換値
(0≦n≦2)
Little Endian
可変抵抗式・生データ
29001
[(22+n *2)–(23+n* 2)] 0x01 0xFC AUX端子1のAD変換値
(0≦n≦3)
Little Endian
通常は未使用
64513

基本的には16ビットデータが並んでいるだけです。
記録は25Hzで行っています。

この他に
Gページ(GPS・5Hz)
Aページ(加速度・ジャイロ・100Hz)
Mページ(地磁気・100Hz)
を記録しています。

2012/04/15

MPU-6050校正作業

InvenSenseの6DOFセンサ MPU-6050の校正作業を行いました。

校正作業は重力加速度、レートテーブルによる一定の角速度を基準にして、センサのスケーリングファクタ、ゼロ点などを求める作業です。
恒温槽を使い異なる温度でのデータを取ることで、各パラメータの温度特性も求めます。

同様の試験を別な6DOFセンサに対して行った結果は@fenrirさんのブログに載っています。

下の写真が作業の様子です。
直交治具に取り付け、恒温槽中のレートテーブルに固定した計器
MPU-6050は、加速度・角速度の測定レンジが変えられるようになっていますが、あまり機動の激しくない人力飛行機に使うつもりなので、最も狭いレンジの+-2g, +-250dpsを選びました。

測定は恒温槽の温度を設定し、与える角速度を変えながら加速度・ジャイロ出力を測定するという方法で行いました。
代表的なものとして、25℃での測定結果を以下に示します。
X軸まわりの回転を与えたときのジャイロ出力
Y軸まわりの回転を与えたときのジャイロ出力
Z軸まわりの回転を与えたときのジャイロ出力
(20120830追記)センサ出力のばらつきはレートテーブルか恒温槽の振動からくるもので、センサそのもののノイズではありません。

また、無回転時の加速度・ジャイロ出力の温度特性は以下のようになりました。
X軸を上向きに設置したときの加速度・ジャイロセンサの温度特性
Y軸を上向きに設置したときの加速度・ジャイロセンサの温度特性 
Z軸を下向きに設置したときの加速度・ジャイロセンサの温度特性 
これらの試験の結果から、センサのスケールファクタを求めると以下のようになりました。
加速度
X: 846.7 LSB/ms^-2
Y: 843.4 LSB/ms^-2
Z: 843.5 LSB/ms^-2
ジャイロ
X: 131.30 LSB/dps
Y: 131.22 LSB/dps
Z: 131.06 LSB/dps
加速度・ジャイロともに各軸の特性はほぼ揃っているようです。
加速度センサのスケールファクタがデータシートの半分になっていますが、Engineering Sample版であるRev. Cのチップの仕様のようです。
軸間の干渉は加速度センサで1%以下、ジャイロセンサで2%以下と求まりました。

また、ゼロ点とその温度特性を求めると以下のようになりました。
加速度
X: 33232 - 0.0034833 T
Y: 32957 - 0.0078194 T
Z: 36296 - 0.10086 T
ジャイロ
X: 32617 + 0.015245 T
Y: 33065 - 0.010631 T
Z: 32651 + 0.0024063 T
このセンサは4 * 4 * 0.9 mmのサイズでX, Y軸のセンサとZ軸のセンサの作りは対称でないと考えられます。
それがゼロ点の温度特性に現れているようです。

今回の作業で求めたパラメータは全てデータシート通りの値で、期待通りの結果が得られたと言えます。

これらのパラメータを使って、テストフライト時に取得したデータを詳しく解析しようと思います。

2012/02/25

学生向けPSoCワークショップ

2月14日に行われた学生向けPSoC3ワークショップに参加してきました。
無料配布の開発キットCY8CKIT-030も目的のひとつです。

ワークショップの内容は、PSoC3の基礎的な使い方で、
  • Lab1-1 PSoC Creatorの使い方
  • Lab1-2 PWM
  • Lab1-3 GPIO操作
  • Lab1-4 割り込み
  • Lab2    AD変換
という感じです。

開始時間が遅れたにもかかわらず、参加者の飲み込みが早いのか、1時間ほどメニューを早く消化してしまい、もともとあった自由時間は2時間になりました。

自由時間にはCapSenseの使い方の話と、(ET2011で話したらしい?)PSoC3/5の高精度アナログに関するクイズがありました。
アナログの話は、時間不足で最後まで説明が聞けなかった部分があるので、補足を兼ねてここに書いておこうと思います。

問題は以下のようなものです。
  • 「1KΩの負荷をつないだポートに1024mVを正確に出力せよ」
単純に考えれば、以下のようにPSoCのモジュールを配置すればよいはずです。
単純な回答例
うまくいかない例
実はこのときに出力される電圧は、使用するポートによって変わります。
特殊なポートを使わない限り、オペアンプの出力とVoutの間には、いくつかのアナログスイッチが入っていて、その抵抗は数100Ωになります。
そのため、Voutの電圧は1kΩとアナログスイッチの抵抗で分圧されたものになってしまい、500mV程度など、1024mVにはほど遠い値が出力されます。

解その1
こちらは単純です。
出力に使うオペアンプモジュールがアナログスイッチを介さず直接つながっているピンをデータシート、Technical Reference Manual等を参考に探し出し、そこにつないでしまえばおしまいです。
具体的にはP0.0, P0.1, P3.6, P3.7を使えばよいです。
これらの出力ピンを指定すると、4つあるオペアンプモジュールのうち適当なものをアナログルータは自動で選択してくれるようです。

解その2
こちらはPSoC3/5の内部をよく知らないとできない方法で、任意のピンに対して有効です。
最適なアナログ配線を手で行うのが肝になります。

PSoC CreatorにはManual Routingというモジュール群があります。
Manual Routingモジュール
今まで使う場面もなく、機能も把握していなかったのですが、機能は以下のようになっているようです。
  • Net Join: 2つの配線の相互接続
  • Resource Constraint: 使う内部配線の指定
  • Resource Reserve: 内部配線の予約(自動配線から除外)
  • Stay Awake: スリープ時にも生かしておく配線の指定
  • Terminal Reserve: モジュールの端子を予約(自動配線から除外)
上の2つは、アナログルータに望んだ配線をさせる、下の3つはアナログルータによる配線を禁止するなどして、レジスタから直接アナログ部にアクセスする場合に有用な機能です。

また、Design Wide ResourceのDirectivesを使うと、内部にいくつかある同じモジュールのうちどのモジュールを使うかを制限することができます。
PSoC Creatorのヘルプに詳しい使い方が書いてあります。

これらを使って、Voutになる端子とオペアンプの反転入力を直接つなぎ、きちんとフィードバックがかかるようにしたのが以下の図になります。

内部の配線を手動で指定
使うオペアンプモジュールを指定
手動で内部配線を指定することで、きちんとフィードバックがかかるようになり、1024mVが出力されるようになりました。

PSoC1と3/5とを比べると、アナログのパズル的な要素はだいぶ減った印象はありますが、内部にある大量のアナログスイッチとアナログルータのおかげで直接は目につかないだけで、性能を引き出そうとすると内部構造がどうなっているかをきちんと考えなくてはならないようです。

今回のセミナでは、長い自由時間に気になっていたことを質問できたり、何回か参加したPSoCセミナの中ではかなり満足できるものでした。
PSoC5で似たようなセミナが行われれば、ぜひ参加したいところです。