[ArduPilot] 開発版使用時のトラブル対応メモ

私は新機能をテストしたいので、github から最新のコードを引っ張ってきて動作確認することが多々あります。

安定版と違って、開発中のコードには問題に遭遇する確率が上がります。

今回は最近あった変わった現象に遭遇した体験談をご紹介します。問題に遭遇した時に、どのような手順で解決していったのかが分かるように、実際に試した流れを記載します。

「EK3_DRAG_BCOEF_Y」という 4.1 で新しく追加されたパラメータをシミュレータ上で触っていたところ、パラメータに値を設定してシミュレータを再起動するとパラメータが0 (デフォルト値) に戻るという現象が発生しました。

あれ?設定し忘れていたかな?と思い、再度設定するのですが、再起動したら再び 0 に戻っています。

こういった問題を見つけると、ソースコードから問題を特定したくなります。すぐさまコードを眺め、パラメータをソースコード上で上書きするような場所がないかを探しました。

しかし、このパラメータは読み込むだけで、値を変更するような箇所はソースコード上には存在しません。つまり、値の変更は GCS など外部からパラメータを設定する際に変更されるのみで、内部的に変更されることはないということです。

次に、「EK3_DRAG_BCOEF_Y」を定義しているのは以下の場所ですが、ここを少し変更して何か変化があるかを確認しました。

試しにコードを以下のように変更してみると、なんと問題が解決されます。

変更前:
AP_GROUPINFO("DRAG_BCOEF_Y", 3, NavEKF3, _ballisticCoef_y, 0.0f),

変更後:
AP_GROUPINFO("DRAG_BCOEF_Y", 7, NavEKF3, _ballisticCoef_y, 0.0f),

シミュレータを再起動後にも設定した値が保持されるようになりました。

非常に不思議な問題で、これ以上は私の手に負えないと感じたため、issuesに投稿することにしました。

すると、Randy さんがすぐさま再現確認し、Copter-4.1 のリリース前に対応すべき項目として追加してくれました。次に、EKF 担当者の Paul さんが確認し、Parameter のシステム自体の潜在的な問題であると指摘します。
そしてその後、Weekly Developer Call の議題に上げられ、Tridge さんに修正をしていただきました。皆様、ご対応頂き本当にありがとうございます。

上記の修正を取り込み、動作確認したところ、正常に動作しました。

今回は issues に投稿しましたが、設定方法が分からないであったり、バグかどうか判断できない時には「discuss.ardupilot.org」に投稿してください。

再現性が低い問題だとなかなか修正されないこともありますが、今回は必ず再現できる問題でした。また、新機能に関する問題ということで、より早めに対処していただけたのだと思います。

今回修正された内容を確認することで、同じような問題が発生した時にはどのあたりのソースコードを見ればよいのかというのが分かりました。問題に向き合っているとどうしても時間はかかってしまうのですが、テスターとして ArduPilot に貢献でき、また自身にもスキルが身に付くやり方だと思っています。

問題になったのは EKF のパラメータなので EKF の問題かと思いきや、パラメータのシステム側の問題でした。4年以上変更されていない部分のコードだったので、ずっと潜んでいたのかもしれません。

なるべくこのようなトラブルに遭遇したくないという方は、安定版を使うようにしましょう。

この記事が気に入ったらサポートをしてみませんか?