Kanade Electronicskanaelecom
🚁

ドローンの制御

2 次元上を動くドローンをある位置に移動させたい。 ドローンの制御を、機体系(推力による速度の制御)と モーター-プロペラ系(推力の制御) に分けて考える。

回転数

トルク
回転数 トルク
モーター
モーター
推力

反トルク
推力 反トルク
プロペラ
プロペラ
回転運動
回転運動
並進運動
並進運動
電圧
電圧
x2
x2
姿勢

位置
姿勢 位置
Viewer does not support full SVG 1.1

機体系

×
×
F 2
F2
F 1
F1
θ
θ
(x,y)
(x,y)
x
x
y
y
-g
-g
L
L
Viewer does not support full SVG 1.1

二つのプロペラの推力でドローンを動かす。状態の観測のために 加速度センサ、角速度センサを取り付ける。位置の測定のために、カメラでドローンを撮る。

記号の定義
定数
𝑀機体重量
𝐼機体の重心まわりの慣性モーメント
𝐿プロペラの軸間長さ
変数
(𝑥,𝑦)重心位置
𝜃傾き
𝑓1,𝑓2プロペラの推力
(𝑎𝑥,𝑎𝑦)加速度センサの値
𝜔角速度センサの値
(𝑥𝑐,𝑦𝑐)カメラから推定した位置

運動方程式

モーターの反トルク、空気抵抗は無視している。

Mdot.double(x) = -(f_1+f_2)sintheta \ Mdot.double(y) = (f_1+f_2)costheta - Mg \ Idot.double(theta) = (L)/(2)(f_1-f_2)

観測方程式

加速度センサの値はセンサに固定された座標系における値であることに注意して、観測方程式を求める。

x_c = x \ y_c = y \ a_x = dot.double(x)costheta + (dot.double(y)-g)sintheta \ a_y = -dot.double(x)sintheta + (dot.double(y)-g)costheta \ omega = dot(theta)

加速度センサはセンサにかかる加速度を計測するが、機体の加速度に比べて重力加速度が十分大きいので、もっぱら鉛直方向を指し示すセンサとして働く。

状態方程式

𝒙=[𝑥̇𝑥𝑦̇𝑦𝜃̇𝜃]𝑇𝒖=[𝑓1𝑓2]𝑇𝒚=[𝑥𝑐𝑦𝑐𝑎𝑥𝑎𝑦𝜔]𝑇
̇𝒙=𝒇(𝒙,𝒖)=[𝑥21𝑀(𝑢1+𝑢2)sin𝑥5𝑥41𝑀(𝑢1+𝑢2)cos𝑥5𝑔𝑥6𝐿2𝐼(𝑢1𝑢2)]
𝒚=𝒈(𝒙,𝒖)=[𝑥1𝑥31𝑀(𝑢1+𝑢2)sin𝑥5cos𝑥5+(1𝑀(𝑢1+𝑢2)cos𝑥52𝑔)sin𝑥51𝑀(𝑢1+𝑢2)sin𝑥5sin𝑥5+(1𝑀(𝑢1+𝑢2)cos𝑥52𝑔)cos𝑥5𝑥6]

平衡点(ホバリング状態) bold(x)_0=bold(0),bold(u)_0=lr(((Mg)/(2),(Mg)/(2))) まわりで一次近似して線形な状態方程式を求めると、

̇𝒙=[01000000100𝑔000000010]𝒙+[0001𝑀0𝐿2𝐼0001𝑀0𝐿2𝐼](𝒖𝒖0)
𝒚=[100001002𝑔2𝑔1]𝒙+[0001𝑀00001𝑀0](𝒖𝒖0)

制御方式・状態の計測

Matlab を用いて可制御・可観測を確認した。

SS = ss(A,B,C,D)
rank(ctrb(SS)) == length(A)
rank(obsv(SS)) == length(A)

制御方式は最適制御とし、フィードバックゲインを以下の Matlab コードで求めた。

Q = diag([80,10,80,10,10,30]);
R = diag([50,50]);
[Kreg,~,Ef] = lqr(A,B,Q,R);

