Tête panoramique motorisée (V.2015)

Avatar de l’utilisateur
jmparatte
Messages : 61
Inscription : 8 mars 2013, 11:56 43

Re: Tête panoramique motorisée (V.2015)

Message par jmparatte »

Mattpano a écrit :...J'aurai une question de programmation sur Arduino :

La série de paramètres est stockée dans deux "array". L'une contient des "mots", et l'autre les "valeurs".

Code : Tout sélectionner

char voc[14][16] = {  "FR",  "Tps pause (h)", "Tps pause (min)", "Tps pause (s)",  "Nb rangs", "Nb Photos / rg",  ... };
int param2[14] = {  4, 3, 4, 6, 0, 6,  ...};
...
Dans mes programmes ATtiny85, j'ai solutionné ce problème en créant un gestionnaire de strings.
On écrit les strings bout à bout avec un caractères <0> entre chaque strings.
Une routine permet de sortir l'index du début du string (n) en comptant les caractères <0>.

jmP
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

Merci pour ton astuce. J'ai regardé ce matin les Strings, mais je n'ai pas cherché plus que ça, car je ne voyais pas de moyens d'avoir dans une même Strings plusieurs paramètres.
Tu viens de me donner une astuce avec le <0>.

Lettre "o" ou nombre "0" Je suppose le nombre 0.

Il ne faut donc pas que ce nombre apparaisse dans mes chaines de caractères, ou alors je trouve un autre symbole !

Je vais réfléchir à cette idée, et essayer de la mettre en pratique :)
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
jmparatte
Messages : 61
Inscription : 8 mars 2013, 11:56 43

Re: Tête panoramique motorisée (V.2015)

Message par jmparatte »

Mattpano a écrit :Merci pour ton astuce. J'ai regardé ce matin les Strings, mais je n'ai pas cherché plus que ça, car je ne voyais pas de moyens d'avoir dans une même Strings plusieurs paramètres.
Tu viens de me donner une astuce avec le <0>.

Lettre "o" ou nombre "0" Je suppose le nombre 0.

Il ne faut donc pas que ce nombre apparaisse dans mes chaines de caractères, ou alors je trouve un autre symbole !

Je vais réfléchir à cette idée, et essayer de la mettre en pratique :)
En fait c'est simple.
En C, les chaînes de caractères sont toutes terminées par un caractère '\0' de valeur zéro.
Si une chaîne de caractères fait 6 caractères comme 'espoir' et bien il y a un 7e caractère '\0', toujours.
Avatar de l’utilisateur
llang57
Créateur du logiciel de visite virtuelle panoVisu
Messages : 831
Inscription : 21 juin 2008, 8:29 42

Re: Tête panoramique motorisée (V.2015)

Message par llang57 »

Mattpano a écrit :Merci pour ton astuce. J'ai regardé ce matin les Strings, mais je n'ai pas cherché plus que ça, car je ne voyais pas de moyens d'avoir dans une même Strings plusieurs paramètres.
Tu viens de me donner une astuce avec le <0>.

Lettre "o" ou nombre "0" Je suppose le nombre 0.

Il ne faut donc pas que ce nombre apparaisse dans mes chaines de caractères, ou alors je trouve un autre symbole !

Je vais réfléchir à cette idée, et essayer de la mettre en pratique :)
je pense qu'il s'agit du caractère de code ascii 0

Amicalement
Laurent LANG

créateur de panoVisu, un éditeur/visualiseur de visites virtuelles 100% Libre et Gratuit : téléchargeable ici http://panovisu.fr
Avatar de l’utilisateur
llang57
Créateur du logiciel de visite virtuelle panoVisu
Messages : 831
Inscription : 21 juin 2008, 8:29 42

Re: Tête panoramique motorisée (V.2015)

Message par llang57 »

Mattpano a écrit :Merci Philooo pour tes remarques intéressantes !

J'aurai une question de programmation sur Arduino :

La série de paramètres est stockée dans deux "array". L'une contient des "mots", et l'autre les "valeurs".

Code : Tout sélectionner

