@@ -41,14 +41,14 @@ def __init__(self, world, skel):
4141 self .world = world
4242 self .skel = skel
4343 self .dofs = self .skel .getNumDofs ()
44- self .left_heel = self .skel .getBodyNode (' h_heel_left' )
44+ self .left_heel = self .skel .getBodyNode (" h_heel_left" )
4545 self .left_foot = [
46- self .skel .getDof (' j_heel_left_1' ).getIndexInSkeleton (),
47- self .skel .getDof (' j_toe_left' ).getIndexInSkeleton (),
46+ self .skel .getDof (" j_heel_left_1" ).getIndexInSkeleton (),
47+ self .skel .getDof (" j_toe_left" ).getIndexInSkeleton (),
4848 ]
4949 self .right_foot = [
50- self .skel .getDof (' j_heel_right_1' ).getIndexInSkeleton (),
51- self .skel .getDof (' j_toe_right' ).getIndexInSkeleton (),
50+ self .skel .getDof (" j_heel_right_1" ).getIndexInSkeleton (),
51+ self .skel .getDof (" j_toe_right" ).getIndexInSkeleton (),
5252 ]
5353 self .timestep = world .getTimeStep ()
5454 self .Kp = np .eye (self .dofs )
@@ -83,15 +83,17 @@ def __init__(self, world, skel):
8383 self .world .addSimpleFrame (self .ext_force_simple_frame )
8484
8585 def customPreStep (self ):
86- q = self .skel .getPositions ();
87- dq = self .skel .getVelocities ();
86+ q = self .skel .getPositions ()
87+ dq = self .skel .getVelocities ()
8888 constraint_forces = self .skel .getConstraintForces ()
8989
9090 # SPD tracking
9191 invM = np .linalg .inv (self .skel .getMassMatrix () + self .Kd * self .timestep )
9292 p = np .matmul (- self .Kp , q + dq * self .timestep - self .q_d )
9393 d = np .matmul (- self .Kd , dq )
94- ddq = np .matmul (invM , - self .skel .getCoriolisAndGravityForces () + p + d + constraint_forces )
94+ ddq = np .matmul (
95+ invM , - self .skel .getCoriolisAndGravityForces () + p + d + constraint_forces
96+ )
9597
9698 self .torques = p + d + np .matmul (- self .Kd , ddq ) * self .timestep
9799
@@ -101,21 +103,37 @@ def customPreStep(self):
101103
102104 offset = com [0 ] - cop [0 ]
103105 if offset < 0.1 and offset > 0.0 :
104- k1 = 200
105- k2 = 100
106- kd = 10
107- self .torques [self .left_foot [0 ]] += - k1 * offset + kd * (self .pre_offset - offset )
108- self .torques [self .left_foot [1 ]] += - k2 * offset + kd * (self .pre_offset - offset )
109- self .torques [self .right_foot [0 ]] += - k1 * offset + kd * (self .pre_offset - offset )
110- self .torques [self .right_foot [1 ]] += - k2 * offset + kd * (self .pre_offset - offset )
106+ k1 = 200
107+ k2 = 100
108+ kd = 10
109+ self .torques [self .left_foot [0 ]] += - k1 * offset + kd * (
110+ self .pre_offset - offset
111+ )
112+ self .torques [self .left_foot [1 ]] += - k2 * offset + kd * (
113+ self .pre_offset - offset
114+ )
115+ self .torques [self .right_foot [0 ]] += - k1 * offset + kd * (
116+ self .pre_offset - offset
117+ )
118+ self .torques [self .right_foot [1 ]] += - k2 * offset + kd * (
119+ self .pre_offset - offset
120+ )
111121 elif offset > - 0.2 and offset < - 0.05 :
112122 k1 = 2000
113123 k2 = 100
114124 kd = 100
115- self .torques [self .left_foot [0 ]] += - k1 * offset + kd * (self .pre_offset - offset )
116- self .torques [self .left_foot [1 ]] += - k2 * offset + kd * (self .pre_offset - offset )
117- self .torques [self .right_foot [0 ]] += - k1 * offset + kd * (self .pre_offset - offset )
118- self .torques [self .right_foot [1 ]] += - k2 * offset + kd * (self .pre_offset - offset )
125+ self .torques [self .left_foot [0 ]] += - k1 * offset + kd * (
126+ self .pre_offset - offset
127+ )
128+ self .torques [self .left_foot [1 ]] += - k2 * offset + kd * (
129+ self .pre_offset - offset
130+ )
131+ self .torques [self .right_foot [0 ]] += - k1 * offset + kd * (
132+ self .pre_offset - offset
133+ )
134+ self .torques [self .right_foot [1 ]] += - k2 * offset + kd * (
135+ self .pre_offset - offset
136+ )
119137
120138 # Just to make sure no illegal torque is used
121139 for i in range (6 ):
@@ -128,7 +146,7 @@ def customPreStep(self):
128146 if self .ext_force_duration <= 0 :
129147 self .ext_force_duration = 0
130148 self .ext_force = np .zeros (3 )
131- spine = self .skel .getBodyNode (' h_spine' )
149+ spine = self .skel .getBodyNode (" h_spine" )
132150 spine .addExtForce (self .ext_force )
133151 if self .ext_force_duration > 0 :
134152 arrow_head = spine .getTransform ().translation ()
@@ -149,18 +167,18 @@ def external_force(self):
149167
150168
151169def main ():
152- world = dart .utils .SkelParser .readWorld (' dart://sample/skel/fullbody1.skel' )
170+ world = dart .utils .SkelParser .readWorld (" dart://sample/skel/fullbody1.skel" )
153171 world .setGravity ([0 , - 9.81 , 0 ])
154172
155- biped = world .getSkeleton (' fullbody1' )
156- biped .getDof (' j_pelvis_rot_y' ).setPosition (- 0.20 )
157- biped .getDof (' j_thigh_left_z' ).setPosition (0.15 )
158- biped .getDof (' j_shin_left' ).setPosition (- 0.40 )
159- biped .getDof (' j_heel_left_1' ).setPosition (0.25 )
160- biped .getDof (' j_thigh_right_z' ).setPosition (0.15 )
161- biped .getDof (' j_shin_right' ).setPosition (- 0.40 )
162- biped .getDof (' j_heel_right_1' ).setPosition (0.25 )
163- biped .getDof (' j_abdomen_2' ).setPosition (0.00 )
173+ biped = world .getSkeleton (" fullbody1" )
174+ biped .getDof (" j_pelvis_rot_y" ).setPosition (- 0.20 )
175+ biped .getDof (" j_thigh_left_z" ).setPosition (0.15 )
176+ biped .getDof (" j_shin_left" ).setPosition (- 0.40 )
177+ biped .getDof (" j_heel_left_1" ).setPosition (0.25 )
178+ biped .getDof (" j_thigh_right_z" ).setPosition (0.15 )
179+ biped .getDof (" j_shin_right" ).setPosition (- 0.40 )
180+ biped .getDof (" j_heel_right_1" ).setPosition (0.25 )
181+ biped .getDof (" j_abdomen_2" ).setPosition (0.00 )
164182
165183 node = MyWorldNode (world , biped )
166184
0 commit comments