4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LQRで経路追従

Last updated at Posted at 2023-01-27

動作動画

経路追従

LQR

状態方程式の導出

目標経路への追従が目的であるため、偏差系の状態方程式を構築する。今回の状態方程式に関するロボットモデルと目標経路をFig 1に示す。また変数をTable 1に示す。

Table 1. LQRの変数

パラメータ名 機能
$e_d$ ロボット位置と目標経路の距離差
$\dot{e_d}$ $e_d$の時間微分した値(速度)
$\theta$ ロボット角度
$\theta_r$ 目標経路の角度
$e_{\theta}$ ロボット角度と目標経路の角度差
$\dot{e_{\theta}}$ $\theta$の時間微分した値(角速度)
$v_t$ ロボットの並進速度
$\omega_t$ ロボットの角速度
$d_t$ 制御周期
model.png (13.2 kB)

Fig 1. モデル図

model_sincos.png (24.2 kB)

Fig 2. $e_d$の導出

状態変数は

    X_t=\left[
    \begin{matrix} e_d \\ \dot{e_d} \\ e_{\theta} \\ \dot{e_{\theta}} \end{matrix}
    \right]

であり、制御量$u_t$はロボットへの角速度$\omega_t$とする。

    u_t = \omega_t

状態変数$e_{\theta}$は目標角度$ \theta_r$と$\theta$の差であり、

    e_{\theta} = \theta_r - \theta

$e_{\theta}$を時間微分した$\dot{e_{\theta}}$は角速度であるため、制御量$u_t$と$\dot{e_{\theta}}$は等しい。

    \dot{e_{\theta}} = u_t = \omega_t

状態変数$e_d$(Fig 2)はロボット位置と目標経路の距離差であるため、$e_d$を時間微分した$\dot{e_d}$は

    \dot{e_d} = v_t\cos{e_{\theta}}\sin{e_{\theta}}

$e_{\theta}$が小さいという前提を利用して線形化すると

    \cos{e_{\theta}} = 1
    \sin{e_{\theta}} = e_{\theta}
    \dot{e_d} = v_t e_{\theta}

ここまでをまとめると、状態方程式は以下のとおりになる。

\begin{align}
    X_{t+1} \nonumber\\
    &= AX_t + Bu_t \nonumber\\
    &= \left[
        \begin{matrix} 1 & dt & 0 & 0\\ 0 & 0 & v_t & 0\\ 0 & 0 & 1 & dt\\ 0 & 0 & 0 & 0 \end{matrix}
        \right]
        \left[
        \begin{matrix} e_d \\ \dot{e_d} \\ e_{\theta} \\ \dot{e_{\theta}} \end{matrix}
        \right]
        +
        \left[
        \begin{matrix} 0 \\ 0 \\ 0 \\ 1 \end{matrix}
        \right]\omega_t
\end{align}

フィードバックゲインの導出

フィードバックゲイン$K$は式(1)の$Z$が変化しなくなるまで更新し続けた$Z$を、式(2) に利用することで求まる。

$$
Z = A^TZA-A^TZB(R+B^TZB)^{-1}B^TZA+Q \tag{1}
$$

$Q$は状態に関係する重み行列。$Q$の各行は$e_d$, $\dot{e_d}$,$ e_{\theta} $, $\dot{e_{\theta}}$に対応しているから、特に素早く収束させたい状態のパラメータを大きくする。$R$は制御量に関係する重み行列。今回は制御量が$\omega_t$のみであるため、$R$は行列ではなくスカラとなる。

    Q=\left[
    \begin{matrix} q_1 & 0 & 0 & 0\\ 0 & q_2 & 0 & 0\\ 0 & 0 & q_3 & 0\\ 0 & 0 & 0 & q_4 \end{matrix}
    \right]
    K=(B^TZB+R)^{-1}(B^TZA)\tag{2}
    u_t = \omega_t = -K X_t \tag{3}

式(3)で求めた制御量$\omega_t$はロボットに入力できないため、モーター入力に変換する必要がある。Fig 3は今回使用するロボットであるRoombaの角速度とモータ入力の関係図。近似直線から求めた、傾き$0.0179$と切片$-0.2826$からモータ入力に変換する。

    MotorInput = \frac{1}{0.0179} \omega_t - 0.2826
motor-w.png (31.2 kB)

Fig 3. ロボット角速度[rad/s] - モータ入力

実験

実験では、目標経路のスプライン曲線とオドメトリから測定した経路の誤差を測定する。目標経路は2種類のスプライン曲線を生成して、LQRによって追従させる。ロボットはRoombaを使用した。
動作動画:https://www.youtube.com/watch?v=XXuZxzfc1EI

結果

経路1

1種類目の目標経路と追従結果をFig 4とFig 5に示す。追従誤差は最大で約0.025[m]となった。

spline-path-1.png (24.6 kB)

Fig 4. 目標経路1

path2-4.png (54.1 kB)

Fig 5. 目標経路1の追従誤差

経路2

2種類目の目標経路と追従結果をFig 6とFig 7に示す。追従誤差は最大で約0.025[m]となった。

spline-path-2.png (26.1 kB)

Fig 6. 目標経路2

path1-4.png (49.1 kB)

Fig 7. 目標経路2の追従誤差

参考

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?