++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Avancement
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

.. include:: volabid.rst

:Création: 04/2023


.. _refMicrotacheAvancement:

====================================================================================================
micro taches
====================================================================================================



Hardware : câbler l'alim puissance vers ARDUINO **OK**

Documentation

    - mul appinventor
    - ajouter les liens vers les dépôts **OK**
    - doc : créer un chapitre "serveur javascript" et un chapitre "serveur Python" **OK**
    - mettre le chapitre serveur javascript en pour mémoire **OK**
    - doc : compléter le manuel utilisateur
        - Relever les valeurs caractéristiques des servo à compléter **OK**
        - ajouter LED ALARM appInventor **OK**

    - hyperdocumenter le bt2560 et tout ce qui va autour **OK**
    - revoir la doc de l'install **OK**

    - voir pour intégrer vidéo


Améliorer la présentation de l'IHM avec un peu de css (option) **abandonné**

Retouche mécaniques **OK**

    - récup du design original (Sur thigiverse à partir du Wiki vorobotics) **OK**
    - fichier scad à importer dans Fusion360 (dans le mien) **OK**
    - reprise de la base avec moteur pap **abandon**
    - adaptation éventuellement à de servo plus costaud **abandon**

Reprise de mon design **abandon**

    - impression des pièces **abandon**
    - retouches de la base pour moteur pas à pas **abandon**


Dans la fonction checkportcom optimiser l'algo cf. :ref:`sélection auto port com<refSelPortAuto>`

Envisager une déco / reco au niveau serveur + Arduino **abandon**

::

    void softReset(){
        asm volatile ("  jmp 0");
    }
    
- dégager la carte ADAFRUIT (suite pb du 8/7/23) **standby**
    - branche Arduino

- reprendre l'architecture autour du BT **OK**
    - redessiner branche Gilles **OK**
    - intégrer à la doc **OK**

- tester le dialogue entre l'appli dans le navigateur et l'ARDUINO (le vrai pas simulé) de commande du brasRobot **OK**
    - en serial incompatibilité **ÉCHEC**
    - en bt **OK**

- terminer la rédaction du manuel utilisateur **OK**

Côté serveur : Limiter l'envoi des trames si aucun delta n'est supérieur à exemple 2° (à peaufiner) pas forcément nécessaire d'après essais du 23/03 **OK**

Plaque à LED status robot **abandon**

====================================================================================================
Pour mémoire
====================================================================================================
Position init web : envisager une fonction dédiée plus calme... **OK**


Essayer de passer le BT en 115200 **OK**

    - adapter Attention vitesse serveur versus vitesse BT **OK**

Param bras gilles : **OK**

Refactoring du code : harmoniser l'utilisation de SERIAL_DEBUG (défini dans le .ino) **OK**

Traiter le bug rangement au niveau plateforme (delta entre position de rangement et position inital = 0) **OK**

To do : expertise gpio temps de cycle (20ms*6 delays dans moveMotorWeb) **abandon**

Revérifier le fonctionnement en mode appInventor suite passage mySerial to Serial1 **OK**

Corriger rotationPoignet en mode appInventor **OK**

    - limiter les valeurs négatives **OK**
        - analyser **OK**

Intégrer et tester en mode BT **OK**

    - cablage **OK**
    - test **OK**

Bouton rangement et initialisation dans l'interface WEB **OK**

Passer les code (ARDUINO et SEVEUR) avec #define debug **OK**

- écrire le serveur express.js **ABANDONNER !**
    - écrire les routes
    - tester la présence du simulateur ARDUINO
        - écrire la fonction checkcom **OK**
        - ajouter un test liste vide
        - ajouter la liste de tous les Arduino possibles
    - écrire la fonction de conversion des commandes ws web vers serial non simulé
- tester la route /checkConnexion **OK**


- expérimenter les websocket en node.js et express.js **OK**
    - npm i ws et http **OK**

- ajouter dans l'IHM la commande de rotation de la main **OK**
- ajouter dans l'IHM la commande de serrage **OK**


- écrire le simulateur Arduino, basé sur le système DCC++ **OK**
- expérimenter serial depuis node.js **OK**


