Skip to content

Commit 838761d

Browse files
authored
Merge pull request #550 from Naoki-Hiraoka/add-documentation-of-gg
add documentation of :calc-walk-pattern-from-footstep-list
2 parents c0b14fc + 5134c90 commit 838761d

File tree

3 files changed

+269
-1
lines changed

3 files changed

+269
-1
lines changed

doc/fig/walk-motion.jpg

46.8 KB
Loading

doc/irtmodel.tex

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2185,4 +2185,230 @@ \subsubsection{外力を考慮したfullbody-inverse-kinematicsを解く例}
21852185
\subsection{環境モデル}
21862186
\input{irtscene-func}
21872187
\subsection{動力学計算・歩行動作生成}
2188+
\subsubsection{歩行動作生成}
2189+
歩行動作は予見制御を用いて生成される。文献\footnote{
2190+
Humanoid Robot (in Japanese), Shuji Kajita, Ohmsha, 2005, ISBN 4-274-20058-2
2191+
}\footnote{
2192+
Biped Walking Pattern Generation by using Preview Control of Zero-Moment Point, Shuji Kajita and Fumio Kanehiro and Kenji Kaneko and Kiyoshi Fujiwara and Kensuke Harada and Kazuhito Yokoi and Hirohisa Hirukawa, ICRA 2003, p.1620-1626, 2006
2193+
}\footnote{
2194+
最適予見制御と一般化予測制御, 江上 正 and土谷 武士, 計測と制御, 39 巻, 5 号, p.337-342, 2000
2195+
}に述べられている式や文章を引用しつつ、説明する。
2196+
2197+
歩行動作は以下の手順で生成される。
2198+
\begin{enumerate}
2199+
\item 脚の逆運動学が解ける範囲内の歩幅で、ロボットが足をつく位置と時間を計画する。
2200+
\item 地面についていない足は、次につく位置までサイクロイド補間する。
2201+
\item ZMPが地面についている足の位置とできる限り一致するような重心軌道を生成する。
2202+
\item 計画された足と重心の軌道を満たすような関節角度軌道を逆運動学によって逐次求める。
2203+
\end{enumerate}
2204+
ここでは、3の手順について詳しく説明する。
2205+
2206+
X方向の運動について、始めに次のような制御系を考える。Y方向の運動についても同様に議論することが可能である。
2207+
\begin{eqnarray}
2208+
&& \left\{
2209+
\begin{array}{l}
2210+
x_{k+1} = A x_k + b u_k \\
2211+
p_k = c x_k
2212+
\end{array}
2213+
\right. \eqlabel{preview_control}\\
2214+
&& x_k \equiv \left[
2215+
\begin{array}{c}
2216+
x(k\Delta t)\\
2217+
\dot x(k\Delta t)\\
2218+
\ddot x(k\Delta t)
2219+
\end{array}
2220+
\right] ~~~~ u_k \equiv u(k\Delta t) ~~~~ p_k \equiv p(k\Delta t)\nonumber\\
2221+
&& A \equiv \left[
2222+
\begin{array}{c c c}
2223+
1 & \Delta t & \Delta t^2 / 2\\
2224+
0 & 1 & \Delta t\\
2225+
0 & 0 & 1
2226+
\end{array}
2227+
\right] ~~~~ b \equiv \left[
2228+
\begin{array}{c}
2229+
\Delta t^3 / 6\\
2230+
\Delta t^2 / 2\\
2231+
\Delta t
2232+
\end{array}
2233+
\right] ~~~~ c \equiv \left[
2234+
\begin{array}{c c c}
2235+
1 & 0 & -z_c/g
2236+
\end{array}
2237+
\right]\nonumber
2238+
\end{eqnarray}
2239+
$x$はロボットの重心位置、$u$は重心の加速度の時間微分(jerk)、$p$はZMPである。
2240+
2241+
次に、このシステムを次のような拡大系に置き換える。
2242+
\begin{eqnarray}
2243+
&& \left\{
2244+
\begin{array}{l}
2245+
x^\ast_{k+1} = \tilde{A} x^\ast_k + \tilde{b} \Delta u_k \\
2246+
p_k = \tilde{c} x^\ast_k
2247+
\end{array}
2248+
\right. \eqlabel{extended_preview_control}\\
2249+
&& \Delta u_k \equiv u_k - u_{k-1} ~~~~ \Delta x_k \equiv x_k - x_{k-1} ~~~~ x^\ast_k \equiv \left[
2250+
\begin{array}{c}
2251+
p_k\\
2252+
\Delta x_k
2253+
\end{array}
2254+
\right] \nonumber\\
2255+
&& \tilde{A} \equiv \left[
2256+
\begin{array}{c c}
2257+
1 & cA\\
2258+
0 & A
2259+
\end{array}
2260+
\right] ~~~~ \tilde{b} \equiv \left[
2261+
\begin{array}{c}
2262+
cb\\
2263+
b
2264+
\end{array}
2265+
\right] ~~~~ \tilde{c} \equiv \left[
2266+
\begin{array}{c c c c}
2267+
1 & 0 & 0 & 0
2268+
\end{array}
2269+
\right]\nonumber
2270+
\end{eqnarray}
2271+
この\eqref{extended_preview_control}のシステムに対して、次のコスト関数を最小化するような制御入力を求める。
2272+
\begin{eqnarray}
2273+
J_k = \sum_{j=k}^{\infty} \{Q(p_{j}^{ref} - p_{j})^2 + R\Delta u_{j}^2\} \eqlabel{extended_preview_control_costfunc}
2274+
\end{eqnarray}
2275+
これは、以下のようにして求められる。
2276+
まず、十分大きい自然数$M$を用いて次のコスト関数を考え、次に$M \rightarrow \infty$とすることで\eqref{extended_preview_control_costfunc}を最小化する制御入力を得る。
2277+
\begin{eqnarray}
2278+
J_k^M = \sum_{j=k}^{M-1} \{Q(p_{j}^{ref} - p_{j})^2 + R\Delta u_{j}^2\} \eqlabel{extended_preview_control_costfuncM}
2279+
\end{eqnarray}
2280+
$J_k^M$の最小値を$J_k^{M\ast}$とすると、\eqref{extended_preview_control_costfuncM}から次の関係が成り立つ。
2281+
\begin{eqnarray}
2282+
J_k^{M\ast} = \min_{\Delta u_k} \{Q(p_k^{ref} - p_k)^2 + R\Delta u_k^2 + J_{k+1}^{M\ast}\} \eqlabel{extended_preview_control_costfunc2}
2283+
\end{eqnarray}
2284+
ここで、$J_k^{M\ast}$を次のようにおく。
2285+
\begin{eqnarray}
2286+
J_k^{M\ast} = x_k^{\ast T} P_k^M x_k^\ast + \theta_k^{MT} x_k^\ast + \phi_k^M \eqlabel{extended_preview_control_J}
2287+
\end{eqnarray}
2288+
これを用いて、\eqref{extended_preview_control_costfunc2}の右辺を$\Delta u_k$で偏微分した値が0であることから、次の式を得る。
2289+
\begin{eqnarray}
2290+
0 = && \frac{\partial}{\partial \Delta u_k} \{ Q(p_k^{ref} - p_k)^2 + R\Delta u_k^2 + (\tilde{A} x^\ast_k + \tilde{b} \Delta u_k)^T P_{k+1}^M (\tilde{A} x^\ast_k + \tilde{b} \Delta u_k) + \theta_{k+1}^{MT} (\tilde{A} x^\ast_k + \tilde{b} \Delta u_k) + \phi_{k+1}^M \} \nonumber\\
2291+
0 =&& \Delta u_k^T R + \Delta u_k^T \tilde{b}^T P_{k+1}^M \tilde{b} + x_k^{\ast T} \tilde{A}^T P_{k+1}^M \tilde{b} + \frac{1}{2} \theta_{k+1}^{MT} \tilde{b} \nonumber \\
2292+
\Delta u_k =&& -(\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T P_{k+1}^M \tilde{A} x_k^\ast - \frac{1}{2} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T \theta_{k+1}^M\eqlabel{extended_preview_control_u}
2293+
\end{eqnarray}
2294+
これを\eqref{extended_preview_control_costfunc2}に代入することで、以下を得る。
2295+
\begin{eqnarray}
2296+
&& x_k^{\ast T} P_k^M x_k^\ast + \theta_k^{M T} x_k^\ast + \phi_k^M \nonumber \\
2297+
=&& x_k^{\ast T} (\tilde{c}^T Q \tilde{c} + \tilde{A}^T P_{k+1}^M \tilde{A} - \tilde{A}^T P_{k+1}^M \tilde{b} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T P_{k+1}^M \tilde{A}) x_k^\ast \nonumber\\
2298+
&& + \{-2 \tilde{c}^T Q p_k^{ref} + \tilde{A}^T \theta_{k+1}^M - \tilde{A}^T P_{k+1}^M \tilde{b} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T \theta_{k+1}^M \}^T x_k^\ast \nonumber\\
2299+
&& + Q p_k^{ref 2} - \frac{1}{4} \theta_{k+1}^{MT} \tilde{b} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T \theta_{k+1}^M + \phi_{k+1}^M
2300+
\end{eqnarray}
2301+
これが任意の$x_k^{\ast T}$に対し成り立つので、
2302+
\begin{eqnarray}
2303+
P_k^M &=& \tilde{c}^T Q \tilde{c} + \tilde{A}^T P_{k+1}^M \tilde{A} - \tilde{A}^T P_{k+1}^M \tilde{b} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T P_{k+1}^M \tilde{A} \eqlabel{extended_preview_control_P}\\
2304+
\theta_k^M &=& -2 \tilde{c}^T Q p_k^{ref} + \{\tilde{A}^T - \tilde{A}^T P_{k+1}^M \tilde{b} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T\} \theta_{k+1}^M \eqlabel{extended_preview_control_theta}\\
2305+
\phi_k^M &=& Q p_k^{ref 2} - \frac{1}{4} \theta_{k+1}^{MT} \tilde{b} (\tilde{b}^T P_{k+1}^M \tilde{b} + R )^{-1} \tilde{b}^T \theta_{k+1}^M + \phi_{k+1}^M
2306+
\end{eqnarray}
2307+
境界条件を考えると、\eqref{extended_preview_control_costfuncM}は$k = M$において$J_{k+M}^{M\ast} = 0$であるから、$k = M$において\eqref{extended_preview_control_J}が任意の$x_{M}^\ast$で恒等的に成り立つ条件を考えて、$P_{M}^M = 0$$\theta_{M}^M = 0$$\phi_{M}^M = 0$である。したがって、十分小さい$j$において$P_{k+j}^M$\eqref{extended_preview_control_P}の定常解$P$となり、次の式を満たす。
2308+
\begin{eqnarray}
2309+
P &=& \tilde{c}^T Q \tilde{c} + \tilde{A}^T P \tilde{A} - \tilde{A}^T P \tilde{b} (\tilde{b}^T P \tilde{b} + R )^{-1} \tilde{b}^T P \tilde{A} \eqlabel{extended_preview_control_P2}
2310+
\end{eqnarray}
2311+
以後、$M \rightarrow \infty$として考える。自然数$N$を考えて、$j > N$において$p_{k+j}^{ref} = p_{k+N}^{ref}$と仮定すると、\eqref{extended_preview_control_theta}は次のように表せる。(\eqref{extended_preview_control_P2}は十分小さい$j$における$P_{k+j}$でのみ成り立たつが、十分大きな$j$では$(\tilde{A} - \tilde{b} K)^{T j} \rightarrow 0$と仮定し無視した。)($K \equiv (\tilde{b}^T P \tilde{b} + R )^{-1} \tilde{b}^T P \tilde{A}$とおいた。)
2312+
\begin{eqnarray}
2313+
\theta_k &=& -2 \tilde{c}^T Q p_k^{ref} + (\tilde{A} - \tilde{b} K)^T \theta_{k+1} \nonumber\\
2314+
&=& -2 \{ \tilde{c}^T Q p_k^{ref} + (\tilde{A} - \tilde{b} K)^T \tilde{c}^T Q p_{k+1}^{ref} + \cdots + (\tilde{A} - \tilde{b} K)^{T N-2} \tilde{c}^T Q p_{k+N-1}^{ref} \nonumber\\
2315+
& & + (\tilde{A} - \tilde{b} K)^{T N-1} \tilde{c}^T Q p_{k+N}^{ref} + (\tilde{A} - \tilde{b} K)^{T N} \tilde{c}^T Q p_{k+N+1}^{ref} + (\tilde{A} - \tilde{b} K)^{T (N+1)} \tilde{c}^T Q p_{k+N+2}^{ref} + \cdots \} \nonumber \\
2316+
&=& -2 \{ \tilde{c}^T Q p_k^{ref} + (\tilde{A} - \tilde{b} K)^T \tilde{c}^T Q p_{k+1}^{ref} + \cdots + (\tilde{A} - \tilde{b} K)^{T N-2} \tilde{c}^T Q p_{k+N-1}^{ref} \nonumber\\
2317+
& & + (\tilde{A} - \tilde{b} K)^{T N-1} \tilde{c}^T Q p_{k+N}^{ref} + (\tilde{A} - \tilde{b} K)^{T N} \tilde{c}^T Q p_{k+N}^{ref} + (\tilde{A} - \tilde{b} K)^{T (N+1)} \tilde{c}^T Q p_{k+N}^{ref} + \cdots \} \nonumber \\
2318+
&=& -2 \sum_{j=1}^{N-1} \{ (\tilde{A} - \tilde{b} K)^{T j-1} \tilde{c}^T Q p_{k+j}^{ref} \} -2 \sum_{j=N}^{\infty} \{ (\tilde{A} - \tilde{b} K)^{T j-1} \tilde{c}^T Q p_{k+N}^{ref} \}\eqlabel{extended_preview_control_theta2}
2319+
\end{eqnarray}
2320+
ここで\eqref{extended_preview_control_P2}を$K$を用いて表現すると、
2321+
\begin{eqnarray}
2322+
P &=& \tilde{c}^T Q \tilde{c} + (\tilde{A} - \tilde{b} K)^T P \tilde{A} \eqlabel{extended_preview_control_P3}
2323+
\end{eqnarray}
2324+
が得られる。この両辺に$P \tilde{A}$を加え整理すると、
2325+
\begin{eqnarray}
2326+
(I - (\tilde{A} - \tilde{b} K)^{T}) P \tilde{A} &=& P (\tilde{A} - I) + \tilde{c}^T Q \tilde{c} \eqlabel{extended_preview_control_P4}
2327+
\end{eqnarray}
2328+
となる。ここで$\tilde{A} = \left[\begin{array}{c c} 1 & cA\\ 0 & A \end{array} \right]$$\tilde{c} = \left[\begin{array}{c c c c} 1 & 0 & 0 & 0 \end{array} \right]$を利用すると、\eqref{extended_preview_control_P4}の第1列目の等式から、
2329+
\begin{eqnarray}
2330+
(I - (\tilde{A} - \tilde{b} K)^{T}) P \tilde{c}^T &=& \tilde{c}^T Q \eqlabel{extended_preview_control_P5}
2331+
\end{eqnarray}
2332+
が成り立つ。この\eqref{extended_preview_control_P5}を\eqref{extended_preview_control_theta2}に代入すると、
2333+
\begin{eqnarray}
2334+
\theta_k &=& -2 \sum_{j=1}^{N-1} \{ (\tilde{A} - \tilde{b} K)^{T j-1} \tilde{c}^T Q p_{k+j}^{ref} \} -2 (\tilde{A} - \tilde{b} K)^{T N-1} P \tilde{c}^T p_{k+N}^{ref} \eqlabel{extended_preview_control_theta3}
2335+
\end{eqnarray}
2336+
を得る。この\eqref{extended_preview_control_theta3}を\eqref{extended_preview_control_u}に代入することで、\eqref{extended_preview_control_costfunc}を最小化する最適制御入力$\Delta u_k$が得られる。
2337+
\begin{eqnarray}
2338+
\Delta u_k &=& -K x_k^\ast + \sum_{j=1}^N \tilde{f}_j p_{k+j}^{ref}\eqlabel{extended_preview_control_u2}\\
2339+
\tilde{f}_j &=& \begin{cases}
2340+
(\tilde{b}^T P \tilde{b} + R )^{-1} \tilde{b}^T (\tilde{A} - \tilde{b} K)^{T j-1} \tilde{c}^T Q & (j<N) \\
2341+
(\tilde{b}^T P \tilde{b} + R )^{-1} \tilde{b}^T (\tilde{A} - \tilde{b} K)^{T N-1} P \tilde{c}^T & (j=N)
2342+
\end{cases}\nonumber
2343+
\end{eqnarray}
2344+
初期状態$x_1^\ast$と目標ZMP軌道$p_{1}^{ref},~p_{2}^{ref},~\cdots$が与えられれば、\eqref{extended_preview_control_u2}と\eqref{extended_preview_control}のシステムによって$\Delta u_1,~x_2^\ast,~\Delta u_2,~x_3^\ast,~\cdots$が順次求まる。これによって、ZMPが地面についている足の位置とできる限り一致するような重心軌道を生成することができる。
2345+
2346+
\subsubsection{歩行動作生成の例}
2347+
\begin{figure}[htb]
2348+
\begin{center}
2349+
\includegraphics[width=0.49\columnwidth]{fig/walk-motion.jpg}
2350+
\caption{Example of walk pattern generation}
2351+
\labfig{walk-motion}
2352+
\end{center}
2353+
\end{figure}
2354+
2355+
\verb|robot-model|クラスには、オフライン歩行動作生成を行い歩行軌道を返す関数:calc-walk-pattern-from-footstep-listが定義されている。この関数は、1歩ごとの足をつく位置のリストを与えると、ZMPがこの位置に出来る限り近くなるような歩行動作を生成する。以下に示すプログラムは、:calc-walk-pattern-from-footstep-listを用いて歩行動作生成を行うものである(\reffig{walk-motion})。
2356+
2357+
{\baselineskip=10pt
2358+
\begin{verbatim}
2359+
(load "irteus/demo/sample-robot-model.l")
2360+
(setq *robot* (instance sample-robot :init))
2361+
(send *robot* :reset-pose)
2362+
(send *robot* :fix-leg-to-coords (make-coords))
2363+
(objects (list *robot*))
2364+
2365+
(let ((footstep-list
2366+
(list (make-coords :coords (send *robot* :rleg :end-coords :copy-worldcoords) :name :rleg)
2367+
(make-coords :coords (send (send *robot* :lleg :end-coords :copy-worldcoords)
2368+
:translate #f(100 0 0)) :name :lleg)
2369+
(make-coords :coords (send (send *robot* :rleg :end-coords :copy-worldcoords)
2370+
:translate #f(200 0 0)) :name :rleg)
2371+
(make-coords :coords (send (send *robot* :lleg :end-coords :copy-worldcoords)
2372+
:translate #f(300 0 0)) :name :lleg)
2373+
(make-coords :coords (send (send *robot* :rleg :end-coords :copy-worldcoords)
2374+
:translate #f(400 0 0)) :name :rleg)
2375+
(make-coords :coords (send (send *robot* :lleg :end-coords :copy-worldcoords)
2376+
:translate #f(400 0 0)) :name :lleg))))
2377+
(objects (append (list *robot*) footstep-list))
2378+
2379+
(send *robot* :calc-walk-pattern-from-footstep-list
2380+
footstep-list
2381+
:default-step-height 50
2382+
:default-step-time 1.0
2383+
:dt 0.1
2384+
:debug-view t)
2385+
)
2386+
\end{verbatim}
2387+
}
2388+
変数\verb|footstep-list|に足をつく位置のリストをセットし、:calc-walk-pattern-from-footstep-listに与えている。\verb|footstep-list|の各要素は、\verb|:name|にいずれの脚かを指定する必要がある。\verb|footstep-list|の最初の要素は初期化のために用いられ、実際にロボットが脚を踏み出すのは次の要素以降の位置に対してである。\verb|:default-step-height 50|では遊脚をサイクロイド補間するときの高さを50[mm]に指定している。\verb|:default-step-time 1.0|は一歩あたりの時間を1.0[s]に指定している。\verb|:dt 0.1|は予見制御のサンプリングタイムと生成される軌道の間隔を0.1[s]に指定している。なお、\verb|:default-step-height|、\verb|:default-step-time|、\verb|:dt|はデフォルト値がこの値となっているため、実際にはこれらの値を設定する必要はない。
2389+
2390+
2391+
次に示すプログラムは、移動したい目的地を与えると\verb|footstep-list|を自動で生成して歩行動作生成を行うものである。
2392+
{\baselineskip=10pt
2393+
\begin{verbatim}
2394+
(load "irteus/demo/sample-robot-model.l")
2395+
(setq *robot* (instance sample-robot :init))
2396+
(send *robot* :reset-pose)
2397+
(send *robot* :fix-leg-to-coords (make-coords))
2398+
(objects (list *robot*
2399+
(apply #'midcoords 0.5 (send *robot* :legs :end-coords))
2400+
(send (send (apply #'midcoords 0.5 (send *robot* :legs :end-coords))
2401+
:translate #F(500 150 0)) :rotate (deg2rad 45) :z)))
2402+
2403+
(send *robot* :calc-walk-pattern-from-footstep-list
2404+
(send *robot* :go-pos-params->footstep-list
2405+
500 150 45) ;; x[mm] y[mm] th[deg]
2406+
:debug-view t
2407+
)
2408+
\end{verbatim}
2409+
}
2410+
\verb|footstep-list|として\verb|(send *robot* :go-pos-params->footstep-list 500 150 45)|の返り値を与えて、先の例と同様\verb|:calc-walk-pattern-from-footstep-list|関数で歩行動作を生成している。
2411+
2412+
\verb|:go-pos-params->footstep-list|関数は、2本足で立ったロボットについて、脚の逆運動学が解ける範囲内で現在の位置から目的地までの\verb|footstep-list|を生成する関数であり、ここでは前に500[mm]、左に150[mm]移動し、左に45[deg]体を回転させるような\verb|footstep-list|を生成している。
2413+
21882414
\input{irtdyna-func}

irteus/irtrobot.l

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,49 @@
687687
(ik-thre 1) (ik-rthre (deg2rad 1))
688688
(q 1.0) (r 1e-6) ;; Q is weighting of output error and R is weighting of input.
689689
(calc-zmp t))
690-
"Calculate walking pattern from foot step list and return pattern list as a list of angle-vector, root-coords, time, and so on."
690+
"Calculate walking pattern from foot step list and return pattern list as a list of angle-vector, root-coords, time, and so on.
691+
footstep-list should be given.
692+
:footstep-list
693+
~ (list footstep1 footstep2 ...). :footstep-list can be any length. Each footstep indicates the destinations of swing legs in each step.
694+
~ footstep should be list of coordinate whose :name is identical with one swing leg and whose coords is the destination of that leg. If number of swing legs in a step is one, the footstep can be a coordinate.
695+
~ footstep1 is only for intialization and not executed.
696+
:default-step-height
697+
~ Height of swing leg cycloid trajectories. Default is 50[mm].
698+
:dt
699+
~ Sampling time of preview control and output walk pattern. Default is 0.1[s].
700+
:default-step-time
701+
~ Reference time of each step. The first 10 percent and the last 10 percent of default-step-time is double support phase. Default is 1.0[s].
702+
:solve-angle-vector-args
703+
~ :move-centroid-on-foot is used to solve IK in :calc-walk-pattern-from-footstep-list. :solve-angle-vector-args is passed to :move-centroid-on-foot in the form of (send* self :move-centroid-on-foot ... solve-angle-vector-args). Default is nil.
704+
:debug-view
705+
~ Set t to show visualization. Default is nil.
706+
:all-limbs
707+
~ list of limb names. In each walking step, limbs in :all-limbs but not assigned as swing legs by :footstep-list are considered to be support legs. Default is '(:rleg :lleg) sorted in force-sensors order.
708+
:default-zmp-offsets
709+
~ (list limbname1 offset1 limbname2 offset2 ...). :default-zmp-offsets should include every limb in :all-limbs. offset is a float-vector[mm] and local offset of reference zmp position from end-coords. Default offset is #F(0 0 0)[mm].
710+
:init-pose-function
711+
~ A function which initialize robot's pose. Walking pattern is generated from this initial pose. :init-pose-function is called once at the start of walking pattern generation in the form of (funcall init-pose-function). Default is #'(lambda () (send self :move-centroid-on-foot :both '(:rleg :lleg))).
712+
:start-with-double-support
713+
~ At the start of walking pattern generation, the initial position of reference zmp is
714+
~~ t: midpoint of all-limbs.
715+
~~ nil: midpoint of swing legs of footstep1.
716+
~ Default is t.
717+
:end-with-double-support
718+
~ At the end of walking pattern generation, the final position of reference zmp is
719+
~~ t: midpoint of all-limbs.
720+
~~ nil: midpoint of support legs of the last footstep.
721+
~ Default is t.
722+
:ik-thre
723+
~ Threshold for position error to terminate IK iteration. Default is 1[mm].
724+
:ik-rthre
725+
~ Threshold for rotation error to terminate IK iteration. Default is (deg2rad 1)[rad].
726+
:q
727+
~ Weight Q of the cost function of preview control. Default is 1.0.
728+
:r
729+
~ Weight R of the cost function of preview control. Default is 1e-6.
730+
:calc-zmp
731+
~ Set t to calculate resultant ZMP after IK. The calculated ZMP is visualized if :debug-view is t, and stored as czmp in return value. Default is t.
732+
"
691733
(let* ((res) (ret) (tm 0)
692734
(gg (instance gait-generator :init self dt)))
693735
(funcall init-pose-function)

0 commit comments

Comments
 (0)