March 04, 2012March 29, 2012Super Sylphide 進捗状況(49) -- Sylphide通信プロトコルご無沙汰しています。オートパイロットシステム Super Sylphide、およびその後継機のTiny Featherでは、無線を使って地上からモニタおよび指令を行うことができますが、独自規格ながら通信データのプロトコルを定めて運用してきました。このたび @henshiru 氏がメインで開発していたSuper Sylphide用地上モニタソフトのMaeve(メイヴ)がオープンソース化(MIT Licenseだと思う)されたことを受けて、このプロトコルの話を少し書こうと思います。 世の中には色々なプロトコルがあるので、既存の規格にあわせることも考えたのですが、なかなかお手ごろなシンプルなものがありません。僕が欲しいと思ったのは、流れてくるデータを意味単位に切り分けられること、簡単なエラー検出、この2つがあればいいと思いました。エラー訂正など、より機能を充実させるためにはTCP/IP方式で、このプロトコルをさらに上位プロトコルで包んであげればよいという思想も背景にあります。 結局、独自規格として以下に定めるSylphideプロトコル(固定長と可変長の2タイプ)を定めました。 0/32bytes 固定長プロトコル
N bytes 可変長プロトコル
転送効率やエラー検出能力について詳細に検証したことはないのですが、これまで使ってきて大きな問題は発生していません。ちよっとした補足としては、ヘッダ(0xF7, 0xEX)については、ペイロードを調べて出現確率が最も低い組み合わせを算出しました。 現在、このプロトコルのパーサとしてC++版、およびJava版があります。拡張は簡単にできるよう、それぞれstd::[i/o]streamとJava.io.Filter[Input/Output]Streamに準拠させてました。なおJava版は、ある目的のために最近作ったもので、近いうちに成果物をださればよいなと考えています。 ※次の進捗記事は、通信プロトコルのペイロードにあたる部分について書きました。 |
かれんだ~
スポンサード リンク
|