双対システムのフィードバックゲインを求め、オブザーバゲインとした。

S = diag([64,100,63,100,100,100]);
T = diag([10,10,10,10,10]);
[Lregt,~,Eo] = lqr(A',C',S,T);
Lreg = Lregt';

ブロック線図

シュミレーション

パラメタを M=0.2 upright(kg), L=0.4 upright(m), I=0.008upright(kgm^2) とする。ホバリング推力は u_0=(Mg)/(2)=0.98upright(N) である。

初期位置を (𝑥,𝑦,𝜃)=(1,1,10) としたときのシュミレーション結果を示す。

また、初期位置を (𝑥,𝑦,𝜃)=(3,3,10) としたときのシュミレーション結果は

考察

  • 最適制御の評価関数を決めるのに苦労した。各重みの変化に対して根軌跡をプロットすれば直観的に決められると考えられる。
  • x 方向に大きく移動すると大きく傾いている。線形近似した運動方程式では、x 方向の加速度を増すために傾きを大きくするしかない。さらに、元の非線形な運動方程式では、傾きによる x 方向の加速度の増加が、線形の場合よりも抑えられるため、現実のドローンはシュミレーションよりも大きな傾きとなることが考えられる。傾きが大きくなると、今回の制御の線形近似から外れ、さらに傾きが増大する危険性がある。x 方向に大きく動かさないようにする必要がある。

モーター-プロペラ系

モーター

記号
定数
𝐾𝑇トルク定数
𝐾𝐸逆起電力定数
𝑅巻線抵抗
𝐿インダクタンス
変数
𝑒逆起電力
𝐸入力電圧
𝐼電流
𝜔角速度

キルヒホッフの法則より

E-e=RI+Ldot(I)

逆起電力は

e=K_Eomega

トルクは

T=K_TI

プロペラ

記号
定数
𝜌空気密度
𝐷直径
𝐼𝑅慣性モーメント
𝛽羽根角
変数
𝑉対気速度
𝑛回転数
𝜔角速度
𝐽進行率
𝐶𝐹プロペラ推力係数
𝐶𝑄プロペラ反トルク係数
𝑇入力トルク
𝐹推力
𝑄反トルク

回転の運動方程式は

I_Rdot(omega)=T-Q

推力と反トルクは の関数

F = C_Frho D^4 n^2 \ Q = C_Qrho D^5 n^2

𝐶𝐹,𝐶𝑄 は一般に 羽根角 𝛽 と進行率 J=(V)/(nD) の非線形な関数であり、風洞実験から計測する。今回は対気速度がプロペラの回転数に対して十分小さい領域で動作するので、𝐶𝐹,𝐶𝑄は定数とする。

定数 𝐾𝐹,𝐾𝑄

K_F := (C_Frho D^4)/(4pi^2) \ K_Q := (C_Qrho D^5)/(4pi^2)

とすると、

F = K_Fomega^2\ Q = K_Qomega^2

参考:航空工学講座6 プロペラ(日本航空技術協会)

ブロック線図

プロペラとモーターを結合した系のブロック線図は以下のようになる。

-
-
+
+
K T
KT
R + sL
R + sL
1
1
K E
KE
-
-
+
+
s I R
s IR
1
1
x 2
x2
K F
KF
K Q
KQ
入力

電圧
入力 電圧
出力

推力
出力 推力
Q
Q
T
T
w
w
w 2
w2
e
e
F
F
E
E
I
I
Viewer does not support full SVG 1.1

制御

センサとして回転軸にエンコーダを取り付け回転数を計測する。推力指令に対して追従する制御を行う。ホバリング推力前後で特性が良くなるようにゲインを調整する。

-
-
+
+
K T
KT
R + sL
R + sL
1
1
K E
KE
-
-
+
+
s I R
s IR
1
1
x 2
x2
K F
KF
K Q
KQ
推力

指令
推力 指令
出力

推力
出力 推力
Q
Q
T
T
w
w
w 2
w2
e
e
F
F
E
E
I
I
-
-
+
+
PID
PID
√x
√x
1/K F
1/KF
Viewer does not support full SVG 1.1