April 13, 2012

Super Sylphide 進捗状況(50) -- Sylphideデータ形式

前回の進捗記事ではオートパイロットシステムSuper SylphideおよびTinyFeather通信プロトコルについて紹介しましたが、今回はそのペイロードとして載ってくるデータの形式について記事を書きたいと思います。このデータ形式は32bytesの固定長で、通信のペイロードとして載ってくる以外に、SDカードに保存されるログの形式としても使っています。

データ形式の構造は単純で、先頭1byteによって残り31bytesにどのようなデータが含まれているかを示しています。種類ごとに『ページ』という呼び方をしており、現在のところ以下のようなものがあります。

ページ種類内容
Nページ航法情報
GページGPS情報(中身はu-bloxのubx形式)
AページA/D変換データ
FページPWM入出力情報
Mページ地磁気情報
PページADS情報
Cページコマンド
Dページデバック情報

ページが違えば、内部の形式はまた定義が異なるのですが、例えば、航法情報を保存しているNページは以下のような形式になっています。

オフセット備考変換例
00x4Eヘッダ`N'
10x03シーケンス番号3
20x00(予約)0
30x00(予約)0
[4-7]0xD0 0x1B 0x00 0x00GPS時刻, Little Endian, 単位はmsec7120
[8-11]0xC8 0x6F 0x49 0x15緯度, Little Endian, signed, 単位は[0.0000001deg]35.713428
[12-15]0x28 0x09 0x4E 0x53経度, Little Endian, signed, 単位は[0.0000001deg]139.762308
[16-19]0x00 0x35 0x0C 0x00高度, Little Endian, signed, 単位は[0.0001m]80
[20-21]0x32 0x00北方向速度, Little Endian, signed, 単位は[0.01m]0.5
[22-23]0x9C 0xFF東方向速度, Little Endian, signed, 単位は[0.01m]-1.0
[24-25]0x05 0x00下方向速度, Little Endian, signed, 単位は[0.01m]0.05
[26-27]0x39 0x30ヘディング(ヨー), Little Endian, signed, 単位は[0.01deg]123.45
[28-29]0x2E 0xFFロール, Little Endian, signed, 単位は[0.01deg]-2.1
[30-31]0x7B 0x00ピッチ, Little Endian, signed, 単位は[0.01deg]1.23

その他ページの定義についてはコードを見ていただくのが一番だと思いますので、このデータ形式を処理するC++ソースJavaソースを公開したいと思います。

なおデータ形式を32byutes固定長にしたのは、2の乗数にすると効果的にログ保存ができるためです。SDカードに記録する際にはセクタサイズ(512bytes)等を意識して書き込みをするとよいので、その長さを効率よく使えるよう32bytesとしました。また、通信プロトコルに32bytesの固定長モードがあるというのも、データ形式が32bytes固定長を効率よく転送できるようにするためです。

※その後、TinyFeatherを自転車のロガーとして使ってみました

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









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。