はじめに
M5StickCでドローンつくったので報告連絡相談。
drone pic.twitter.com/IVud5gsBxU
— jの者 (@k218675554) 2022年3月20日
システム構成
シンプルが一番良い。
ソフトウェア構成
保守性とかいろいろ考えながら作った結果下記のようになった。処理部に記載しているブロックごとに関数分けしてる。
シミュレーション
ドローンのピッチモデルに焦点をあてて説明する。下記がピッチモデル概略図とモーメントのつり合い式とそれをラプラス変換した式。
上記式より機体の慣性モーメントが必要。簡易的な計測方法として二点吊り法がある。ドローンを二点で吊って計測したい軸回りに揺らし、その揺れ周期から慣性モーメントが得られる。下記に二点吊り法の概略図と計算式を示す。
PWMのduty比を指示値としてブラシ付DCモーターを回転させ推力を発生させるため、duty比と推力の関係式が必要。PWMduty比ごとの推力を計測し下記のようにプロットした。(電源電圧を3.7,4.0,4.3Vの三種類で振ってみたがあんま変わんないね)
上記グラフの勾配を下記のように定義する。
MATLABとSimulink大好き侍なので個人版を所有してますがControlToolBox単品追加のために約一万円overは高いなと思う今日この頃。お金を大切にしたいのでScilabを使います。
Xcos(Simulinkモドキ機能)でモデルをカキカキしてステップ応答を確認。
avKpは角速度制御の比例ゲイン
avKdは角速度制御の微分ゲイン
aKpは角度制御の比例ゲイン としている。
ピッチモデル前段の「4*PF_ratio」は、モーター4つに制御入力を与えているため4を掛けている。
何となくよさげなステップ応答が得られるゲインを探し、下記のようなゲインを設定した。
aKp=200
avKp=0.03
avKd=0.0001
上記ゲインでのステップ応答とその時のボード線図を示す。
ゲイン余裕は無限、位相余裕は86degくらいだった。
実機試験
そのままのゲインだとハンチングしまくって飛ばなかったのでavKpを徐々に下げていき、下記ゲインの時にハンチングが止まった。
aKp=200
avKp=0.0036
avKd=0.0001
まとめ
シミュレーションで調整したゲインをベースに実機チューニングすると比較的容易にチューニングが可能だった。
しかし、シミュレーション上ではavKpは8.3倍ほど大きく設定できることになっており実機との乖離が小さいとは言えない。機体回転による空気抵抗などを無視していたり無駄時間を考慮していなかったり離散化していなかったり色々心当たりがありすぎて・・・
大学講義の内容を振り返りながらの取り組みで、私自身ドローン名人ではないのでこのやり方が王道かどうかは保証できない。間違ってたら教えてほしい。