Flight Coach BBS

飛行軌跡のジャンプ位置におけるJSONファイルの修正について

19 コメント
views
2 フォロー

JSONファイルの修正の件ですが、以前投稿しましたコメントのように、Mission Plannerのエラー修正のアルゴリズムを理解しないと修正が難しいのですが、取りあえず簡単にできる修正をJSONファイルに施してみました。
画像1
 この図は以前投稿致しました、GPS,MP,FCのグラフですが、ジャンプ位置の16秒前(図中の赤矢印)からジャンプ位置まで、JSONファイルの位置情報(緑線)をGPSの位置情報(黒線)に変更してみました。修正前と修正後のリボントレースを下記に示します。
画像1
画像1
 修正後は当然ジャンプは見られませんが、ジャンプ位置付近の飛行軌跡が不自然です。これは、修正期間についてはカルマンフィルターなどによる予測値を無視して生のGPSの位置情報を使用したためで、やはり正確に修正するためにはカルマンフィルターなどによるエラー修正方法を理解しないといけません。
 今回の結果は、ジャンプ付近の位置情報に大きな誤差が見込まれますので、参考程度にご笑覧下さい。

TakJP
作成: 2022/08/20 (土) 14:35:41
履歴通報 ...
1

TakJP様
わたしも昨日5フライトした中の1フライトにジャンプが発生しました。しかも3ヶ所も発生していました。
ということでジャンプ問題を真剣に考え始めたところですがTakJP様が兼ねてからご提案されているジャンプはJSONファイルから修正できるという考えには共感しておりました。

FlightCoachはスムーズな軌跡を描くため位置の連続性が重要ですがArdupilotにとっては位置の連続性は関係なく自動飛行のために現在の正確な位置こそが重要なはずです。
EKFの中身は全く理解していないので単なる妄想ですが、TakJP様やmoon様が調査されたように値が突然ジャンプすることがあることからこれまで積分などで得たPOSの位置情報よりGPSの位置情報の方が信頼できる判断し一気に修正することがあるのではないかと思います。
これは即ちEKFはジャンプ前までのGPSは信頼できないと判断していたことになります。
そこでジャンプを修正する場合は、POSのジャンプ後の値が正しい(EKFを尊重して)としてそこから過去に遡って(GPSは無視して)POSのラインと一致するまで変化率制限などを使い収束させるのは如何でしょうか。

2

soramon様
早速コメントを頂き、ありがとうございました。また、JSONファイルの修正についてご共感頂き、ありがとうございます。ただし、私は「ジャンプはJSONファイルから修正できる」とは申し上げておりません。「JSONファイルから修正したい」という立場です。
 さて、ご提案の修正方法についてですが、まだ良く理解できておりません。下図の赤い破線のように、ある変化率以下の直線あるいは曲線でPOSの位置情報(緑線)を近似すると言うことでしょうか。恐縮ですが、ご教授頂ければ幸いです。
画像1

3

TakJP様
私の考えはTakJP様のグラフで示されたイメージの通りです。しかしグラフ化してみるとリボン図がパキッと折れ曲がりますね。漸近する方法に工夫が要りますね。

4

soramon様
ご指摘の通り、このままですとジャンプ位置でリボン図が折れ曲がりますね。何か良い方法はないでしょうか。

5

TakJP様
スムージング処理をにわか検索して試しましたが思い描くラインになりません。身の丈を考えてEKFを尊重する案も無かったことにして単純移動平均で描いたのが以下のグラフです。赤点線が当初案、紫が単純移動平均です。平均時間は前後1.1秒(合計2.2秒)の移動平均にしています。実際には機速や旋回半径と滑らかさの妥協点を探すことになります。

画像1

フリーのEXCELもどきではLOGデータは重すぎて固まるのでLOGデータからGPSの経度データだけを抜き取りGPSデータを少しずらしてPOSデータとしていますので本物のデータではありませんがご容赦ください。

以前TakJP様からご教示いただいたJSONファイルのNED座標データをそれぞれ単純移動平均するだけでそれらしいリボン図になれば大変都合が良さそうです。
テストしようとEXCELもどきでJSONファイルを読ませたら改行マークが無いためか何もできません。
ファイル操作となると荷が重いのでテストは断念しています。

6

soramon様
 ジャンプ前後の飛行軌跡の修正について、大変貴重なアイデアを頂きありがとうございました。貴殿がお考えの移動平均は、POS(緑線)の当該値の前後1.1秒の移動平均値と考えて宜しいでしょうか。単純移動平均及び加重移動平均を含めて検討してみます。
 データの取り扱いについてですが、データ数が大変多いのでEXCEL等で取り扱うのは大変かもしれません。Plotterで作成されるJSONファイルはその名の通り、JSON形式で記述されたデータですのでPython等での取り扱いは比較的容易です。私はPythonでプログラムを組んでデータを一括編集しています。Pythonには様々な統計解析のライブラリーが充実していますので、データの解析も自分でプログラムを組む必要は無く、対応するモジュールをImportすれば良いので、大変楽に解析ができます。統計解析にはお勧めのプログラミング言語です。
 解析の結果が出ましたら、また報告させて頂きますので、ご検討の程宜しくお願い致します。