char voc[14][16] = {  "FR",  "Tps pause (h)", "Tps pause (min)", "Tps pause (s)",  "Nb rangs", "Nb Photos / rg",  ... };
int param2[14] = {  4, 3, 4, 6, 0, 6,  ...};
Sauf que je ne sais pas au début quelle sera la taille de ces listes : je les initialisent à 14 valeurs, car je suis sur une phase de test. C'est l'utilisateur qui va choisir (par exemple) le nombre de rangées à effectuer : je veux donc pouvoir adapter cette liste en fonction du nombre qu'entrera l'utilisateur.

Sur excel, c'est facile, il suffit de faire "ajouter une colonne" ou "ajouter une ligne", et hop, magie, on a la colonne ou la ligne en plus.

Et là, avec Arduino, j'avoue que je suis perdu :

- j'ai essayé de conserver mes 2 listes initiales, et d'en créer une autre avec les paramètres du nombre de rangées, mais lors de l'affichage, intercaler cette nouvelle liste au milieu de l'autre, c'est beaucoup trop galère à gérer.
du coup :
- j'ai essayé de sauvegarder les paramètres dans une liste intermédiaire, de supprimer la liste principale, d'en recrééer une nouvelle à la bonne taille, et d'y ranger la sauvegarde, sauf que cette nouvelle liste est crée dans une fonction, et donc, comme tous les paramètres, elle "reste" dans la fonction, et je ne peux pas la ré-exploiter après. (j'ai dû louper quelque chose, non ? )

J'ai donc 2 questions dont les réponses pourraient me sauver :
- peut-on redimensionner une array à la volée ?
un truc du genre :
new dim param2 = 15; je rêve :) :) :)

- ou alors, comment faire pour, au sein d'une même fonction, "sortir" 2 listes nouvelles, exploitables partout, comme si elles avaient été déclarées au tout début du programme, en dehors de toute fonction ?
Si ce n'est pas possible de "sortir" 2 nouvelles listes pour une seule fonction, je ferrais 2 fonctions, ce n'est pas grave.

Merci :merci:
sinon si tu veux modifier la taille de tableaux en C tu as les fonctions realloc(), malloc()

Exemeple ici : http://forum.arduino.cc/index.php?topic=95914.0

Amicalement
Laurent LANG

créateur de panoVisu, un éditeur/visualiseur de visites virtuelles 100% Libre et Gratuit : téléchargeable ici http://panovisu.fr
Avatar de l’utilisateur
pmllc
Co-administrateur
Messages : 8382
Inscription : 12 déc. 2007, 21:54 20

Re: Tête panoramique motorisée (V.2015)

Message par pmllc »

Sinon tu as aussi les listes chaines qui ont l'avantage de ne pas nécessiter de gros bloc mémoire contigu
Toutes mes photos sont sous licence Creative Common Image
Néanmoins, toutes les photos publiées sur panophoto.org peuvent être retouchées sans mon consentement explicite pour publication sur panophoto.org sauf avis explicite contraire.
Image
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

pmllc a écrit :Sinon tu as aussi les listes chaines qui ont l'avantage de ne pas nécessiter de gros bloc mémoire contigu
Les seuls mots de vocabulaire que je vais avoir à stocker sont du style :
char *voc3[]={"Tps pause (h)" , "Tps pause (min)" , "Tps pause (s)" , "Nb rangs" ,

"rang 1", "rang 2", "rang 3", "rang 4", "rang 5", "rang 6", "rang 7", "rang 8", "rang 9", "rang 10",
"rang 11", "rang 12", "rang 13", "rang 14", "rang 15", "rang 16", "rang 17", "rang 18", "rang 19", "rang 20",

"nom1ok" , "nom7" , "nom8" , "nom9" , "nom10" , "nom11" };
Je ne sais pas si vous voyez une autre solution pour stocker ces mots en mémoire, moins gourmande ...

Je vais essayer d'optimiser le fait qu'appaisse (pour le moment) au moins 20 fois le mot "rang"
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

J'ai fait de grosses optimisations, j'ai récupéré pas mal de place.

Maintenant, je me pose la question d'autres optimisations :

A un endroit, j'ai ce code :

Code : Tout sélectionner

