自作ドローンについて①

はじめに

M5StickCでドローンつくったので報告連絡相談。

システム構成

シンプルが一番良い。

f:id:j03964608:20210907224330j:plain

システム構成

ソフトウェア構成

保守性とかいろいろ考えながら作った結果下記のようになった。処理部に記載しているブロックごとに関数分けしてる。

f:id:j03964608:20210907224445j:plain

ソフト構成

シミュレーション

ドローンのピッチモデルに焦点をあてて説明する。下記がピッチモデル概略図とモーメントのつり合い式とそれをラプラス変換した式。

f:id:j03964608:20210907224733j:plain

機体モデル

f:id:j03964608:20210907224805j:plain

f:id:j03964608:20210907224807j:plain

ピッチ周りの式

上記式より機体の慣性モーメントが必要。簡易的な計測方法として二点吊り法がある。ドローンを二点で吊って計測したい軸回りに揺らし、その揺れ周期から慣性モーメントが得られる。下記に二点吊り法の概略図と計算式を示す。

f:id:j03964608:20210907224859j:plain

2点吊り法

f:id:j03964608:20210907224920j:plain

f:id:j03964608:20210907224923j:plain

2点吊り法の数式

PWMのduty比を指示値としてブラシ付DCモーターを回転させ推力を発生させるため、duty比と推力の関係式が必要。PWMduty比ごとの推力を計測し下記のようにプロットした。(電源電圧を3.7,4.0,4.3Vの三種類で振ってみたがあんま変わんないね)

f:id:j03964608:20210907224949j:plain

推力とduty比の関係

上記グラフの勾配を下記のように定義する。

f:id:j03964608:20210907225119j:plain

推力係数定義

MATLABSimulink大好き侍なので個人版を所有してますがControlToolBox単品追加のために約一万円overは高いなと思う今日この頃。お金を大切にしたいのでScilabを使います。

Xcos(Simulinkモドキ機能)でモデルをカキカキしてステップ応答を確認。

f:id:j03964608:20210907225153j:plain

ドローンピッチモデル

avKpは角速度制御の比例ゲイン
avKdは角速度制御の微分ゲイン
aKpは角度制御の比例ゲイン としている。
ピッチモデル前段の「4*PF_ratio」は、モーター4つに制御入力を与えているため4を掛けている。

何となくよさげなステップ応答が得られるゲインを探し、下記のようなゲインを設定した。
aKp=200
avKp=0.03
avKd=0.0001
上記ゲインでのステップ応答とその時のボード線図を示す。

f:id:j03964608:20210907225233j:plain

f:id:j03964608:20210907225236j:plain

ステップ応答と周波数応答

ゲイン余裕は無限、位相余裕は86degくらいだった。

実機試験

そのままのゲインだとハンチングしまくって飛ばなかったのでavKpを徐々に下げていき、下記ゲインの時にハンチングが止まった。
aKp=200
avKp=0.0036
avKd=0.0001

まとめ

シミュレーションで調整したゲインをベースに実機チューニングすると比較的容易にチューニングが可能だった。
しかし、シミュレーション上ではavKpは8.3倍ほど大きく設定できることになっており実機との乖離が小さいとは言えない。機体回転による空気抵抗などを無視していたり無駄時間を考慮していなかったり離散化していなかったり色々心当たりがありすぎて・・・

大学講義の内容を振り返りながらの取り組みで、私自身ドローン名人ではないのでこのやり方が王道かどうかは保証できない。間違ってたら教えてほしい。