7

TakJP様
「POS(緑線)の当該値の前後1.1秒の移動平均値」です。どうやってもジャンプした個所から遡ってスムーズな軌跡が描けなかったのとGPS値を参考にしてしまうとbinファイルから手を付けることになるのでシンプルに考えました。ジャンプしてないように見えれば良い訳けですから。
20年ほど前にVB6でバイナリファイルを触ったことがある程度の素人ですが最近の言語を検索しているとLUAかPythonが出てくるのでardupilotでも使えそうなLUAを試そうかと思っていましたがお勧めはPythonですか、ちょっと考えなおしてみます。今後もアドバス頂けましたらうれしいです。

8

soramon様
 貴殿のご提案による単純移動平均を用いたJSONファイルの修正ができましたので、ご報告致します。下図に、修正前のリボントレースと単純移動平均による修正後のそれを示します。
画像1
画像1
 以前のGPSの値を用いた修正の場合と比較して、ジャンプ前後の飛行軌跡は少し滑らかになりました。しかし、データの修正開始位置において飛行軌跡が折れ曲がっています。また、ジャンプの状況によって、データ修正の開始及び終了位置や単純移動平均するデータ数を適切に選ぶ必要があり、少し厄介です。今回、単純移動平均したデータ数は前後2秒(データ数50個)で、ジャンプ前の4秒からジャンプ後の2.8秒間を補正しています。
 また、下図は修正したデータを示しており、縦軸はJSONファイルにおけるNED座標のN(m)です。黒線が修正する前で赤線が修正後の値を示しています。データ修正の入口のところで赤線が折れ曲がっており、リボントレースもこの位置で折れ曲がっています。
画像1
 今後はカルマンフィルターによる補正なども考えてみたいと思います。以上、ご検討頂ければ幸いです。

9

TakJP様
変換ありがとうございます。ジャンプ地点の前後のみではなくジャンプ位置を特定せずにフライト全域で移動平均するイメージでした。この場合、正常なリボン図も鈍るので滑らかさの妥協点を探すことになります
(機速や旋回半径と関係ありそうです)。
当方もpythonをかじり始めましたが未だ辞書型って何?といったところで停滞中です。
ご無理を言って恐縮ですが全域移動平均のリボン図を試して頂けると嬉しいです。

また、TakJP様が以前仰っていたようにEKF_パラメータでフィルタの調整ができそうですが、カルマンフィルターの知識が無い上に翻訳機の問題なのかパラメータの意味と効果が良く分かりません。ジャンプの再現性もほぼ無いのでこちらは手がついていません。

10

soramon様
フライト全域で移動平均した結果を下図に示します。
画像1
 これは1回移動平均操作をした結果で、前回の投稿でお示しした結果とほぼ同等です。ジャンプの入口でリボン図が折れ曲がっています。また、フライト全体を見ますと、全体的に飛行軌跡が滑らかとなっています。
画像1
 次にこの図は全域での移動平均操作を2回実施した結果で、今度はリボン図の折れ曲がりは見られず滑らかなループになっています。全体を見ますと、更に飛行軌跡は滑らかとなっており、曲技の角は取れてRのようになっています。例えば、トライアングルの三角形は角が取れてループのようになります。
画像1
 これは、NED座標のNの時間変化を修正のあるなしで比較したもので、修正無しより1回目の修正、更に2回目の修正で角が取れて変化が滑らかになる様子が分かります。
 以上の解析から、もしリボン図のジャンプを、JSONファイル上のNED座標値の移動平均で修正する場合は、修正はジャンプの前後に限る方が良いと思います。
 以上、ご報告でした。

11

TakJP様
再試行ありがとうございました。

12

下図に、修正前とジャンプ域のみ単純移動平均操作を2回実施した修正後のリボン図を示します。ループの中程(修正操作の入口,赤矢印)とループの出口(修正操作の出口,赤矢印)に多少不自然さが残りますが、修正前と比較すると、修正精度は抜きにしてある程度見た目上ジャンプの修正ができたのではないかと思います。
画像1
画像1

13

TakJP 様
アドバイスしていただいたPythonで自動変換プログラムを書いてみました。
JSONファイルから、3軸それぞれの位置移動を2回微分して加速度をもとめそのベクトルの大きさが閾値(機体の移動・旋回性能?)を超えたところをジャンプ場所として自動抽出しました。
自動抽出したジャンプ場所を中心に100データの区間をサンプル数31個の移動平均を2回実施しました。ここでTakJP 様と同様に移動平均区間の開始と終了個所で多少不自然さが残ったので、全域をサンプル数11個の移動平均を行ったものが以下のものになります。
画像1

Python便利ですね。素人でもJSONファイルの読み書きができました。アドバイスありがとうございました。

15