param3[j + x + decalage - 1] = param3[j + x  + decalage - 1] + 1;
En plus simple, j'ai cela :

Code : Tout sélectionner

 i = i + 1; 
Est-ce que je gagne vraiment de la place si j'écris ceci :

Code : Tout sélectionner

++param3[j + x + decalage - 1];
Autrement dit ceci :

Code : Tout sélectionner

 ++i; 
J'ai fait le test sur toutes les additions / soustractions de ce style que j'ai, et je n'ai vu aucun gain de place. Est-ce normal ?

(Je vois 2 options : soit le gain est trop petit, et même cumulés, je ne vois pas la somme de tous les gains
Soit le compilateur voit que c'est une addition de ce genre, et la transforme avant de compiler le tout.)

Merci :)
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

Laurent, j'ai regardé realloc(), malloc().

De ce que j'ai pu lire, le problème avec les Arduino, c'est le manque de place, et le fait qu'on arrive vite à saturation lorsque la "mémoire est fragmentée". On a techniquement de la place, mais en réalité plus assez "au même endroit", du coup, affichage de valeurs aléatoires, et ça ne tourne plus rond !
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
nickdan
Administrateur
Messages : 6273
Inscription : 17 sept. 2008, 9:52 10

Re: Tête panoramique motorisée (V.2015)

Message par nickdan »

M'étonne pas trop ça... crotte, mon messga eprécédent est parti à la trappe, je recommence...
---------------------------------------------
Nicolas CHAMBINAUD
http://www.images-numeriques.fr/
http://www.astrosurf.com/magnitude78
Images sous licence Creative Common Image
---------------------------------------------
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »
— devise Shadock
Avatar de l’utilisateur
nickdan
Administrateur
Messages : 6273
Inscription : 17 sept. 2008, 9:52 10

Re: Tête panoramique motorisée (V.2015)

Message par nickdan »

Pour tes tableaux/liste de strings :
Attend là, y'a un problème... pourquoi vouloir gérer des tableaux de strings "rang 1", "rang 2", "rang 3", ...
Optimisons : il y a 1 mot à garder en mémoire et c'est "rang ". La suite n'est qu'on compteur à afficher à la suite ? ou j'ai raté un épisode ? (pas impossible pour ceux qui me connaissent).
Les tableaux sont de taille fixe, pas moyen d'y revenir sauf d'allouer un autre tableau, auquel cas la place mémoire de l'ancien devient libre jusqu'à ce qu'on y alloue autre chose, pour peu que cela tienne dedans.
Il existe peut-être pour l'arduino des bibliothèques pour gérer des listes (c'est dynamique là pour le coup), mais je suis pas sûr que cela en vaille la peine sur l'arduino.
Je vais relire ton histoire de tableaux, car je comprend pas tout ce que tu veux faire.

Pour ton i=i+1 :
Il n'y a malheureusement pas 15000 façon de faire +1, il n'y en a qu'une.
Par contre, il y a plein de façon de l'écrire : i=i+1, ++i, i++, ... mais comme tu l'as deviné, ça fera toujorus la même chose.
Si tu préfère, pour l'arduino, ce sont toujorsu les mêmes étapes : lire la valeur en mémoire, faire l'addition, remettre la valeur en mémoire.
Quelle que soit la façon dont tu l'écrit, ce n'est que de la syntaxe, et cela n'aura que peu d'influence sur le code "derrière".

Pour gagner de la mémoire programme : il faut utiliser intensément les boucles. Répéter le moins de code possible, sans pour autant multiplier les appels de fonctions.
Pour la mémoire data : factoriser les éléments commun au maximum aussi (ce que je disais plus haut avec les rangs par ex).
---------------------------------------------
Nicolas CHAMBINAUD
http://www.images-numeriques.fr/
http://www.astrosurf.com/magnitude78
Images sous licence Creative Common Image
---------------------------------------------
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »
— devise Shadock
Avatar de l’utilisateur
nickdan
Administrateur
Messages : 6273
Inscription : 17 sept. 2008, 9:52 10

Re: Tête panoramique motorisée (V.2015)

Message par nickdan »

