February 12, 2009Super Sylphide 進捗状況(23) -- 下位プロトコルの策定オートパイロットシステム Super Sylphideですが、地上側のソフトウェアが整備されつつあり、通信環境に関する作業を中心に行っています。そこで問題となったのが、通信プロトコルや通信回線の太さといった極めて泥臭い話、すなわち試行錯誤が要求される部分を決定しなければならないということでした。今回のその試行錯誤の一端として、決定した下位レベルのプロトコルの話を紹介したいと思います。 現在Super Sylphideのログデータは32bytesの固定長で一つの意味単位(仮にページと呼ぶことにします)を形成しています。その32bytesの先頭バイトがそのページの性格を示しており、例えば'A'ならばセンサのA/D変換結果、'G'ならばGPSからの情報が中には入っているよ、ということを示す仕様にしてありました。 SDカードに記録されたログデータを解析する分には頭出し、つまりどこからページがはじまるかわかっており、なおかつデータの完全性も保障されているのでパースが簡単です。しかしこの32bytes固定長仕様のログデータを、リアルタイムに通信でやり取りしようとすると、どこが先頭なのか認識できない、ましてや途中でデータが途切れるおそれがあります。そこでこのデータを包み、頭出しとデータの完全性を確認する機能を追加する下位プロトコルを策定することになりました。色々と検討した結果、以下の図のような仕様としました。 ヘッダ(12bits、0xF7E)は頭出しを簡単に行えるようにするためのもので、いままでのログデータから最も出現頻度が低い組み合わせを選びました。ヘッダに続く4bitsはこの意味単位の性格づけ(要返答など)をするために予約としました。続く2bytesはシーケンス番号で、トランザクションを構成する際に利用します。その後には32bytes固定長ページが続き、最後に付加したCRC-16によってデータの破損がないか検出できるようにしました。データの破損は付加されているCRC-16と受信側で新たに計算したCRC-16を比較し、不一致の場合はデータが破損していると判断、次のヘッダがでてくるまで受信結果を破棄するようにしました。 この下位プロトコルを用いた通信の実験をSuper SylphideをUSBでパソコンに接続し行った結果、良好に動作していることを確認しました。データの破損検出については、通信に使うエンドポイント以外をbulk転送で埋めると、転送速度が落ちデータの歯抜けがおきることを利用して確認しました。通信回線を無線のXBeeに置き換えた場合どうなるかが、最大の山場です。近いうちに実験をしてみたいと考えています。 ※DSPの開発が一段落したので、DSPの開発遍歴についてまとめました。 コメント
高速ディジタル伝送では、最下位層のパケットヘッダに単純なパターンの繰り返しからなるプリアンブルを付加します。こうすると、簡単なステートマシンでヘッダの到来を検地できます。もちろんプリアンブルのパターンはヘッダおよびボディ中に現れないようにするのが理想です。 「走行中のラジコンカーの、エンジン温度等をモニタしたい」と思い立ち、某ストロベーリさんの500円AMモジュールを使った簡易テレメトリのようなものを開発しています。 このシステム、机上では問題なく通信できてしまうので困っています。解決策は部屋でラジコンを走らせるか、サーキットでコーディングするか、でしょうか。 Posted by: kanki : February 14, 2009 02:03 AMfenrirです。 >酔漢さん >kankiさん Xbeeを使いたいのは山々なんですが、2.4GHz帯の操縦装置(いわゆるプロポ)への干渉が心配なんです。無線LANや、R/C用の装置同士でも他社間で共存できないトラブルを起こした例もあるので、あえて別の周波数を選択しました。作業中は「Xbeeなら・・・」なんて考えてるんですけどね。 >kankiさん コメントする
|
スポンサード リンク
|