|
| 1 | +import numpy as np |
1 | 2 | import matplotlib.pyplot as plt |
2 | 3 | import biorbd |
3 | 4 | from BiorbdViz import BiorbdViz |
|
10 | 11 | output_files = "AvNPhases" |
11 | 12 | fun_dyn = utils.dynamics_from_muscles_and_torques |
12 | 13 | runge_kutta_algo = 'rk45' |
13 | | -nb_nodes = 30 |
| 14 | +nb_intervals = 30 |
14 | 15 | nb_phases = 2 |
15 | 16 | nb_frame_inter = 500 |
| 17 | +muscle_plot_mapping = \ |
| 18 | + [[14, 7, 0, 0, 0, 0], # Trapeze1 |
| 19 | + [15, 7, 1, 0, 0, 0], # Trapeze2 |
| 20 | + [16, 8, 0, 0, 0, 0], # Trapeze3 |
| 21 | + [17, 8, 1, 0, 0, 0], # Trapeze4 |
| 22 | + [10, 5, 2, 1, 0, 1], # SupraSpin |
| 23 | + [8, 5, 0, 1, 0, 1], # InfraSpin |
| 24 | + [11, 5, 3, 1, 0, 1], # SubScap |
| 25 | + [6, 4, 0, 0, 1, 2], # Pectoral1 |
| 26 | + [0, 0, 0, 0, 1, 2], # Pectoral2 |
| 27 | + [1, 0, 1, 0, 1, 2], # Pectoral3 |
| 28 | + [7, 4, 1, 1, 1, 3], # Deltoid1 |
| 29 | + [9, 5, 1, 1, 1, 3], # Deltoid2 |
| 30 | + [2, 1, 0, 1, 1, 3], # Deltoid3 |
| 31 | + [12, 6, 0, 2, 0, 4], # BicepsLong |
| 32 | + [13, 6, 1, 2, 0, 4], # BicepsShort |
| 33 | + [3, 2, 0, 2, 1, 5], # TricepsLong |
| 34 | + [5, 3, 1, 2, 1, 5], # TricepsMed |
| 35 | + [4, 3, 0, 2, 1, 5], # TricepsLat |
| 36 | + ] |
| 37 | +muscle_plot_names = ["Trapèzes", "Coiffe des rotateurs", "Pectoraux", "Deltoïdes", "Biceps", "Triceps"] |
16 | 38 |
|
17 | 39 | # Load the model |
18 | 40 | m = biorbd.Model(f"../models/{model_name}.bioMod") |
|
29 | 51 | raise NotImplementedError("Dynamic not implemented yet") |
30 | 52 |
|
31 | 53 | # Read values |
32 | | -t, all_q, all_qdot = utils.read_acado_output_states(f"../optimal_control/Results/States{output_files}.txt", m, nb_nodes, |
| 54 | +t, all_q, all_qdot = utils.read_acado_output_states(f"../optimal_control/Results/States{output_files}.txt", m, nb_intervals, |
33 | 55 | nb_phases) |
34 | | -all_u = utils.read_acado_output_controls(f"../optimal_control/Results/Controls{output_files}.txt", nb_nodes, nb_phases, |
| 56 | +all_u = utils.read_acado_output_controls(f"../optimal_control/Results/Controls{output_files}.txt", nb_intervals, nb_phases, |
35 | 57 | nb_controls) |
36 | | -t_final = utils.organize_time(f"../optimal_control/Results/Parameters{output_files}.txt", t, nb_phases, nb_nodes, parameter=False) |
| 58 | +t_final = utils.organize_time(f"../optimal_control/Results/Parameters{output_files}.txt", t, nb_phases, nb_intervals, parameter=False) |
37 | 59 |
|
38 | 60 |
|
39 | 61 | # Integrate |
|
62 | 84 | # plt.plot(t_interp, utils.derive(q_interp, t_interp), '--') |
63 | 85 | plt.title("Qdot %i" % i) |
64 | 86 |
|
65 | | -# for i in range(nb_controls): |
66 | | -# plt.subplot(nb_controls, 3, 3 + (3 * i)) |
67 | | -# utils.plot_piecewise_constant(t_final, all_u[i, :]) |
68 | | -# plt.title("Acceleration %i" % i) |
69 | | - |
70 | 87 | for i in range(m.nbGeneralizedTorque()): |
71 | 88 | plt.subplot(m.nbGeneralizedTorque(), 3, 3 + (3 * i)) |
72 | 89 | utils.plot_piecewise_constant(t_final, all_u[m.nbMuscleTotal()+i, :]) |
73 | 90 | plt.title("Torques %i" % i) |
| 91 | +plt.tight_layout(w_pad=-1.0, h_pad=-1.0) |
74 | 92 |
|
75 | | -# L = [] |
76 | | -# for i in range(m.nbMuscleGroups()): |
77 | | -# L.append(m.muscleGroup(i).nbMuscles()) |
78 | | -# nb_muscles_max = max(L) |
79 | 93 | plt.figure("Activations") |
80 | 94 | cmp = 0 |
81 | | -for i in range(m.nbMuscleGroups()): |
82 | | - for j in range(m.muscleGroup(i).nbMuscles()): |
83 | | - #plt.subplot(nb_muscles_max, m.nbMuscleGroups(), i+1+(m.nbMuscleGroups()*j)) |
84 | | - plt.subplot(3, 6, cmp+1) |
85 | | - utils.plot_piecewise_constant(t_final, all_u[cmp, :]) |
86 | | - plt.title(biorbd.HillType.getRef(m.muscleGroup(i).muscle(j)).name().getString()) |
| 95 | +if muscle_plot_mapping is None: |
| 96 | + for i in range(m.nbMuscleGroups()): |
| 97 | + for j in range(m.muscleGroup(i).nbMuscles()): |
| 98 | + plt.subplot(3, 6, cmp + 1) |
| 99 | + utils.plot_piecewise_constant(t_final, all_u[cmp, :]) |
| 100 | + plt.title(m.muscleGroup(i).muscle(j).name().getString()) |
| 101 | + plt.ylim((0, 1)) |
| 102 | + cmp += 1 |
| 103 | +else: |
| 104 | + nb_row = np.max(muscle_plot_mapping, axis=0)[3] + 1 |
| 105 | + nb_col = np.max(muscle_plot_mapping, axis=0)[4] + 1 |
| 106 | + for muscle_map in muscle_plot_mapping: |
| 107 | + plt.subplot(nb_row, nb_col, muscle_map[3] * nb_col + muscle_map[4] + 1) |
| 108 | + utils.plot_piecewise_constant(t_final, all_u[muscle_map[0], :]) |
| 109 | + # plt.title(m.muscleGroup(map[1]).muscle(map[2]).name().getString()) |
| 110 | + plt.title(muscle_plot_names[muscle_map[5]]) |
87 | 111 | plt.ylim((0, 1)) |
88 | | - cmp += 1 |
| 112 | + plt.tight_layout(w_pad=-1.0, h_pad=-1.0) |
89 | 113 |
|
90 | 114 | # plt.ion() # Non blocking plt.show |
91 | 115 | plt.show() |
|
0 commit comments