永井 忠一 2019.8.17
床反力の中心点(side view)
バランスが取れているときは、ZMPが支持多角形のほぼ中央にある。転倒しているときには、ZMPが支持多角形の縁に達して、その縁を中心にして回転している。ZMPをできるだけ支持多角形の中央にある状態にするのが、バランス制御の基本的な戦略になる。
支持多角形(top view)
ZMPは支持多角形の領域の外に出ることはない。
外積(cross product)\[ \boldsymbol{\tau}=\boldsymbol{p}\times\boldsymbol{f} \]
モーメント=位置×力\[ \begin{bmatrix} \tau_x \\ \tau_y \\ \tau_z \end{bmatrix}=\begin{bmatrix} x \\ y \\ z \end{bmatrix}\times\begin{bmatrix} f_x \\ f_y \\ f_z \end{bmatrix}=\begin{bmatrix} yf_{z}-zf_{y} \\ zf_{x}-xf_{z} \\ xf_{y}-yf_{x} \end{bmatrix} \]
(右手座標系)
3次元の1成分が0になったと考える\[ \boldsymbol{\tau}=\boldsymbol{p}\times\boldsymbol{f} \]
モーメント=位置×力\[ \begin{bmatrix} 0 \\ \tau_y \\ 0 \end{bmatrix}=\begin{bmatrix} x \\ 0 \\ z \end{bmatrix}\times\begin{bmatrix} f_x \\ 0 \\ f_z \end{bmatrix}=\begin{bmatrix} 0 \\ zf_{x}-xf_{z} \\ 0 \end{bmatrix} \]\[ \tau=\tau_y=zf_x-xf_z \]
簡単な例
ZMPまわりのモーメント(の水平成分)は0\[ \begin{align} f_{1}(p-x_{1})-f_{2}(x_{2}-p)&=0 \\ f_{1}p-f_{1}x_{1}-f_{2}f_{2}+f_{2}p&=0 \\ (f_1+f_2)p&=f_{1}x_{1}+f_{2}x_{2} \\ p&=\frac{f_{1}x_{1}+f_{2}x_{2}}{f_1+f_2} \end{align} \]
式の確認。全体重がつま先に集中している場合、かかとに作用している力f1=0、つま先だけにf2がかかる\[ p=\frac{0x_{1}+f_{2}x_{2}}{0+f_2}=x_2 \]ZMPはつま先に一致する
市販されている6軸力センサーの例(株式会社レプトリノ)[http://www.leptrino.co.jp/P_CFS.html]
6軸力センサーで計測される値: Fx, Fz(床からの垂直方向の力), τ(Y軸回りのモーメント)
ZMPの計算\[ \begin{align} -\tau&=F_{z}p \\ p&=-\frac{\tau}{F_z} \end{align} \](モーメント[Nm]/力[N]で)位置の次元の量になる。-τのマイナスは回転軸の方向
(実際には、6軸力センサーは足の裏に付いていない)
(6軸力センサーを取り付けてある)かかとの高さを考慮したZMPの計算\[ p=\frac{-\tau-aF_x}{F_z} \]
(上記は片足のZMP)
右足と左足それぞれについてZMPを計算して、それを力で配分することによって全体のZMPを計算する\[ p=\frac{f_R}{f_R+f_L}p_R+\frac{f_L}{f_R+f_L}p_L \]
テーブル台車モデルで定式化(簡単なモデルで近似)
ZMPまわりに重力と台車の加速度が作り出すモーメントが0\[ \tau=(x-p)Mg-Z_{h}M\ddot{x}=0 \](ZMPまわりのモーメントは0)
ZMP方程式の導出(pに関して解く)\[ \begin{align} (x-p)Mg-Z_{h}M\ddot{x}&=0 \\ xMg-pMg-Z_{h}M\ddot{x}&=0 \\ -pMg&=-xMg+Z_{h}M\ddot{x} \\ -p&=\frac{-xMg+Z_{h}M\ddot{x}}{Mg} \\ -p&=-x+\frac{Z_{h}\ddot{x}}{g} \\ p&=x-\frac{Z_{h}}{g}\ddot{x} \end{align} \]
ZMP方程式の意味
ZMP方程式を変形\[ \begin{align} p&=x-\frac{Z_{h}}{g}\ddot{x} \\ -\frac{Z_{h}}{g}\ddot{x}&=p-x \\ \ddot{x}&=-\frac{g}{Z_h}(p-x) \\ \ddot{x}&=\frac{g}{Z_h}(x-p) \end{align} \]
台車(重心)の加速度\[ \ddot{x}=\frac{9.8}{0.98}(0.4-0)=4\,\mathrm{m/s^2} \]
ZMP方程式は重心の運動xからZMPの位置pを求める式。本当に行いたいのは、ZMPを与えてxを求めたい。求めたいのは未知数の重心軌道x
ZMP | → | \( \boxed{ p=x-\frac{Z_{h}}{g}\ddot{x} } \) | → | 重心軌道x |
ZMPはあらかじめ決定しておく(一歩を何秒ぐらいで歩いてほしいか、一歩をどれくらいの距離で動いてほしいか)
連続だったZMP方程式を離散化する\[ p_i=x_i-\frac{Z_h}{g}\ddot x_i \]Δtは、たとえば5ms間隔。ΔtごとのZMP位置を考えて、Δtごとの重心位置を計算したい。
\( \ddot{x} \)を置き換える。加速度を位置の差分で表現する\[ \ddot{x_i}=\frac{1}{\Delta t}(v_{i+1}-v_i)=\frac{1}{\Delta t}(\frac{x_{i+1}-x_i}{\Delta t}-\frac{x_{i}-x_{i-1}}{\Delta t})\]
速度の差分は加速度。さらに、速度は位置の差分から計算できる。
式を整理してまとめる\[ \ddot x_i=\frac{1}{\Delta t^2}(x_{i-1}-2x_{i}+x_{i+1}) \](加速度の近似式)
\( \ddot x_i \)はxで表現できるので、これをZMP方程式に代入して、整理する。\[ \begin{align} p_i&=x_i-\frac{Z_h}{g}\frac{1}{\Delta t^2}(x_{i-1}-2x_{i}+x_{i+1}) \\ p_i&=\left(-\frac{Z_h}{g\Delta t^2}\right)x_{i-1}+\left(1+2\frac{Z_h}{g\Delta t^2}\right)x_i+\left(-\frac{Z_h}{g\Delta t^2}\right)x_{i+1} \end{align} \]
g, Zh, Δtはすべて定数。得られた、離散化されたZMP方程式\[ p_i=ax_{i-1}+bx_{i}+cx_{i+1} \](a, b, cはまとめられた定数)
知りたいのは重心の位置x、ZMPの位置pは与えられている。これを解くためには、未知数が3つで、既知の値がpだけなのでこれだけでは解けない。
方程式を並べる。たとえば、時刻0から時刻99まで\[ p_0=ax_0+bx_0+cx_1 \\ p_1=ax_0+bx_1+cx_2 \\ p_2=ax_1+bx_2+cx_3 \\ \vdots \\ p_{98}=ax_{97}+bx_{98}+cx_{99} \\ p_{99}=ax_{98}+bx_{99}+cx_{99} \]
これをベクトルと行列(マトリクス)で書き直す\[ \begin{bmatrix} p_0 \\ p_1 \\ p_2 \\ \vdots \\ p_{98} \\ p_{99} \end{bmatrix}=\begin{bmatrix} a+b & c & & & & \\ a & b & c & & & \\ & a & b & c & & \\ & & \ddots & \ddots & \ddots & \\ & & & a & b & c \\ & & & & a & b+c \end{bmatrix}\begin{bmatrix} x_0 \\ x_1 \\ x_3 \\ \vdots \\ x_{98} \\ x_{99} \end{bmatrix} \]
こう書いてしまえば線形代数の問題になる \[ \boldsymbol p=M\boldsymbol x \](pは100次元のZMPベクトル、xは100次元の重心ベクトル、100x100の大きな係数行列M)これもZMP方程式(重心軌道とZMPの関係式)
ZMP方程式がこう書かれたのであれば、逆行列を求めれば与えられたZMPから重心軌道xが求められる\[ \boldsymbol x=M^{-1}\boldsymbol p \](ZMPから重心軌道を得る)
産総研の梶田先生が公開されているコード「BasicGaitGen」を使わせていただきました。m(_o_)m
Octaveを起動して「tridiagonal_demo」を実行
|
与えている目標ZMPの軌跡
(処理ごとに「pause」しているので、プロンプトから何かキーを押下)
行列(三重対角行列とその逆行列)の可視化
|
M | M-1 |
---|---|
重心の計算
|
ZMPと重心(の床面投影点)をプロット
X軸 | Y軸 |
---|---|
《積み残し》
«積み残し»
《積み残し》
© 2019 Tadakazu Nagai