二足歩行ロボット研修二足歩行ロボット研修(kora編)

二足歩行ロボット研修(kora編)[23] 3次元線形倒立振子モードを使った歩行パターン生成について

二足歩行ロボット研修(kora編)[19] DYNAMIXEL Workbenchでモーションを再生する 二足歩行ロボット研修

こんにちは。koraです。

今回は、過去の投稿で軽く触れた歩行パターンの生成方法について書きたいと思います。

ここでは大まかな流れのみ解説します。式の導出や詳細な解説などは梶田先生のヒューマノイドロボットをご参照ください。2足歩行ロボット・ヒューマノイドロボットの基礎理論がまとめられた良書です。

3次元線形倒立振子

3次元線形倒立振子は、2足ロボットの歩行パターンを生成する方法のひとつです。ロボットが片足を付いた状態を倒立振子にみたてます。

重心の運動

重心を一定の高さ、あるいは特定の拘束平面上に維持するけり力を発生させると、重心の動きは運動方程式で表すことができます。

\begin{align}
\ddot{x} = \frac{g}{z_c}x
\end{align}

ここで、\(g\)は重力加速度、\(z_c\)は拘束平面の高さを表します。
また、上式の解析解は以下の通りになります。

\begin{align}
x(t) = x(0) \cosh{(t/T_c)} + T_c \dot{x}(0) \sinh{(t/T_c)}
\end{align}

\begin{align}
\dot{x}(t) = x(0)/T_c \sinh{(t/T_c)} + \dot{x}(0) \cosh{(t/T_c)}
\end{align}

\begin{align}
T_c \equiv \sqrt{z_c/g}
\end{align}

この式はX軸方向 (進行方向) のものですが、Y軸方向 (左方向) に対しても同様です。

歩行素片

参考文献にならって、片足で立っている間の重心の移動パターンを歩行素片と呼ぶことにします。
拘束平面の高さ\(z_c\)と歩行周期\(T_{sup}\)と歩幅\(s^{(n)}_x\)を設定すると歩行素片が決まるので、この歩行素片を左右の脚に対して交互に繋いでいくことで、単純な歩行運動を作ることができます。

着地点調整

ただし、単に歩行素片を繋いだだけでは、歩行開始時・歩行終了時・加減速時などに状態が不連続になってしまいます。

例えば、n歩目からn+1歩目にかけて加速したい場合、n歩目の着地点にそのまま着地しても、最終状態を目標値に合わせることはできません。

そこで、n歩目の着地点を変更することで対応します。具体的にどこに着地すれば良いかは、次の手順で求めます。

まず、線形倒立振子の運動方程式から、着地点\( p^{*}_x \)、初期状態\( (x^{(n)}_i, \dot{x}^{(n)}_i) \)、最終状態\( (x^{(n)}_f, \dot{x}^{(n)}_f) \)の関係が求められます。

\begin{align}
x^{(n)}_f = (x^{(n)}_i – p^*_x) \cosh{(T_{sup}/T_c)} + T_c \dot{x}^{(n)}_i \sinh{(T_{sup}/T_c)} + p^{*}_x
\end{align}

\begin{align}
\dot{x}^{(n)}_f = \frac{x^{(n)}_i – p^*_x}{T_c} \sinh{(T_{sup}/T_c)} + \dot{x}^{(n)}_i \cosh{(T_{sup}/T_c)}
\end{align}

次に、最終状態 \( (x^{(n)}_f, \dot{x}^{(n)}_f) \) と目標状態 \( (x^d, \dot{x}^d) \) の誤差を表す評価関数を定義します。

\begin{align}
N \equiv a(x^d – x^{(n)}_f)^2 + b(\dot{x}^d – \dot{x}^{(n)}_f)^2
\end{align}

ここで、\( a \) は位置成分、\( b \) は速度成分の重み計数です。
そして、この誤差を最小化する着地点を求める式は次のようになります。

\begin{align}
p^{*}_x = – \frac{a (C – 1)}{D} (x^d – C x^{(n)}_i – T_c S \dot{x}^{(n)}_i) – \frac{b S}{T_cD} (\dot{x}^d – \frac{S}{T_c} x^{(n)}_i – C\dot{x}^{(n)}_i)
\end{align}

\begin{align}
D \equiv a(C-1)^2 + b(S/T_c)^2
\end{align}

\begin{align}
C \equiv \cosh{T_{sup}/T_c}
\end{align}

\begin{align}
S \equiv \sinh{T_{sup}/T_c}
\end{align}

なお、実時間で歩行パターンを作成する場合、n歩目の運動を開始する時点ですでにn歩目を踏み出している必要があるので、上記の計算はn-1歩目までに行います。つまり、2歩先の歩幅を元に1歩先の着地点を計算するような流れになります。

おわりに

上記のアルゴリズムを実装ですれば2足歩行ロボットの歩行パターンを生成できそうです。ただし、実際にロボットを歩かせる場合は外乱があるのでパターン生成とは別に歩行安定化制御が必要になってきます。それについてはまた後日取り上げたいと思います。

タイトルとURLをコピーしました