Calcul de la puissance et de la vitesse à vélo
Afin de déplacer le cycliste, nous souhaitons prendre en compte les effets du vent, de la pente ou encore de la santé de l'athlète. De plus, nous souhaitons pouvoir mesurer l'effort physiologique réalisé par l'athlète. Pour cela, il faut calculer les forces à affronter nécessaire pour parvenir à se déplacer. Il y a au moins trois forces à prendre en compte : la force de l'air, la force du vent et la force de frottement. On va donc parler de vitesse et de puissance. La vitesse désigne un déplacement dans le temps et la puissance une énergie dépensée dans le temps.
Nous avons débuté ce travail sur une base de calculs réalistes. Les sites de Jacques Fine et Bernard Mischler nous ont été d'une aide précieuse afin de mettre au point les calculs. Le principe général est de pouvoir passer d'une vitesse (km/h) à une puissance (W) et inversement. Ainsi selon une puissance donnée et en fonction de conditions, on peut savoir à quelle vitesse se déplace un cycliste. On a appelé ces conditions des "facteurs de performance".
var performance_factors_values = { health: 0, // float athlete_position: 0.4, // float athlete_weight: 75, // kg bike_condition: 0.01, // float bike_weight: 10, // kg road_condition: 0.004, // float slope_gradient: 0, // % g_force: 9.81, // m/s2 real_wind_speed: 0, // km/h air_temperature: 20, // °C air_pressure: 101325, // Pa air_molar_mass: 0.028965, // kg/mol gas_constant: 8.3144621, // J·K-1·mol-1 }
L'objet ci-dessus liste un ensemble de facteurs de performance et de valeurs qui sont pratiques pour débuter les calculs. Par exemple, on a choisi un vélo de 10kg, un vent de 0km/h et une température de 20°C. Ces facteurs de performance sont variables : les frottements de la route, l'état du vélo, la position de l'athlète peuvent changer et en conséquence influencer différemment la performance. Même la force de gravité peut elle aussi varier si l'on choisit de faire aller notre cycliste sur la Lune...
Nous avons donc créé un ensemble de fonctions JavaScript qui prennent cet objet en argument. Voici la fonction qui calcule l'influence de la pente :
function calc_slope_power(values) { var v = values; var slope_power = v.speed * (v.athlete_weight + v.bike_weight) * v.g_force * v.slope_gradient / 100; return slope_power; }
En ajoutant une série de fonctions calculant des puissances, on obtient alors la puissance requise pour déplacer le cycliste. Calculer une puissance en fonction d'une vitesse est plus facile que calculer une vitesse en fonction d'une puissance. Le second calcul nécessite en effet de résoudre un polynôme du troisième degré, ce qu'on a fait en adoptant une méthode de résolution numérique.
Une fois tout ces calculs en place, nous avons mis au point un outil pour visualiser les résultats. Il prend la forme de deux visualisations qui donnent à lire des vitesses en fonction de puissances développées. Le premier graphique présente la vitesse en fonction de la pente et le second la vitesse en fonction du vent.
Nous avons également ajouté des inputs pour pouvoir faire varier les facteurs de performance. On peut voir par exemple l'effet du poids de l'athlète sur la vitesse atteinte pour une puissance donnée.
Nous avons ensuite ajouté un input pour gérer l'inertie. On prend alors en compte la vitesse précédente pour améliorer ou bien diminuer la nouvelle vitesse. Si le cycliste était à l'arrêt, il aura un malus au moment où il cherche à se déplacer. Par contre, si sa vitesse précédente était élevée, il aura un bonus. Nous avons également pris en compte l'inertie qu'implique la pente : il vaut mieux arriver lancé sur une côte.
Nous pensons que cette approche est intéressante pour pouvoir estimer l'effort du cycliste. Il sera possible de calculer des charges d'entraînement et d'en déduire des risques de blessures, de la fatigue ou de la forme physique.