Mattpano a écrit : Sauf que je ne sais pas au début quelle sera la taille de ces listes : je les initialisent à 14 valeurs, car je suis sur une phase de test. C'est l'utilisateur qui va choisir (par exemple) le nombre de rangées à effectuer : je veux donc pouvoir adapter cette liste en fonction du nombre qu'entrera l'utilisateur.
Je suis pas sûr de comprendre...
L'utilisateur choisi par exemple le nombre de rangs qu'il veut faire, mais il doit préciser pour chaque rang le nombre de photos, c'est ça ?
En dehors de ça, je comprend pas comment la liste des paramètres peut être "variable"...
---------------------------------------------
Nicolas CHAMBINAUD
http://www.images-numeriques.fr/
http://www.astrosurf.com/magnitude78
Images sous licence Creative Common Image
---------------------------------------------
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »
— devise Shadock
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

nickdan a écrit :Pour tes tableaux/liste de strings :
Attend là, y'a un problème... pourquoi vouloir gérer des tableaux de strings "rang 1", "rang 2", "rang 3", ...
J'ai encore plus optimisé. Mes informations initiales :

Code : Tout sélectionner

char *voc3[]={"Tps pause (h)" , "Tps pause (min)" , "Tps pause (s)" , "Nb rangs" , 
"rang 1", "rang 2", "rang 3", "rang 4", "rang 5", "rang 6", "rang 7", "rang 8", "rang 9", "rang 10", 
"rang 11", "rang 12", "rang 13", "rang 14", "rang 15", "rang 16", "rang 17", "rang 18", "rang 19", "rang 20", 
"nom1ok" , "nom7" , "nom8" , "nom9" , "nom10" , "nom11" };
Et j'ai ceci maintenant :

Code : Tout sélectionner

char *voc3[]={"Tps pause (h)" , "Tps pause (min)" , "Tps pause (s)" , "Nb rangs" , "nom1ok" , "nom7" , "nom8" , "nom9" , "nom10" , "nom11" };
Et pour afficher correctement les mots à partir de "nom1ok", je gère un décalage, suivant le nombre de rangs sélectionnés et affichés...


Merci pour ta réponse concernant le i++, ++i, i = i+1 ... C'est bien ce que j'en avais déduis.


Concernant la mémoire et l'affichage de texte "écrits en durs", j'ai découvert que si je mets par exemple :

Code : Tout sélectionner

u8g.drawStr( 65, 25, "texte");

