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ページは以下のような形式になっています。
オフセット | 例 | 備考 | 変換例 |
---|---|---|---|
0 | 0x4E | ヘッダ | `N' |
1 | 0x03 | シーケンス番号 | 3 |
2 | 0x00 | (予約) | 0 |
3 | 0x00 | (予約) | 0 |
[4-7] | 0xD0 0x1B 0x00 0x00 | GPS時刻, Little Endian, 単位はmsec | 7120 |
[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固定長を効率よく転送できるようにするためです。
コメント
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。