soramon様
ゼロから始めてもうプログラムが組めるとは、感服致しました。私の場合は、プログラムが組めるようになるには学び始めてから半年以上かかりました。Pythonには、移動平均やカルマンフィルターなどのデータ解析や辞書型データのJSON型データへの変換などのモジュールが揃っていますので、プログラミングが楽になります。
 さて、ジャンプ場所の特定ですが、私の場合は当該時刻の移動距離と前時刻の移動距離の比が閾値を超えた場合としました。データ間の時間間隔が一定ですので、soramon様の場合と同じことになりますね。ところで、私のフライトデータでは、JSONファイルの位置情報の移動平均を取った場合ジャンプ位置前後のデータの影響が残ってしまい、不自然な飛行軌跡となっていました。そこで、ジャンプ時刻までは正常な値で、ジャンプした後徐々に正常な値に漸近するようなケースに限って、ジャンプ時の値とジャンプ後数秒後の値を直線で結び、これに移動平均操作を施しました。ジャンプ後何秒後の値を直線で結ぶかはリボン図を見て適切な値を与える必要があります。このような操作を行った結果を下図に示します。なお、細かな凹凸はカルマン平滑化法で取り除きました。
画像1
 修正後のリボン図に直線部分が少し残ってしまいました。移動平均する個数やジャンプ後の直線近似するデータ数などのパラメータをもう少し吟味する必要があります。このケースでは、ジャンプ後はジャンプ前の飛行軌跡に沿った飛行軌跡になりますので、適切なパラメータさえ与えることができれば、私のケースではこの修正方法は妥当と思われます。NED座標のN値の時間変化も示します。この手法の考え方が分かるかと思います。今回のケースのようにジャンプ後に正常な値に漸近するようなケースには、この修正方法は有用ではないでしょうか。
画像1
 次に変換ソフトの一般公開についてですが、私は少し懸念を持っています。といいますのは、soramon様や私が行っている方法は、Flight Coachが作成したJSONファイルを書き換えて使用していますので、著作権に抵触する可能性があるのでは、と思っています。修正の考え方を公開するのは問題ないと思いますが、その手法をプログラミングしたものを一般公開するには、少なくともFlight Coachの作成者の了解を得る必要があるのではないでしょうか。著作権につきましては、私は素人ですので慎重になりすぎているのかもしれません。この分野に詳しい方がおられましたらご教示頂ければ幸いです。

16

前回投稿しました方法と同様に、リボン図のジャンプの状況として、ジャンプ時刻までは正常な値で、ジャンプした後徐々に正常な値に漸近すると判断される場合に限って、ジャンプ時の値とジャンプ後数秒後の値を直線で結び、これに移動平均操作を施しました。前回のケースで、パラメータを吟味して与えた結果ジャンプのあったループのリボン図が下記のようになりました。移動平均したままですと多少凹凸が残りますので、前回と同様カルマン平滑化操作で凹凸を取り除きました。修正前のリボン図と合わせて示します。
画像1
画像1
画像1
 今回は前出のパラメータを吟味する前のリボン図と比較してかなり滑らかになり、不自然なところはありません。また、ジャンプ後の飛行軌跡もジャンプ前の飛行軌跡に沿った形になり、ジャンプ前後の移動平均操作を行った前出の場合と比較してジャンプの影響が見られず、実際にフライトした時の印象から判断してより実際に近い飛行軌跡になっているものと思われます。ただし、ジャンプ後の位置情報について直線近似後移動平均操作を行っていますので、その修正精度につきましては保証できません。ジャンプ前後の領域で飛行軌跡に大きな変化をもたらすようなプロポ操作を行った場合は、参考程度にお考え頂ければと思います。
 このように、ジャンプ時刻までは正常な値で、ジャンプした後徐々に正常な値に漸近すると判断される場合に限れば、今回の修正方法は有用な方法であると考えます。

17
denkado 2022/09/04 (日) 10:27:40 修正

BBSへの書き込みありがとうございます。
私は専門的な知識が無いので良くわからないのですが、
著作権等に関わって来る可能性のある内容については、修正や削除のご配慮を頂きたいと思っています。
その結果をみて、このトピックの取り扱いを決めさせて頂きます。

18

denkado様
ご検討頂き、ありがとうございました。
 著作権につきましては私も素人ですので、著作権に抵触せずにどこまで許されるのか分かりません。私は、皆様が困っているリボン図のジャンプについて、その修正方法に関する自分の考え方を公にするのは問題ないと考えています。しかし、この分野の専門の方が著作権に抵触する可能性有りと判断、あるいは管理人様がこのトピックを削除した方が良いと判断されるのであれば、トピックを立ち上げた者として私は管理人様のご判断を尊重致します。

19
denkado 2022/09/04 (日) 18:28:26

今回の件は、個人利用の範囲での議論なので、管理人としての判断で問題無しとします。
色々な意見やアイデアを出し合って頂ければ、更なる発展も期待できますので、引き続いての投稿もお願いします。