(équivalent de Println("texte"); 65 et 25 sont les positions x et y sur l'écran )

Ce texte est écrit en dur dans le programme, puis chargé dans la ram lors de l'execution de celui-ci.

Or il existe une fonciton : F(), qui grosso modo ne va pas stocker le mot à afficher dans la ram.
Il suffit de faire :

u8g.drawStr( 65, 25, F("texte"));

J'ai ainsi gagné un peu plus de 110 octets sur 2048 octets ... et pourtant je n'ai pas beaucoup de texte à afficher !
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
nickdan
Administrateur
Messages : 6273
Inscription : 17 sept. 2008, 9:52 10

Re: Tête panoramique motorisée (V.2015)

Message par nickdan »

La fonction F() est propre à l'écran et la bibliothèque associée que tu utilises ? si cela te permet de réduire ta conso mémoire c'est très bien!

Il y a sinon, possibilité d'utiliser des composants externes ("shield" par ex) type EEPROM, cela sert à stocker de la donnée de façon persistante. Typiquement, tes paramètres, mais aussi les valeurs que l'utilisateur choisi, comme ça, la prochaine fois qu'il rallume la bête, il retrouve les derniers paramétrages saisis.
Cela pourrait aussi permettre de stocker des "profils", par exemples par type d'objectif :
objo1 : 2 rangs de 6 images
objo2 : 3 rangs de 10 images
...
Mais bon, si tu est déjà limité en sorties... encore que ça doit utiliser le bus ISP (je crois que c'est son nom), donc le broche 1 et 2 seulement si je me souviens bien. Mais j'ai jamais étudié ce bus en détail. Evidemment, ça augmente la taille du programme ;)
Et puis bon, faut bien en garder sous le pied pour la version 2.0 :mrgreen:
---------------------------------------------
Nicolas CHAMBINAUD
http://www.images-numeriques.fr/
http://www.astrosurf.com/magnitude78
Images sous licence Creative Common Image
---------------------------------------------
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »
— devise Shadock
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

J'ai déjà programmé la sauvegarde des paramètres dans l'EEPROM :

Code : Tout sélectionner

// On sauvegarde les paramètres dans la EEPROM !
void ecriture_eeprom()
{
  for (int i = 1; i <= ROW_COUNT(param3); i++) {
    EEPROM.update(i, param3[i]);
  }
  EEPROM.write(511, 101);
}




// on charge les param avec la sauvegarde en EEPROM
void charge_eeprom()
{
  if ( EEPROM.read(511) == 101 )
  {
    for (int i = 1; i <= ROW_COUNT(param3); i++) {
      param3[i] =  EEPROM.read(i);
    }
  }

}

Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
nickdan
Administrateur
Messages : 6273
Inscription : 17 sept. 2008, 9:52 10

Re: Tête panoramique motorisée (V.2015)

Message par nickdan »

Tu as une eeprom intégré à ton Arduino ou tu l'as ajouté ?
---------------------------------------------
Nicolas CHAMBINAUD
http://www.images-numeriques.fr/
http://www.astrosurf.com/magnitude78
Images sous licence Creative Common Image
---------------------------------------------
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »
— devise Shadock
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

Non elle est intégrée : 512 de place. C'est pour ça que je me sers de la dernière valeur ( la 511 ) comme d'un drapeau, et suivant sa valeur, je vais charger ou non les derniers paramètres entrés par l'utilisateur.
( en plus des paramètres par défauts suivant le mode choisi)
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
nickdan
Administrateur
Messages : 6273
Inscription : 17 sept. 2008, 9:52 10

Re: Tête panoramique motorisée (V.2015)

Message par nickdan »

Il me semblait bien qu'il y avait un bout d'eeprom intégré, au moins sur certains modèles, mais jamais bien eu le temps ni l'occasion de m'y intéresser.
---------------------------------------------
Nicolas CHAMBINAUD
http://www.images-numeriques.fr/
http://www.astrosurf.com/magnitude78
Images sous licence Creative Common Image
---------------------------------------------
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »
— devise Shadock
Avatar de l’utilisateur
Mattpano
Animateur Hugin
Messages : 4293
Inscription : 10 déc. 2007, 16:27 04

Re: Tête panoramique motorisée (V.2015)

Message par Mattpano »

Je suis en train d'essayer d'améliorer le programme que j'ai fait.
Je pense avoir réussi à trouver le nombre de photos nécessaires pour la réalisation d'un sphérique.

Du coup, afin de vérifier mes formules, pouvez-vous m'indiquer vos paramètres de prises de vues ? Il me faudrait :
- type d'objectif utilisé (fisheye ou classique)
- focale
- coeff du boitier (full frame, x1.5, x1.6 ...)
- votre taux de recouvrement entre 2 photos

Et du coup, si possible comment vous prenez vos photos, afin que nous comparions la pratique et la théorie !

S'il y a des personnes qui ont fait des sphériques avec des objectifs non fisheye, je suis bien curieux de voir vos paramètres, afin de valider mes calculs !

Merci pour votre aide.
Matthieu SELME
- Mon site de panoramas 360° : www.360x180.fr
- Des panoramas à 360° réalisés en cerf-volant : 360° aériens
- Retrouvez-moi sur Twitter (@mattpano)
Avatar de l’utilisateur
pmllc
Co-administrateur
Messages : 8382
Inscription : 12 déc. 2007, 21:54 20

Re: Tête panoramique motorisée (V.2015)

Message par pmllc »

Les infos données par gibie sur les objectifs te donnent les infos nécessaires je pense. Tu as aussi des bases de données comme http://wiki.panotools.org/Entrance_Pupil_Database
Toutes mes photos sont sous licence Creative Common Image
Néanmoins, toutes les photos publiées sur panophoto.org peuvent être retouchées sans mon consentement explicite pour publication sur panophoto.org sauf avis explicite contraire.
Image
Répondre

Revenir à « Têtes panoramiques motorisées maison »