<commit_before># TODO

Exemple de qualité physique et visuelle à atteindre: https://www.youtube.com/watch?v=BGAwRKPlpCw

## Version 2.0.2

- [ ] Être capable de détecter et pénaliser les explosions de simulation ; la
      pénalité doit être graduelle et non pas binaire pour ne pas perturber les
      algorithmes d'optimisation. Soustraire au score ces pénalités (pondérées par un
      certain facteur fixé).
    - [ ] Créer la classe "Valuer" qui fait ces calculs: un Listener (comme les log) du
          tronc du robot (instance de Part donné en argument). RobudogValuer hérite
          de l'interface "Valuer". RobudogValuer est instancié dans la fonction "main",
          les autres modules n'ont pas besoin de connaitre cette classe.
          C'est RobudogValuer qui va calculer la distance parcourue par le tronc,
          les pénalités à appliquer et le score final pour la simulation.
    - [ ] 1er terme de pénalité: le robot a souvent tendance à voler après une
          explosion => compter le nombre de secondes (ou de ticks ou
          de timesteps) durant lesquelles le robot est au dessus d'un certain plan (ie
          combien de temps il "vole" suite à une/des explosion(s) dans la simulation)
          -> simple, graduel
    - [ ] 2e terme de pénalité: faire la somme de tous les mouvements de
          rotations (en radiant) du tronc sur chacun des 3 axes.
          -> simple, graduel et favorise en plus les robots qui marchent droit

## Version 2.0.3

- [ ] Régler correctement les constantes physiques (mass, friction, couple des moteurs, ...)
- [ ] How to setup hinge torques ? The torque is infinite so far ? (google : "bullet physics hinge torque")
- [ ] Motor: set limits (contraindre les angles)
- [ ] Reécrire ground -> plus grand, en plusieurs parties

## Version 2.0.4

- [ ] Régler le problème de vectorisation d'Eigen3 sur certaines plates-formes:
      http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html

## Version 2.0.5

- [ ] Améliorer le rendu graphique: régler correctement les matériaux.
      Faire une appli dédiée OSG_Qt_Lab (ex: http://www.it.hiof.no/~borres/j3d/explain/light/p-mated.html )

## Version 2.1

- [ ] Compléter le fichier README: décrire les principales features, ajouter des vidéos, ...

## Version 2.2
<commit_msg>Update the TODO list.<commit_after># TODO

Exemple de qualité physique et visuelle à atteindre: https://www.youtube.com/watch?v=BGAwRKPlpCw

## Version 2.0.2

- [ ] Vérifier si le projet compile sur MacOSX et essayer de reprendre le
      développement sur xcode.
- [ ] Être capable de détecter et pénaliser les explosions de simulation ; la
      pénalité doit être graduelle et non pas binaire pour ne pas perturber les
      algorithmes d'optimisation. Soustraire au score ces pénalités (pondérées par un
      certain facteur fixé).
    - [ ] Créer la classe "Valuer" qui fait ces calculs: un Listener (comme les log) du
          tronc du robot (instance de Part donné en argument). RobudogValuer hérite
          de l'interface "Valuer". RobudogValuer est instancié dans la fonction "main",
          les autres modules n'ont pas besoin de connaitre cette classe.
          C'est RobudogValuer qui va calculer la distance parcourue par le tronc,
          les pénalités à appliquer et le score final pour la simulation.
    - [ ] 1er terme de pénalité: le robot a souvent tendance à voler après une
          explosion => compter le nombre de secondes (ou de ticks ou
          de timesteps) durant lesquelles le robot est au dessus d'un certain plan (ie
          combien de temps il "vole" suite à une/des explosion(s) dans la simulation)
          -> simple, graduel
    - [ ] 2e terme de pénalité: faire la somme de tous les mouvements de
          rotations (en radiant) du tronc sur chacun des 3 axes.
          -> simple, graduel et favorise en plus les robots qui marchent droit
- [ ] Permettre de passer les paramètres du contrôleur (constantes des
      sinusoides, poids des neurones d'un réseau de neurones, etc.) des
      actuateurs au simulateur via un fichier de configuration (Texte, CSV,
      JSON ou autre) et récupérer la fitnesse dans un autre fichier. L'idée
      étant de déporter la partie optimisation/ML/expériences/analyse/... en
      dehors de l'executable, dans des scripts Python (afin de bénéficier des
      nombreux avantages de Python dans ces domaines et pour
      assouplir/accélérer le développement du projet).  L'executable ne serait
      plus que la fonction de fitness. Dans un second temps, envisager de faire
      un vrai binding Python.

## Version 2.0.3

- [ ] Régler correctement les constantes physiques (mass, friction, couple des moteurs, ...)
- [ ] How to setup hinge torques ? The torque is infinite so far ? (google : "bullet physics hinge torque")
- [ ] Motor: set limits (contraindre les angles)
- [ ] Reécrire ground -> plus grand, en plusieurs parties

## Version 2.0.4

- [ ] Régler le problème de vectorisation d'Eigen3 sur certaines plates-formes:
      http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html

## Version 2.0.5

- [ ] Améliorer le rendu graphique: régler correctement les matériaux.
      Faire une appli dédiée OSG_Qt_Lab (ex: http://www.it.hiof.no/~borres/j3d/explain/light/p-mated.html )

## Version 2.1

- [ ] Compléter le fichier README: décrire les principales features, ajouter des vidéos, ...

## Version 2.2

{'fraction_non_alphanumeric': 0.07120515179392824, 'fraction_numerical': 0.0077276908923643054, 'mean_word_length': 3.105740181268882, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 11, 'https://': 2, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5223801', 'n_tokens_mistral': 1767, 'n_tokens_neox': 1741, 'n_words': 681}