47
47
# strain_selector = jnp.ones((3 * num_segments,), dtype=bool)
48
48
strain_selector = jnp .array ([True , False , True ])[None , :].repeat (num_segments , axis = 0 ).flatten ()
49
49
50
+ B_xi , forward_kinematics_fn , dynamical_matrices_fn , auxiliary_fns = (
51
+ pneumatic_planar_pcs .factory (num_segments , sym_exp_filepath , strain_selector )
52
+ )
53
+ # jit the functions
54
+ dynamical_matrices_fn = jax .jit (dynamical_matrices_fn )
55
+ actuation_mapping_fn = auxiliary_fns ["actuation_mapping_fn" ]
56
+
57
+ def sweep_actuation_mapping ():
58
+ q = jnp .zeros ((2 * num_segments ,))
59
+ A = actuation_mapping_fn (params , B_xi , q )
60
+ print ("A =\n " , A )
61
+
50
62
51
63
def simulate_robot ():
52
64
# define initial configuration
@@ -59,12 +71,6 @@ def simulate_robot():
59
71
sim_dt = 5e-5 # simulation time step
60
72
ts = jnp .arange (0.0 , 2 , dt ) # time steps
61
73
62
- strain_basis , forward_kinematics_fn , dynamical_matrices_fn , auxiliary_fns = (
63
- pneumatic_planar_pcs .factory (sym_exp_filepath , strain_selector )
64
- )
65
- # jit the functions
66
- dynamical_matrices_fn = jax .jit (partial (dynamical_matrices_fn ))
67
-
68
74
x0 = jnp .concatenate ([q0 , jnp .zeros_like (q0 )]) # initial condition
69
75
tau = jnp .zeros_like (q0 ) # torques
70
76
@@ -160,4 +166,5 @@ def simulate_robot():
160
166
plt .show ()
161
167
162
168
if __name__ == "__main__" :
169
+ sweep_actuation_mapping ()
163
170
simulate_robot ()
0 commit comments