@@ -2040,25 +2040,27 @@ \subsubsection{重心位置を考慮したfullbody-inverse-kinematicsの例}
20402040
20412041(let* ((rleg-coords (send *robot* :rleg :end-coords :copy-worldcoords))
20422042 (lleg-coords (send *robot* :lleg :end-coords :copy-worldcoords)))
2043- (send *robot* :fullbody-inverse-kinematics
2044- (list rleg-coords
2045- lleg-coords
2046- (make-coords :pos (float-vector 400 100 -600)))
2047- :move-target
2048- (list (send *robot* :rleg :end-coords)
2049- (send *robot* :lleg :end-coords)
2050- (send *robot* :larm :end-coords))
2051- :link-list
2052- (list (send *robot* :link-list (send *robot* :rleg :end-coords :parent))
2053- (send *robot* :link-list (send *robot* :lleg :end-coords :parent))
2054- (send *robot* :link-list (send *robot* :larm :end-coords :parent)))
2055- :translation-axis (list t t t)
2056- :rotation-axis (list t t nil)
2057- :target-centroid-pos (midpoint 0.5 (send *robot* :rleg :end-coords :worldpos)
2058- (send *robot* :lleg :end-coords :worldpos))
2059- :cog-translation-axis :z)
2060- (send *obj* :locate (send *robot* :centroid) :world)
2061- (send *irtviewer* :draw-objects))
2043+ (send *robot* :torso :waist-p :joint-angle 10)
2044+ (send *robot* :fullbody-inverse-kinematics
2045+ (list rleg-coords
2046+ lleg-coords
2047+ (make-coords :pos (float-vector 400 100 -600)))
2048+ :move-target
2049+ (list (send *robot* :rleg :end-coords)
2050+ (send *robot* :lleg :end-coords)
2051+ (send *robot* :larm :end-coords))
2052+ :link-list
2053+ (list (send *robot* :link-list (send *robot* :rleg :end-coords :parent))
2054+ (send *robot* :link-list (send *robot* :lleg :end-coords :parent))
2055+ (send *robot* :link-list (send *robot* :larm :end-coords :parent)))
2056+ :translation-axis (list t t t)
2057+ :rotation-axis (list t t nil)
2058+ :target-centroid-pos (midpoint 0.5
2059+ (send *robot* :rleg :end-coords :worldpos)
2060+ (send *robot* :lleg :end-coords :worldpos))
2061+ :cog-translation-axis :z)
2062+ (send *obj* :locate (send *robot* :centroid) :world)
2063+ (send *irtviewer* :draw-objects))
20622064\end {verbatim }
20632065}
20642066
@@ -2082,10 +2084,11 @@ \subsubsection{重心位置を考慮したfullbody-inverse-kinematicsの例}
20822084:cog-translation-axis :z)
20832085\end {verbatim }
20842086}
2085- の行では重心の逆運動学を指定しており、 \verb |:cog-translation-axis :z |で
2086- z方向の重心の移動は許した状態で\verb |:target-centroid-pos |で目標位置として
2087+ の行では重心の逆運動学を指定している。 \verb |:cog-translation-axis :z |で
2088+ z方向の重心の移動は許した状態で、 \verb |:target-centroid-pos |で目標重心位置として
20872089両足の中間の座標を与えることによって、重心のxy座標を両足の中間に一致させる
2088- 条件のもとで逆運動学を解くことになる。
2090+ 条件のもとで逆運動学を解くことができる。これらの引数は、デフォルト値になっている
2091+ ので、省略可能である。
20892092
20902093\subsubsection {外力を考慮したfullbody-inverse-kinematicsを解く例 }
20912094\begin {figure }[htb]
@@ -2158,7 +2161,7 @@ \subsubsection{外力を考慮したfullbody-inverse-kinematicsを解く例}
21582161 :moment-list moment-list))
21592162\end {verbatim }
21602163}
2161- の行で外力、外モーメントを考慮している。force-listは右手に作用する外力と左手に作用する外力のリスト、force-listは右手に作用する外モーメントと左手に作用する外モーメントのリストであり、単位はそれぞれ[N]、[Nm]である。:calc-static-balance-pointは、現在の両手の位置に作用する外力外モーメントと現在の重心の位置に作用する重力に対してバランスが取れる足裏圧力中心の位置を返す関数である 。:centroid-offset-funcは\verb|float-vector|クラスを返す関数を指定することができ、現在の重心位置の代わりにこの関数の返り値を用いて目標重心位置との距離に応じた逆運動学を解く 。\verb|:cog-translation-axis :z|でz方向の重心の移動は許した状態で\verb|:target-centroid-pos|で目標重心位置として両足の中間の座標を与えることによって、:centroid-offset-funcの返り値、即ちバランスが取れる足裏圧力中心のxy座標を両足の中間に一致させる逆運動学を解くことになる 。
2164+ の行で外力、外モーメントを考慮している。force-listは右手に作用する外力と左手に作用する外力のリスト、force-listは右手に作用する外モーメントと左手に作用する外モーメントのリストであり、単位はそれぞれ[N]、[Nm]である。:calc-static-balance-pointは、現在の両手の位置に作用する外力外モーメントと現在の重心の位置に作用する重力に対して釣り合う足裏圧力中心の位置を返す関数である 。:centroid-offset-funcは\verb|float-vector|クラスを返す関数を指定することができ、現在の重心位置の代わりにこの関数の返り値を用いて目標重心位置との距離を縮める逆運動学を解く 。\verb|:cog-translation-axis :z|でz方向の重心の移動は許した状態で\verb|:target-centroid-pos|で目標重心位置として両足の中間の座標を与えることによって、:centroid-offset-funcの返り値、即ち外力に釣り合いがとれる足裏圧力中心のxy座標を、両足の中間に一致させる逆運動学を解くことができる 。
21622165
21632166 \subsection {ロボットモデル }
21642167
0 commit comments