状態空間表現を用いた3次元倒立振子の製作

状態空間表現を用いた3次元倒立振子の製作

状態空間表現を用いて,3次元フライホイール倒立振子を製作します。

辺倒立については,状態空間表現を用いた1次元倒立振子に記述しています。

The Cubli: A Reaction Wheel Based 3D Inverted Pendulumを参考にしています。

1. 機体

1.1 CAD

1.2 回路

マイコン(Main Board)STM32F405RGT6
IMUMPU-6500 × 6
BLMD自作 × 3
BLDC EC 45 flat (30W) × 3 
電源Lipo 3S 850mAh × 2

2. 運動方程式

物理変数を以下に示します。

物理変数
$m_b$ボディの質量
$m_w$ホイールの質量
$r_b$ボディ座標系の質量中心位置
$r_w$ボディ座標系のホイール質量中心位置
$\omega_b$ボディ座標系のボディの角速度
$\omega_w$各ホイールの角速度
$J_b$ボディの慣性テンソル
$J_w$ホイールの慣性テンソル
$c_w$ホイールの回転動摩擦係数
$u$各モータへの入力電流
$\tau$ホイールに作用するモータトルク
$k_\tau$モータのトルク定数
$g_b$ボディ座標系での重力加速度ベクトル
$g$慣性座標系での重力加速度(スカラー)

ZYXオイラー角の運動方程式は次の通りです。

$$ \left[ \begin{matrix} \dot\phi \\ \dot\theta \\ \dot\psi \end{matrix} \right]= \left[ \begin{matrix} 1 & \text{sin}\phi\text{tan}\theta & \text{cos}\phi\text{tan}\theta \\ 0 & \text{cos}\phi & -\text{sin}\phi \\ 0 & \text{sin}\phi\text{sec}\theta & \text{cos}\phi\text{sec}\theta \end{matrix} \right] \left[ \begin{matrix} \omega_x \\ \omega_y \\ \omega_z \end{matrix} \right] $$

$r=[\phi,\theta,\psi]$,$\omega_b=[\omega_x,\omega_y,\omega_z]$として,

$$ \dot r = \Phi(r)\omega_b $$

とおきます。

ボディとホイールの回転方向の運動方程式は

$$ \hat J\dot\omega_b = J\omega_b\times\omega_b + Mg_b + J_w\omega_w\times\omega_b $$

$$ J_w\omega_w = (k_\tau u - c_w\omega_w) - J_w\omega_b $$

と表されます。ここで,

$$ g_b=\left[ \begin{matrix} g\ \text{sin}\theta \\ -g\ \text{sin}\phi\text{cos}\theta \\ -g\ \text{cos}\phi\text{cos}\theta \end{matrix} \right] $$ $$ M = m_b\tilde r_b + \sum_{i=1}^{3}m_{w_i}\tilde r_{w_i} $$ $$ J = J_b - m_b\tilde r_b^2 + \sum_{i=1}^{3}(J_{w_i} - m_w\tilde r_{w_i}^2) $$

$$ J_w = \text{diag}(J_{w_1},J_{w_2},J_{w_3}) $$

$$ \hat J =J - J_w $$

です。チルダは外積行列を表し,歪対称行列となります。

3. 状態方程式

3.1 非線形状態方程式

状態ベクトルを$x=[r,\omega_b,\omega_w]$とします。

$$ \dot x = f(x) + Bu $$

$$ f(x)= \left[ \begin{matrix} \Phi(r) \omega_b\\ \hat J^{-1}(J\omega_b\times\omega_b + Mg_b + J_w\omega_w\times\omega_b + c_w\omega_w)\\ -\hat J^{-1}(J\omega_b\times\omega_b + Mg_b + J_w\omega_w\times\omega_b) - (J_w^{-1}+\hat J^{-1})c_w\omega_w \end{matrix} \right] $$ $$ B= \left[ \begin{matrix} 0_{3\times3}\\ -\hat J^{-1} k_\tau\\ (J_w^{-1}+\hat J^{-1})k_\tau \end{matrix} \right] $$

3.2 線形化

平衡点$x_d=[r_d,\omega_{b_d},\omega_{w_d}]$周りで1次近似します。

$r_d = [\phi_d,\theta_d,\psi_d]$,$\omega_{b_d}=0\in R^3$,$\omega_{b_d}=0\in R^3$です。

頂点で倒立する際は$\phi_d=\dfrac{\pi}{4},\theta_d=\text{atan}\dfrac{1}{\sqrt{2}},\psi_d=$(任意)となります。

線形状態方程式は次のようになります。

$$ \dot{\hat x} = A\hat x + B\hat u $$

$$ A= \left[ \begin{matrix} 0_{3\times3} & \Phi(r_d) & 0_{3\times3}\\ \hat J^{-1}M\left.\dfrac{\partial g_b(r)}{\partial r}\right|_{r=r_d} & 0_{3\times3} & \hat J^{-1}c_w\\ -\hat J^{-1}M\left.\dfrac{\partial g_b(r)}{\partial r}\right|_{r=r_d} & 0_{3\times3} & - (J_w^{-1}+\hat J^{-1})c_w \end{matrix} \right] $$

$$ \hat x = x - x_d,\quad \hat u = u - u_d $$

$$ \left.\dfrac{\partial g_b(r)}{\partial r}\right|_{r=r_d}=\left[ \begin{matrix} 0 & \text{cos}\theta_d & 0\\ -\text{cos}\phi_d\text{cos}\theta_d & \text{sin}\phi_d\text{sin}\theta_d & 0\\ \text{sin}\phi_d\text{cos}\theta_d & \text{cos}\phi_d\text{sin}\theta_d & 0 \end{matrix} \right] $$

