poivron-robotique
Débuté par kmikaz, nov. 23 2021 09:11
566 réponses à ce sujet
#24
Posté 10 février 2022 - 22:27
J'ai vu qu'il n'y avait plus qu'un mat balise sur le terrain (à ma dernière participation, il y en avait 6) et les contraintes sur les mats balises des robots se sont bien précisée, mes précédent mats balises étaient creux. Je vois que maintenant ils doivent être plein
On fixait une balise en carton avec du papier d'alu dessus sur le robot adverse pour être sur de le détecter !
On fixait une balise en carton avec du papier d'alu dessus sur le robot adverse pour être sur de le détecter !
#28
Posté 22 février 2022 - 20:31
[Message Discord de Keuronde [Poivron / Riombotique]]
@Kévin [E.S.C.Ro.C.S] Je fais aussi avec les fond de tiroir, j'ai 2 capteurs ultrason (avec le code pour les gérer) et le(s) servo moteur(s). Ça me permet d'économiser 1 entrée/sortie et je commence à être limite sur ma carte... Il y a plein de petites raisons comme ça...
@Kévin [E.S.C.Ro.C.S] Je fais aussi avec les fond de tiroir, j'ai 2 capteurs ultrason (avec le code pour les gérer) et le(s) servo moteur(s). Ça me permet d'économiser 1 entrée/sortie et je commence à être limite sur ma carte... Il y a plein de petites raisons comme ça...
#30
Posté 28 mars 2022 - 22:08
Notre robot a bien avancé, mais il faut encore coder la gestion de l'évitement. Dans mon souvenir, c'est parfois assez casse-pied, notamment parce que la zone est encombré, le robot détecte autre chose que ce qu'il devrait. Il faut recommencer l'essai plusieurs fois avant de pouvoir valider le code (ou en conclure que c'est tout boggué).
Alors, l'idée de génie, ça a été de prendre le code de la stratégie et de décider de l'exécuter sur le PC. Le code de la stratégie ne communique avec l'extérieur que par :
* 6 servomoteurs
* 4 capteurs de distances
* 1 liaison I2C (24 messages)
D'abord, il a fallu créer le projet, en ajoutant les fichiers du code du robot en créant des liens symboliques. Vers tous les .h, mais pas tous les .c, l'art est de laisser de coté toutes les fonctions bas niveau, telles que la communication I2C, la lecture des capteurs ou la commande des actionneurs. Quelques ajustement pour déplacer quelques ligne de code spécifiques au microcontrôleur (l'accès au registre des E/S) puis en compilant, j'obtiens la liste des fonctions déclarées mais qui n'ont pas été trouvée lors de l'édition des liens.
Il faut les ré-implémenter, idéalement sans se prendre la tête. Par exemple :
`void Servo_Set(unsigned int pos,char servo){
printf("Servo %d en position %d\n", servo, pos);
}`
Pour les capteurs, j'ai commencé par renvoyé une valeur fixe, puis rapidement modifié le code pour charger les valeur depuis un .csv.
Et ça marche.. pas !
Notre stratégie est une machine à état obèse (et ça va empirer, mais ce n'est pas le sujet). Dès le deuxième état, le programme boucle sans fin ou s'arrête avec un "Segfault". J'ai tenté d'utilisé Valgrind ou gcc -Wall pour trouver ce qui n'allait pas, sans grand succès. Valgrind dit juste que la "Stack" est corrompue. Certainement un débordement de pointeur. C'est 2 jours plus tard que je trouve le soucis :
`// Ca commence comme ça :
enum t_reponse_message Message_TrajectoireTamponRep(){
...
char message[]="TT";
Communication_envoiMessage(message, 3);
...
}
// Et ça continue là :
char Communication_envoiMessage(char * message, char nb_rec)
{
...
while((message[index] !='\0')))
{
index++;
}
message[index] = calculJeton();
message[index+1] = '\0'; // !!! ICI !!!
...
}`
Oui, le caractère de fin de chaîne '\0' que nous rajoutons est en dehors de la zone allouée dans la fonction Message_TrajectoireTamponRep.
C'est moche mais le robot fonctionnait globalement bien malgré ce bug affreux.
Et là où j'ai besoin de vous, c'est que j'aimerai tester le code pour trouver d'éventuels autres bug similaires. Vous utiliseriez quoi ?
Alors, l'idée de génie, ça a été de prendre le code de la stratégie et de décider de l'exécuter sur le PC. Le code de la stratégie ne communique avec l'extérieur que par :
* 6 servomoteurs
* 4 capteurs de distances
* 1 liaison I2C (24 messages)
D'abord, il a fallu créer le projet, en ajoutant les fichiers du code du robot en créant des liens symboliques. Vers tous les .h, mais pas tous les .c, l'art est de laisser de coté toutes les fonctions bas niveau, telles que la communication I2C, la lecture des capteurs ou la commande des actionneurs. Quelques ajustement pour déplacer quelques ligne de code spécifiques au microcontrôleur (l'accès au registre des E/S) puis en compilant, j'obtiens la liste des fonctions déclarées mais qui n'ont pas été trouvée lors de l'édition des liens.
Il faut les ré-implémenter, idéalement sans se prendre la tête. Par exemple :
`void Servo_Set(unsigned int pos,char servo){
printf("Servo %d en position %d\n", servo, pos);
}`
Pour les capteurs, j'ai commencé par renvoyé une valeur fixe, puis rapidement modifié le code pour charger les valeur depuis un .csv.
Et ça marche.. pas !
Notre stratégie est une machine à état obèse (et ça va empirer, mais ce n'est pas le sujet). Dès le deuxième état, le programme boucle sans fin ou s'arrête avec un "Segfault". J'ai tenté d'utilisé Valgrind ou gcc -Wall pour trouver ce qui n'allait pas, sans grand succès. Valgrind dit juste que la "Stack" est corrompue. Certainement un débordement de pointeur. C'est 2 jours plus tard que je trouve le soucis :
`// Ca commence comme ça :
enum t_reponse_message Message_TrajectoireTamponRep(){
...
char message[]="TT";
Communication_envoiMessage(message, 3);
...
}
// Et ça continue là :
char Communication_envoiMessage(char * message, char nb_rec)
{
...
while((message[index] !='\0')))
{
index++;
}
message[index] = calculJeton();
message[index+1] = '\0'; // !!! ICI !!!
...
}`
Oui, le caractère de fin de chaîne '\0' que nous rajoutons est en dehors de la zone allouée dans la fonction Message_TrajectoireTamponRep.
C'est moche mais le robot fonctionnait globalement bien malgré ce bug affreux.
Et là où j'ai besoin de vous, c'est que j'aimerai tester le code pour trouver d'éventuels autres bug similaires. Vous utiliseriez quoi ?
#31
Posté 28 mars 2022 - 22:57
Ben c'est clairement ce que j'aurais du faire !
Mais c'était un peu plus sournois que ça...
`if (Communication_Libre()){
unsigned char index=0;
while((message[index] !=0) && (index < NB_MAX_I2C_DATA_OUT-1))
{
index++;
}
if(index < NB_MAX_I2C_DATA_OUT-1){
message[index] = calculJeton();
message[index+1] = '\0';
Communication_nb_env = index+1;
strcpy((char*) Communication_message_envoi, message);//, NB_MAX_I2C_DATA_OUT);
etat_com = ENVOI_MESSAGE;
Communication_nb_rec = nb_rec;
return 0;`
ce tampon `Communication_message_envoi` est de cette taille `NB_MAX_I2C_DATA_OUT`
Qui est large... le problème venait que j'éditais `message` qui lui est un char[] passé en argument de taille variable, le `while` sert justement à déterminer sa taille...
C'était juste une bêtise de lui rajouter des choses à la fin ! J'aurai du travailler sur le `Communication_message_envoi` dont je maîtrise la taille dans ce fichier.
Mais c'était un peu plus sournois que ça...
`if (Communication_Libre()){
unsigned char index=0;
while((message[index] !=0) && (index < NB_MAX_I2C_DATA_OUT-1))
{
index++;
}
if(index < NB_MAX_I2C_DATA_OUT-1){
message[index] = calculJeton();
message[index+1] = '\0';
Communication_nb_env = index+1;
strcpy((char*) Communication_message_envoi, message);//, NB_MAX_I2C_DATA_OUT);
etat_com = ENVOI_MESSAGE;
Communication_nb_rec = nb_rec;
return 0;`
ce tampon `Communication_message_envoi` est de cette taille `NB_MAX_I2C_DATA_OUT`
Qui est large... le problème venait que j'éditais `message` qui lui est un char[] passé en argument de taille variable, le `while` sert justement à déterminer sa taille...
C'était juste une bêtise de lui rajouter des choses à la fin ! J'aurai du travailler sur le `Communication_message_envoi` dont je maîtrise la taille dans ce fichier.
#32
Posté 09 avril 2022 - 20:55
Bonsoir,
Alors, j'ai porté la stratégie sur PC pour pouvoir la tester sur simulateur, mais pour l'instant, ça n'a pas vraiment été utile (à part détecter cet affreux bug, ce qui est déjà bien).
Le dernier message sur le site date de fin janvier, il s'est quand même passé deux-trois truc depuis :
* La vitrine est prête
* Nous avons réactivé le code de détection d'obstacle et adapté notre nouvelle gestion des trajectoires pour en tenir compte.
* Fiabilisé la dépose de la statuette et l'arrêt en zone de départ (grâce à un recalage avec un Sharp IR - Je croise les doigts pour que ça marche à la coupe, mais le capteur est bien caché)
* Corrigé un bug qui nous permettait de faire tourner le robot sur lui-même que vers la gauche (les angles négatifs étaient mal géré à cause d'une erreur de type)
Nous étions à la coupe junior Eurobot à Lyon en mars et nous nous préparons pour la coupe Eurobot régionale à Saint Etienne. Notre gros travail va être de gérer la "couleur" de départ. La plus part du code s'adapte bien à la seconde couleur, mais le robot n'est pas symétrique et nous avons déjà nos premières surprises.
En attendant, petite vidéo :
Alors, j'ai porté la stratégie sur PC pour pouvoir la tester sur simulateur, mais pour l'instant, ça n'a pas vraiment été utile (à part détecter cet affreux bug, ce qui est déjà bien).
Le dernier message sur le site date de fin janvier, il s'est quand même passé deux-trois truc depuis :
* La vitrine est prête
* Nous avons réactivé le code de détection d'obstacle et adapté notre nouvelle gestion des trajectoires pour en tenir compte.
* Fiabilisé la dépose de la statuette et l'arrêt en zone de départ (grâce à un recalage avec un Sharp IR - Je croise les doigts pour que ça marche à la coupe, mais le capteur est bien caché)
* Corrigé un bug qui nous permettait de faire tourner le robot sur lui-même que vers la gauche (les angles négatifs étaient mal géré à cause d'une erreur de type)
Nous étions à la coupe junior Eurobot à Lyon en mars et nous nous préparons pour la coupe Eurobot régionale à Saint Etienne. Notre gros travail va être de gérer la "couleur" de départ. La plus part du code s'adapte bien à la seconde couleur, mais le robot n'est pas symétrique et nous avons déjà nos premières surprises.
En attendant, petite vidéo :
#33
Posté 12 avril 2022 - 21:56
Bonsoir à tous,
Voici un nouvel article en ligne, si vous nous suivez déjà ici vous n'apprendrez probablement pas grand chose..
http://poivron-robotique.fr/+Avancement-mi-Avril-2022+.html
Voici un nouvel article en ligne, si vous nous suivez déjà ici vous n'apprendrez probablement pas grand chose..
http://poivron-robotique.fr/+Avancement-mi-Avril-2022+.html
#34
Posté 13 avril 2022 - 20:52
@
Droop [robot en carton +
] Il est là l'affichage des points ! D'abord j'intègre le mât balise, puis je vois si j'ai de la place pour ce bazar (y'a un RPI zéro derrière l'afficheur). Je dois mettre une liaison SPI entre le RPI et l'afficheur et un UART entre le RPI et la carte principale. Si y'a pas la place, ben c'est du e-ink, du coup, ça ne nécessite même pas d'alimentation (comme sur la photo) et l'écran servira de feuille de papier (pas très écologique) 
Et les 188 points, c'était juste un test, ça ne représente pas mes ambitions !
Et les 188 points, c'était juste un test, ça ne représente pas mes ambitions !
#35
Posté 14 avril 2022 - 16:38
J'ai une image de fond réalisée à partir de la charte graphique de notre site. J'ai un peu galéré pour retrouver la police utilisée à l'origine. Ça doit être "Accent SF". A partir de ça j'ai créé 10 images pour les chiffres et un petit bout de code utilisant le code de démo pour afficher le bon chiffre à la bonne place.
#37
Posté 16 avril 2022 - 19:47
Nous revenons de la CARAR (Coupe Amical de Robotique d'Auvergne Rhône-Alpes). Merci à Télécom Saint Étienne (Projet & Tech) pour l'accueil ! C'était super sympa de discuter avec les équipes présentes, ARIG, Cleb Elek. Je dirais bien qu'on avait aussi l'arbitre le plus cool de Planète sciences, mais ce serait un coup à avoir des soucis à la coupe !
#39
Posté 22 avril 2022 - 07:37
@Greg [ARIG]
Pour les vidéos montées
En non monté, non ré-encodé, non recompressé (150Mo / pièce):
http://poivron-robotique.fr/Video/2022%20CARAR%20-%20Match%203-bis.MP4
Pour les vidéos montées
En non monté, non ré-encodé, non recompressé (150Mo / pièce):
http://poivron-robotique.fr/Video/2022%20CARAR%20-%20Match%203-bis.MP4
#40
Posté 23 avril 2022 - 11:09
Capsicum, le robot qui garde le cap ! (grâce à son gyroscope)
https://fr.wikipedia.org/wiki/Capsicum
Et enfin, un nouvel article, qui reprend en grande partie ce qui a déjà été présenté ici !
https://fr.wikipedia.org/wiki/Capsicum
Et enfin, un nouvel article, qui reprend en grande partie ce qui a déjà été présenté ici !
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users








