toppers / hakoniwa-px4sim

PX4-compatible drone simulation with physics-based modeling in C, visualizations via game engines, headless operation, and automated test scenarios. Supports external parameterization and MATLAB/Simulink integration.
40 stars 12 forks source link

QGCでセンサのキャリブレーションできるようにしてはどうか? #134

Open tmori opened 10 months ago

tmori commented 10 months ago

背景

たまにコンパスエラーが出るけれど、もしかするとキャリブレーションで解決できたりして?

QGCには、センサキャリブレーション機能がある。

image

実機の場合は、機体を手でもって傾けたりしてキャリブレーションするのだが、シミュレータだと難しい。

対応案

シミュレータから外部操作できるUIを作って、物理モデルに位置や姿勢を変更できるようにしてみてはどうか。

tmori commented 10 months ago

こうみると、ピッチ角が90度のケースがあるのか。。

tmori commented 10 months ago

物理的に拘束した状態で回転させたい

tmori commented 10 months ago

ジンバルの中心に機体を拘束して、外力与えて回してみたい

https://ja.m.wikipedia.org/wiki/ジンバル

kenjihiranabe commented 10 months ago

うーん、外力で積分は無理だと思う。実際にやるときは、モータートルクで回さないからなあ。

案は、マグネットを外界とインタラクションさせること。Unity に磁北線張って、角度だすとか? この絵のキャリブレーションではどのセンサの値とってるのだろ?

tmori commented 10 months ago

この絵のキャリブレーションではどのセンサの値とってるのだろ?

ジャイロセンサですね。

kenjihiranabe commented 10 months ago

ジャイロは外界との関係性確立だから、ドローン単体ではできないと思っている。 あと、位置も積分と、もう一つGPSはUnityから取る手もあるね。

kenjihiranabe commented 10 months ago

単体やるなら、外力でなく、角度を強制的に変えて、その時のmag値をかえすんかな。

tmori commented 10 months ago

この構成で機体を制御して、物理モデルから出てくる速度データなどをセンサにそのまま与えて、PX4に返す方法を考えてみましたが、機体が遠くに飛ばないように固定する条件が必要そうですね。。

スクリーンショット 2024-01-21 16 20 13

kenjihiranabe commented 10 months ago

いや、ジャイロとmag を勘違いしてた。ジャイロならやりようがある。 外界といったのは、magです。 トルクでやるなら、どこか一点固定して、みたいにコマ回すのだけど、別の力学が必要な予感。

tmori commented 10 months ago

トルクでやるなら、どこか一点固定して、みたいにコマ回すのだけど、別の力学が必要な予感。

おー。

kenjihiranabe commented 10 months ago

トルクでなく、角速度を与えてやれば良さそう。

tmori commented 10 months ago

キャリブレーション用の関数をbody_frame内部に入れ込む。のが一番近道。

kenjihiranabe commented 10 months ago

追加情報: ここに各センサーのキャリブレーションの仕方あり. https://qiita.com/ezokitsune/items/170ac3cc8b81b382f10a また,ここに PX4 <-> GrouondControl のキャリブレーションのオフィシャルドキュメントあり. https://docs.px4.io/main/en/config/compass.html 一回,各キャリブレーションの意味を表にまとめてみます.

tmori commented 10 months ago

auto-tune のパラメータ保存先とパラメータ参照方法を調査する

調べ方:

もしや:

tmori commented 10 months ago

この辺りが解説部分。

おそらく、以下のパラメータをチューニングしていると思われる。

tmori commented 10 months ago

機体設定で auto tune できるのは、レートコントローラと姿勢コントローラのみ。

スクリーンショット 2024-01-25 11 57 31

なので、それらの制御プログラムのパラメータが対象と考えるのが自然。

以下が調査結果。

Multicopter Rate Control

https://docs.px4.io/main/en/advanced_config/parameter_reference.html#multicopter-rate-control

Multicopter Attitude Control

https://docs.px4.io/main/en/advanced_config/parameter_reference.html#multicopter-attitude-control

tmori commented 10 months ago

PIDのパラメータチューニングで解決できること

ということは以下の2つのissueは解決できなさそうな気がしてきた。

カルマンフィルタの推定値がずれている問題を調査すれば、上記の issueの問題点がより浮き彫りになりそうな予感。

tmori commented 10 months ago

あと、auto-tuningはセンサのキャリブレーションではなくて、PID制御パラメータのキャリブレーションのように思えてきたので、センサ単独のキャリブレーションもできた方が良さそう。

機体の姿勢を外部から変更するAPIはあるので、ちょっとやってみます。

tmori commented 10 months ago

コンパス:

スクリーンショット 2024-01-25 13 26 40

加速度センサ: スクリーンショット 2024-01-25 13 29 04

kenjihiranabe commented 10 months ago

calibration ディレクトリ使ってもらっていいですよ。

tmori commented 10 months ago

入力要件

姿勢角を少しずつ増減できる:10度角くらい?

姿勢角を数値で指定できる:

実現方法

姿勢操作用のアプリを作って、キーボード入力を受け付けて、上記を実現する。

tmori commented 10 months ago

設計できた!

せっかくなので、最近整理した箱庭アセットAPIを使って、第3の箱庭アセットを開発することにしました。

スクリーンショット 2024-01-25 14 00 24

kenjihiranabe commented 10 months ago

おー!