APMから出力されるMAVLinkデータの解析の仕方がわからず困っています。
以前に何度か皆さんのお世話になっていろいろとやってみてはいるのですが,いまいち ピンとこない状態です。
どうにかして,バッテリー電圧や電流値,高度,速度 などを取り出してPCとは別の装置で表示したいのですが,
現在取得できているデータファイル 添付します。
このように STX "FE"から始まるHEXデータはきれいに取れています。データの長さ,連番,システムID,
コンポーネントID までは意味が分かります。
問題は 次のメッセージID,PAYLOADと呼ばれるデータの部分です。
メッセージIDの番号は(11E,4A,21,00 だけのようです)MAVLinkページのどこに対応表のようなものが
あるのでしょうか?
また,PAYLOADデータは具体的にどこの表から計算方法を調べれば良いのでしょうか。
チェックサム(CKA,CKB)も難題で どう計算しても合いません。
MiniOSD もMAVLnkデータを使っているので,そちらもいろいろと調べましたが,やはり解決方法は
見つかりませんでした。
当方コプター自体は QUAD,HEX,OCT まで制作して APMでうまく飛んでいます。
Xbeeでの半自動プロポ操作を目指しています。
上記 おわかりになる方 ぜひよろしくお願いします。
Replies
早々の御応答 ありがとうございます。
たいへん難しい内容で,ちょっとパニクッています。
お送りいただいたプログラムを入れて ねじり鉢巻きで奮闘してみます。
たいへんありがとうございます。感謝の気持ちでいっぱいです。
これで 希望の装置が完成しそうです。
ありがとうございました。
ソースが添付されてませんでしたね。
crc.c
すみません、CRC Extraという機能が抜けていましたね。
おかげさまで勉強になりました!
●CRC Extra
各パケットフォーマットであるxmlを元に1byteのデータを生成します。この値を含めてCRC計算することにより、同じATTITUDEパケットであってもフォーマットバージョンの異なるのパケットを破棄するしくみです。詳しくはこのあたりに記載されています。
http://qgroundcontrol.org/mavlink/crc_extra_calculation
手っ取り早くCEC Extra値を知るためには下に各パケット毎のヘッダファイルがあります。
https://github.com/diydrones/ardupilot/tree/master/libraries/GCS_MA...
ATTITUDEパケットの場合、mavlink_msg_attitude.h内で下のように定義されています。
-----------------------------------------------------
#define MAVLINK_MSG_ID_ATTITUDE_CRC 39
-----------------------------------------------------
ATTITUDEパケットのCRC Extra値は39になります。
●CRC計算方法
基本的にはFEを除くデータで計算しますが、データ列の最後にCRC Extra値を加えます。
JDC KKさんが例としてあげられてパケットの場合は下のようなデータになります。
-------------------------------------------------------------------------------------
1C,00,01,01,1E ..... 4E,BA,27 ← 最後の27がATTITUDEパケットのCRC ExtraのHex値
-------------------------------------------------------------------------------------
例としてCのソースを添付します。
実行結果は下のようになります。
-------------------------------------------------------------------------------------
$ ./crc
fe 1c 00 01 01 1e d0 47 00 00 6c 39 03 bd 54 df 62 3b 32 d6 3d c0 84 f7 ac ba 60 0c 4d 3a d0 71 4e ba d3 2e
-------------------------------------------------------------------------------------
ありがとうございます。
すると あとはAPMに[どこのデータを送れ] と要求する方法がわかれば 必要なデータが得られそうです。
MiniOSD はそれをやっているはずなので,そちらでも確認したいと思います。
それと CRC16 は具体的にどういう計算方法か 御存知でしょうか?
たとえば
FE 1C 00 01 01 1E D0 47 00 00 6C 39 03 BD 54 DF 62 3B 32 D6 3D C0 84 F7 AC BA 60 0C 4D 3A D0 71 4E BA D3 2E
これはどういう計算をすると "2ED3" になるのでしょうか?
よろしくお願いします。
こんにちは。
添付されているダンプは4種類のパケットのみであり、JDC KKさんの認識で合っていると思います。
チェックサムは先頭のFEを除いた部分のCRC16になっていたはずです。
早々の御応答 ありがとうございます。
はい見ています。
たとえば
FE 14 01 01 01 4A 00 00 00 00 00 00 00 00 48 E1 3E 41 0A D7 A3 3D BE 00 00 00 89 EC
STX 個数 連番 SYS COMP この4A(74)から #74 VFR_HUD のデータ airspeed,groundspeed,heading,throttle,alt,climb
ということでしょうか?
そうすると 先に添付した受信データはGLOBAL_POSITION_INT ( #33 ) ,ATTITUDE ( #30 ) ,VFR_HUD ( #74 )
しか無い ということなのでしょうか?
MAVLINK Common Message Set は、ご存じですか?
https://pixhawk.ethz.ch/mavlink/