- séparer les dépôt doc et code **OK**
    - créer dépot doc : brasrobot2023docsources **OK**
    - créer dépôt Arduino : bras2023arduinocodes **OK**
    - créer dépôt serveur : brasrobot2023docsources **OK**
    - créer les dossiers locaux correspondant dans ``0021_brasRobot_webGUI\projet`` **OK**
        - doc ``\_01-docs\brasrobot2023docsources`` **OK**
        - arduino ``\_02-realisation\bras2023arduinocodes``
        - serveur ``\_02-realisation\brasrobot2023serveur`` **OK**
    - faire les push **OK**

- écrire le serveur en Python **OK**
    - créer un dépôt git dédié **OK**
    - Tester python -m http.server 9000 **OK**
    - écrire un serveur minimum en python avec Flask (retrouvé -plateformRpi_IOT/PART_IV) **OK**
    - enrichir le serveur avec les pages "Gilles" (interface du bras) **OK**
    - ajouter websocket en python **OK**
        - affichage de la trame wobsocket sur le serveur **OK**
    - lister les ports série **OK**
    - tenter d'ouvrir les ports **OK**
    - filtrer la liste pour ne garder que les ports successibles d'être ouverts **OK**
    - filtrer la liste pour ne garder que les ports successibles de matcher (Arduino + CH340) **OK**
    - Essayer d'établir la communication avec l'arduino du bras **OK**
        - dans route ``/checkConnexion``, améliorer la réponse pas trouvée **OK**
    - ouvrir le port com concerné avant d'appeler la page interfaceBrasRobot.html pour ne pas 
      changer le code de son bouton connect **OK**
    - passer Arduino en mode WEB (déjà fait) dans checkRobotConnexion **OK**
    - transmettre la trame ws des moteurs du serveur vers le port com **OK**

    - lors des essais d'un autre machine ws impossible, voir config flask-socket ou carrément flask-socketio **OK**
        - carrément pas ! Voir le code du bouton connect : localhost codé en dur **OK**