3.3 直接制御できない状態量を除去

線形状態方程式

$$ \dot{\hat x} = A\hat x + B\hat u $$

において,ヨー角の角速度$\dot\psi$はボディの角速度$\omega_b$のみの影響を受けます。 また,入力行列$B$の第3行は0となるため,入力$u$によって$\dot\psi$を直接制御することができません。

ヨー角$\psi$の方程式はその角速度$\dot\psi$の積分によって記述されますが,直接6軸センサからヨー角$\psi$を求めることはできません。 角速度$\dot\psi$を積分してフィードバックすれば良いと思うかもしれませんが,6軸センサではセンサの$z$軸周りのジャイロのオフセットを除去することが できないので,積分するとドリフトが生じてしまいます。

そのため,ヨー角$\psi$を状態量から取り除きます。$\psi$を取り除いた線形状態方程式を

$$ \dot{\bar x} = \bar A\bar x + \bar B\bar u $$

$$ \bar y = \bar C\bar x $$ とします。

4. フィードバック制御

4.1 可制御正準分解

$(\bar A,\bar B)$に関する可制御性行列$V$において$\text{rank}V=7<8$となるので,このままでは不可制御です。 そこで,可制御正準分解をして可制御な部分のみでフィードバック制御します。

$$ \text{rank}V=\text{rank}\left[ \begin{matrix} \bar B & \bar A\bar B & \cdots & \bar A^7\bar B \end{matrix} \right]=7<8 $$

となっていると,$1\times8$行列$P$が存在して

$$ P\left[ \begin{matrix} \bar B & \bar A\bar B & \cdots & \bar A^7\bar B \end{matrix} \right]=0 $$

となります。Cayley-Hamiltonの定理より

$$ P\bar A\left[ \begin{matrix} \bar B & \bar A\bar B & \cdots & \bar A^7\bar B \end{matrix} \right]=0 $$

が成り立ち,0でない$\bar A_3$が存在して$P\bar A = \bar A_3P$と書けます。ここで,$z_2=P\bar x$とおくと

$$ \dot z_2 = P\bar A\bar x + P\bar B\bar u = P\bar A\bar x = \bar A_3P\bar x = \bar A_3z_2 $$ となります。ここで,次の座標変換を考えます。

$$ z=T\bar x=\left[ \begin{matrix} Q\\ P \end{matrix} \right]\bar x $$

ただし,$T$が正則となるように$Q$を選びます。すると,変換後のシステムは

$$ \dot z = \left[ \begin{matrix} \bar A_1 & \bar A_2\\ 0 & \bar A_3 \end{matrix} \right]z+ \left[ \begin{matrix} \bar B_1\\ 0 \end{matrix} \right]\bar u $$ $$ z = \left[ \begin{matrix} z_1\\ z_2 \end{matrix} \right] $$

の形になります。よって,$z_1$は可制御,$z_2$は不可制御になります。

4.2 離散化

0次ホールドで離散化します。制御周期は$t_s$とします。

$$ z_{1_{k+1}} = \bar A_{1_d}z_{1_{k}} + \bar A_{3_d}z_{2_{k}}+ \bar B_{1_d}\bar u_k $$

4.3 最適制御

$(\bar A_{1_d}, \bar B_{1_d})$に対して離散時間LQRの最適制御を設計します。

$$\bar u_k = -\bar K_d\bar z_{1_k}$$

$\text{rank}V=7<8$より不可制御な次元が1次元あり,可制御正準分解で可制御な部分を抜き出して制御をします。 そのため,具体的にはボディの角速度とホイールの角速度の両方を同時に0にするようなことはできません。

5. 姿勢推定

6つのセンサでそれぞれ測定した加速度から,重力ベクトルを推定します。

それぞれのセンサの位置ベクトルを$p_i (i=1,2,…,6)$とします。 測定した加速度は,センサが位置する点の加速度ベクトル$\ddot{p}_i$と重力ベクトル$^Bg$の和で表されます。

$$^Bm_i=\ ^B\ddot{p}_i+\ ^Bg$$

ここで,

$$^B\ddot{p}_i=\ ^B_IR\ ^I\ddot{p}_i=\ ^B_IR\ ^I_B\ddot{R}\ ^Bp_i$$

であり,$\tilde{R}=\ ^B_IR\ ^I_B\ddot{R}$とすると,

$$^Bm_i=\tilde{R}\ ^Bp_i+\ ^Bg$$

と表せます。この加速度の測定値$m_i$から,重力ベクトル$^Bg$を最小二乗推定します。

$$ \left[ \begin{matrix} ^Bm_1& ^Bm_2& ^Bm_3& ^Bm_4& ^Bm_5& ^Bm_6\\ \end{matrix} \right]= \left[ \begin{matrix} ^Bg & \tilde{R} \end{matrix} \right] \left[ \begin{matrix} 1 & 1 & 1 & 1 & 1 & 1\\ ^Bp_1 & ^Bp_2 & ^Bp_3 & ^Bp_4 & ^Bp_5 & ^Bp_6 \end{matrix} \right] $$

$$M=QP$$

$Q$の推定値$\hat{Q}$を疑似逆行列$P^\dagger$を用いて求めると,$\hat{Q}(:,1)$が推定したい重力ベクトル$\hat{g}$に対応します。

$$\hat{Q}=MP^\dagger=MP^\text{T}(PP^\text{T})^{-1}$$

また,ボディの角速度$\omega_b$は6つのセンサの平均値を取って求めます。 推定した重力ベクトル$\hat{g}$とボディの角速度$\omega_b$から,相補フィルタでオイラー角を推定するでオイラー角を推定します。

6. 実践する

今後追記します。