Adapter le code ARDUINO à un fonctionnement APP_INVENTOR ET WEB

    - Écrire la version modifiée APP_INVENTOR **OK**
    - Tester la version APP_INVENTOR **OK**
    - Développer la commutation APP_INVENTOR vers WEB **OK**
        - écrire (envoi d'un caractère @ depuis le serveur) **OK**
        - tester en serial **OK**
    - intégrer le code WEB au code Gilles **OK**
        - adapter le code de départ pour un fonctionnement avec la carte ADAFRUIT **OK**
        - faire les relevés min, max, offset... pour notre bras **OK**
    - mettre au point le code ARDUINO de déplacement du bras
        - passer serial debug à 115200 **OK**
        - essayer à 230400 **OK**
        - terminer le §Travaux en mode liaison série cf chapitre concerné
            - vérifier la bonne réception des trame entre server et firmware **OK**
            - initialiser correctement les tableaux angle_offset, angle_max, angle_min[] **aborted class**
            - vérifier le scope de toutes ces variables fichier fonctionsRobotWeb.cpp **OK**	
            - mettre au point fonctionsRobotWeb.cpp **OK**
    - led passage en mode WEB/appInventor **OK**
        Dans un premier temps LED BUILTIN allumée = mode web **OK**
    - ajouter @ au debut de chaque trame WEB **OK**
        - modifier interfaceWeb.html **OK**
        - adapter code Arduino, decodeTrameWeb **OK**


    - envisager une classe joint correspondant à chaque moteur avec comme attribut (min, max, offset, cur, dest, step) **OK**
    - mettre les constantes du robot dans fichier de configuration séparé configRobot.h **OK**


====================================================================================================
Journal
====================================================================================================
Trame init :  nouvelle <T 90 90 180 180 0 10>

25/05/24::

    Mise en ligne du fichier apk


18/05/24::

    doc mul utilisation du serveur

04/05/24::

    Câblage alim Arduino avec Diode
    Doc MUL

27/04/24::

    Essais servos un à un avec une 2560 dédiés
    Remontage OK
    Balancement mode WEB et APP inventor OK

20/04/24::

    Réparation de la plateforme : impression bagueSupérieurFiletée qui a cassée sur Flashforge du Bricolab
    remplissage à 50% avec recouvrement remplissage et périmètres 30%

    BagueInférieurPartieHaute : reprise pour augmenter son épaisseur de 4mm et de mettre des insères
    filetés MUTEX : export depuis Fusion step en erreur

    Donc reprise dans Fusion360 directement et export en stl

    ARTILLERY du BRICOLAB zéro en Z impossible à faire

    Vis M3x20

    Création d'une application de teste des sevo commande <A i> i angle utilise la lib servo.h

06/04/24::

    Init : réinitialisation de l'interface web versus Arduino. Impact html fonction initBrasFunction
    Mis au point fonction rangementWeb !

    Casse de la plateforme ! => remettre en état la platefrome

23/03/24::

    #debug dans le code ARDUINO mais pas dans le serveur console.log trame commenté simplement

16/03/24::

    Sujet BT:
    Modif du serveur Tempo 2 secondes ré-ouvrir le port série trouvé.
    Essai mode appInventor en BT : seul la **rotation poignet** pause PB !

09/03/24::

    On s'attaque au BT (voir chapitre Arduino code )
    On a réussi à communiquer dans les 2 sens... avec le code bt2560.ino


02/03/24::
    
    Map motor 3 et 4
    Obligé d'interveir mécaniquement sur les servo des joint 3 et 4 pour les mettre en conformité avec
    l'ihm mouvement de 0 à 180° versus 0 90 180...

    Conséquence : modif valeur init dans l'ihm (retour au valeur "d'avant") sauf pour la pince et 
    la rotation pince. Et modif valeur init M3 etM4 dans l'ARDUINO

    Autre conséquence sur  la position de rangement de la plateforme nous ayant obligé à faire un
    180° à la plateforme. Opération laborieuse sans les bons outils...

    Nettoyage ARDUINO

24/02/24::

    Toujours map web vs physique
    Rotation poignet à l'envers

    Il nous reste à mettre au point coude et poignet (motor3 et 4 )

On a un problème Huston !

.. image:: images/onaUnProblem.svg 
   :width: 300 px


17/02/24::

    Mise au point des mouvements des joints par rapport au dessin de l'interface WEB
    plateforme ok
    rotation poignet inversée KO

    serrage pince : obliger de petites retouches dans .html
        inversion sens moteur par rapport au mouvement de l'interface web
        Dans .html ligne 74 max 85° + trait noir au milieu de la pince
    Epaule : constat sens inverse par rapport à notre prévision par rapport à l'interface WEB
        Ceci pour rester cohérent du sens de rotation de la plateforme 
        Par rapport à l'opérateur le bras regarde vers la droite
        Le secteur noir de la roue plateforme regarde dans le même sens que le robot


On est resté bloqué sur le sens de rotation des moteurs. Notamment rotation pince la formule est fausse
Elle fonctionne dans le cas où 

10/02/2024::

    à la mise sous tension, le serveur envoi la trame ``@90,90,180,180,90,17``, nous on s'attend à 
    avoir la trame init

    Ajout traitement intelligent de @ dans decodeTrameWeb

    Ajout contrôle du nombre de virgules et checksum dans la trame dans decodeTrameWeb

    Ajout d'un commande <t 90 80 90 85 0 10 00> (00 checksum) <t 90 80 90 85 0 10 355>


20/01/2024::

    Gros bullshit : Il faut un serial1 pour le SERVEUR et un arduino serial pour le debug
    La phrase tag est sur SERIAL1 et pas sur SERIAL1
    Modif du code Arduino pour différencier de manière strict les 2

    Ajout LED ALARM en 38, 40 Réception commande appInventor incorrecte avec sabordage (finalement 
    pas implémenté)

    Ajout dans html du @ devant toutes les trames. Mise au point en cours

    <T 90 80 90 85 0 10>


13/01/2024::

    <T 90 80 90 85 0 10>
    <T 110 80 90 85 0 10> 
        Pour le moteur Plateforme angle demandé : 110 angle retenu 70
    Correction BUG2 et commit

    Commande R

    Trame de rangement : <T 90 60 0 0 0 10>

    Tentative infructueuse de connexion mode Web. Visiblement le @ n'est pas envoyé à la carte.
        - vérifier qu'on allume bien une LED au passage en mode WEB : LED BUILTIN **OK**
        - vérifier qu'on envoie bine le @ oui quand on vérifie les ports dans le serveur sauf qu'on fait un close => reset arduino
        - ré-ouvrir le port et envoyer @

    Correction localhost au niveau serveur
    Toujours au niveau serveur : ajout dans la liste des cartes reconnues : Arduino MEGA 2560

06/01/24::

    Création de la fonction void initInstancesBras();
    Création nouvelle commande de debug Init position physique + instances
    Correction du BUG3 : la valeur dans parametres_robot.h #define POS_INIT_PINCE PINCE_INIT

16/12::

   Validation moveMotorsWeb()

   retouches d'affichage pour mise au point

   Mise au point : 
   Première rotation physique en mode WEB mais manuel (interface de debug)

**BUG1** : à première init on part dans un mode chelou

**BUG2** : sens plateforme ne fonctionne que de 0 à 90° cad 110° est identique à 70° on arrive pas 
à aller au delà de 90°

**BUG3** : la pince bouge au premier mouvement de plateforme (cause probable: position init différente 
entre la version web et la version de base)


09/12::

    Petite retouche affichage de debug de decodeTrameWeb()
    mise au point de decodeTrame, grosses difficultés avec la position de départ et le sens...


**RAF1** : dans moveMotorsWeb() afficher quels moteurs bougent.

**RAF2** : faire une grosse validation de decodeTrame avec plein de cas



02/12::

    Mise au point stepNum.
    Mise au point void moveMotorsWeb() : bug appel avec copie stepNum

25/11::

    mise en conformité parametres_robot.h option Gilles.
    Passage de la fonction int decodeTrameWeb( String angleStr ) en classes.
    Ajout commande <T 90 0 30 15 5 6>

    Mise au point : joint[0].getNom renvoi une chaine vide: pb joint[0] = plateforme
    Il faudrait que joints soit un tableau de pointeur vers les variables joint


11/11::

    Nouveau § pour consigner les valeurs du bras 2 (malette) dans brasManipulateurOriginal.rst
    Passage à la classe Join : évaluation de l'impact
        Mise en place + valeurs initiales dans setup()

04/11::

    Pas de USB UART dispo, on tente avec le BT
    Pb : identifier le port com au niveau du PC
    Ajout commande <F> I2C scan : found @x40 (vrai avec ou sans l'alimentation de puissance)

    BT: Bras2023_HC05 pass 1234

    2560 clone émet sur RX1 (broche RX1 et TX1 croisée)
        Pour cette carte là en particulier câbler BT RX sur RX3
        Mais normalement on est bien **CROISE**

    Prise de valeur avec la commande <M> sur le petit et sur le gros bras




21/10::

    Peu de production explications Faress...

    essais ARDUINO2560 en directe sans serveur web

    Introduction mode debug via * sur liaison server/app inventor

    SerialCommand fonctionnel et premières commande implantées

14/10::

    branchement du bras version Arduino uno pour essais communication avant modif.
    lancement serveur
    lancement navigateur
    lancement mooniteur série arduino => reset carte ARDUINO => modde AppInventor
    cf brasManipulateurOriginal.rst §Travaux en mode liaison série/Mise au point

    pb:

    si on lance le moniteur série après le serveur on est en mode appInventor côté ARDUINO et en 
    mode WEB côté serveur ! On ne fait aucun correction car c'est un mode debug...

    Contournement : relancer le serveur

    ESSAIS 155200 com serveur, 230400 pas sur à refaire

    Essais amélioration algo connexion raté à refaire sur branche dédiée.

Résultat obtenu::

    ======================================================================
    Lancement serveur
    ======================================================================
    Première liste
    Essaie port : COM8
    Essaie port : COM9
    Essaie port : COM10
    Essaie port : COM11
    Essaie port : COM14
    Essaie port : COM21
    Essaie port : COM26
    Essaie port : COM29
    Essaie port : COM30
    Filtrage
    ******************************************************************
    Ports valides filtrés :
    COM9 =====> Lien série sur Bluetooth standard (COM9)
    COM10 =====> USB Serial Port (COM10)
    COM26 =====> Lien série sur Bluetooth standard (COM26)
    COM29 =====> Lien série sur Bluetooth standard (COM29)
    ******************************************************************
    Recherche phrase TAG
    teste port : COM9
    Erreur lors de la liaison avec le port série : Write timeout
    teste port : COM10
    Liaison bras robot trouvé COM10
    * Serving Flask app 'server'
    * Debug mode: off
    WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on all addresses (0.0.0.0)
    * Running on http://127.0.0.1:8300
    * Running on http://192.168.1.54:8300
    Press CTRL+C to quit



30/09::

    Reprise...
    Recherche source 3D du bras **OK**
    Tentative de dialogue avec ARDUINO: sélection automatique du port COm depuis le serveur... fait
    Transfert des trames serveur to ARDUINO **OK**

    TODO : Mises au point côté ARDUINO cf microtache, passer sur une 2560 (pour dégager le soft sérial)
    ATTENTION: // stepNum = decodeTrameWeb(msg); : commenté dans le firmware

02/09::

    Toujours sur la liste des ports séries avancée remarquable

    Push : arduino, serveur + docSrc et html



12/08 ::

    Gilles explication Bitbucket
    Affichage des info en provenance du navigateur **OK**
    Liste des ports serie en python **OK**
    ouverture des ports un à un avec capture de l'erreur

    cf. microtâches Dev server


05/08 ::

    to Gilles : .venv + doc
    ws connect : on bloque sur erreur 400: wss pas mieux http et https  côté navigateur not allowed
    ws connect, disconnect fonctionnel

    RAF : route /echo ws + gestion, connection port série + aff data ws + forward data from ws to serial


08/07 ::

    Rappel : 3 dépôts git pour le projet
    Relevés des min, max... et inclu dans la doc
    Réparation du servo défectueux, mise en évidence d'une faiblesse sur articulation 2
    intégration Flask dans server.py

    RAF : procédure de connexion websocket + gestion serial 


01/07::

    serveur web python
    Rappel : sur la branche master/dossier pourLaDocEnAttendant on ne touche que la doc
    Creation d'un dépôt pythonServeur et docProjet (séparation des dépôts)
    Premier test serveur python : python -m http.server 9000
    Intégration de l'interface IHM

    ATTENTION Travailler dans .venv .venv\Scripts\activate
    Lancer le serveur : python server.py

    make.bat ajouté au gitignore à cause du lien relatif vers webdoc


24/06 : on découpe void moveMotorAngleWeb( String angleStr ) en decode et en move.
        on crée un fonction d'adaption servo to PWM
        ça compile ! Pas encore testé. Todo : initialiser les tableaux des constantes.
        Gilles retrouve un soft de test Arduino main.
        Pendant que je crée une version avec serialCommand.h (en standby)


Todo : terminer la fonction void moveMotorAngleWeb( String angleStr )

17/06 : Question est-ce que le code Arduino est fonctionnel (la commutation oui, le reste non)
       On se focalise sur la mise au point du code ARDUINO en fermant les yeux sur les 
       dysfonctionnements éventuels du serveur.
       Transmission des trame vers Arduino ok


10/06 : on laisse tomber le bt pour le moment. on travail en rs.
       On a toujours un rep pour la doc et un rep pour le dev qui pointent tous les 2 vers le même 
       dépôt. Un sur la branche master pour la docEnAttendant et un pour le dev du code Arduino.



03/06/2023
----------------------------------------------------------------------------------------------------
Balancement du bras avec nouveau code ARDUINO mode APP_INVENTOR avec BT + téléphone : ok

Ajout de Arduino dans la détection serveur + tentative d'ajout du BT HC-05 et c'est là que tout 
s'est gâté !






====================================================================================================
Weblinks
====================================================================================================

.. target-notes::