8 đŸ‘šâ€đŸ« Apprendre de nouvelles compĂ©tences Ă  Nybble

« Donnez du poisson Ă  un chat, il mangera pendant une journĂ©e, apprenez-lui Ă  pĂȘcher et il mangera pour le restant de ses jours. » 🎣

8.1. Comprendre les compétences dans Instinct.h.

Un ensemble d'angles d'articulation dĂ©finit une posture statique, tandis qu'une sĂ©rie d’ensembles dĂ©finit un mouvement rĂ©gulier, habituellement une dĂ©marche.

L’EEPROM est limitĂ©e Ă  1 000 000 cycles d’écriture. Je dĂ©cide donc de minimiser les opĂ©rations d’écriture.

Il existe deux sortes de compĂ©tences : Instincts et Newbility. Les chemins sont tous deux Ă©crits sur l’EEPROM embarquĂ©e (1 KB) dans la table de rĂ©fĂ©rences, mais les donnĂ©es rĂ©elles sont stockĂ©es Ă  diffĂ©rents emplacements de la mĂ©moire :

  • La mĂ©moire IÂČC EEPROM (8 KB) stocke les Instincts.

Les Instincts sont des compĂ©tences dĂ©jĂ  programmĂ©es et perfectionnĂ©es. On peut les comparer Ă  une « mĂ©moire musculaire ». La plupart des Instincts sont Ă©crits de maniĂšre linĂ©aire une seule fois sur la mĂ©moire IÂČC EEPROM avec WriteInstinct.ino. Leurs chemins sont gĂ©nĂ©rĂ©s et enregistrĂ©s dans la table de rĂ©fĂ©rences sur l’EEPROM embarquĂ©e lors de l’exĂ©cution de WriteInstinct.ino.

  • PROGMEM, (qui partage la mĂ©moire vive 32 KB avec le programme) stocke la Newbility.

Une Newbility est une nouvelle compĂ©tence expĂ©rimentale qui nĂ©cessite de nombreux tests. Elle n’est ni Ă©crite sur l’IÂČC, ni sur l’EEPROM embarquĂ©e, mais elle est conservĂ©e sur la mĂ©moire vive sous un format PROGMEM. Il doit ĂȘtre tĂ©lĂ©chargĂ© comme le serait un composant d’un programme Arduino. Son chemin est Ă©galement dĂ©fini pendant l'exĂ©cution du code, bien que la valeur change rarement si le nombre total de compĂ©tences (y compris tous les Instincts et Newbilities) reste inchangĂ©.

8.2. Exemple de code Instinct.h

//a short version of Instinct.h as example

#define WalkingDOF 8
#define NUM_SKILLS 6
#define I2C_EEPROM
const char cr[] PROGMEM = { 
26, 0, -5,
 35, 37,-46,-53,-23,-32, -3, 12,
 40, 28,-42,-59,-24,-28, -4, 12,
 ...
 33, 39,-47,-51,-22,-32, -3, 11,
};
const char stair[] PROGMEM = { 
54, 0, 30,
 44, 90,-39,-38, 10,-32,-10, 32,
 45, 90,-32,-46, 16,-38,-16, 38,
 

 43, 90,-44,-32,  6,-26, -6, 26,
};
const char pu1[] PROGMEM = { 
1, 0, 0,
  0,-30,  0,  0,  0,  0,  0,  0, 20, 20, 60, 60, 60, 60,-55,-55,};
const char pu2[] PROGMEM = { 
1, 0, 0,
  0, 10,  0,  0,  0,  0,  0,  0, 60, 60, 40, 40,-45,-45,-55,-55,};
const char rest[] PROGMEM = { 
1, 0, 0,
-30,-80,-45,  0, -3, -3,  3,  3, 60, 60,-60,-60,-45,-45, 45, 45,};
const char zero[] PROGMEM = { 
1, 0, 0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,};
#if !defined(MAIN_SKETCH) || !defined(I2C_EEPROM)
const char* skillNameWithType[] =
{"crI", "stairN", "pu1I", "pu2I", "restI", "zeroN",};
const char* progmemPointer[] = 
{cr, stair, pu1, pu2, rest, zero, };
#else
const char* progmemPointer[] = {stair, zero};
#endif

8.2.1. Constantes définies

define WalkingDOF 8

Indique que le nombre de DDL pour marcher est de 8 sur Nybble.

define NUM_SKILLS 6

Le nombre devrait ĂȘtre le mĂȘme que dans la liste const char* skillNameWithType[].

define I2C_EEPROM

Indique que NyBoard contient une mĂ©moire IÂČC EEPROM pour enregistrer les Instincts.

8.2.2. Structure des donnĂ©es relatives Ă  l’ensemble des compĂ©tences

Regardez bien les deux compétences suivantes :

const char rest[] PROGMEM = { 
1, 0, 0,
-30,-80,-45,  0, -3, -3,  3,  3, 60, 60,-60,-60,-45,-45, 45, 45,};
const char cr[] PROGMEM = { 
26, 0, -5,
 35, 37,-46,-53,-23,-32, -3, 12,
 40, 28,-42,-59,-24,-28, -4, 12,
 ...
 33, 39,-47,-51,-22,-32, -3, 11,
};

Elles sont formatées ainsi :

Une posture ne correspond qu’à un seul mouvement, tandis qu’une allure correspond à plusieurs mouvements.

8.2.3. Suffixes indiquant un Instinct ou une Newbility

Vous devez charger WriteConst.ino pour Ă©crire les compĂ©tences dans l’EEPROM pour la premiĂšre fois.. Voici les informations qui seront utilisĂ©es :

const char* skillNameWithType[] =
{"crI", "stairN", "pu1I", "pu2I", "restI", "zeroN",};
const char* progmemPointer[] = 
{cr, stair, pu1, pu2, rest, zero, };

Vous remarquerez l’emploi des suffixes I ou N sur les chaĂźnes d’appellation de la compĂ©tence. Ils indiquent au programme oĂč stocker les donnĂ©es relatives aux compĂ©tences et quand dĂ©finir leurs chemins.

Plus tard, si tous ces facteurs sont rĂ©unis, le programme n’aura besoin que de ce repĂšre pour se rĂ©fĂ©rer Ă  la listeconst char* progmemPointer[] = {stair, zero};afin d’exploiter au mieux les compĂ©tences prĂ©dĂ©finies.

8.3. Définir de nouveaux comportements et compétences

8.3.1 Modifier le modÚle de compétences existant

Il existe dĂ©jĂ  une compĂ©tence appelĂ©e « zeroN » sur Instinct.h. Il s'agit d'une posture non dĂ©finie qui n’attend plus qu’on la configure.

Vous pouvez tout d’abord utiliser la commande mIndex Offset pour bouger les articulations dans la position de votre choix, puis remplacer les angles d’articulation (en gras) en une seule fois :

const char zero[] PROGMEM = { 
1, 0, 0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,};

Vous pouvez simplement charger Nybble.ino chaque fois que vous changez le tableau (sans avoir Ă  charger WriteInstinct.ino) puisqu’il est considĂ©rĂ© comme une Newbility et n’a pas besoin d’ĂȘtre Ă©crit sur la mĂ©moire morte IÂČC EEPROM. Pour dĂ©clencher la nouvelle posture, appuyez sur le bouton 7 de la tĂ©lĂ©commande infrarouge ou saisissezkzero dans le moniteur sĂ©rie.

Vous pouvez renommer cette compĂ©tence mais n’oubliez pas de mettre Ă  jour le schĂ©ma des touches de la tĂ©lĂ©commande infrarouge.

8.3.2. Découvrir plus de compétences cachées dans Instinct.h

Davantage de compĂ©tences sont cachĂ©es dans Instinct.h et peuvent ĂȘtre utilisĂ©es via le moniteur sĂ©rie avec la commande liĂ©e au jeton « k ». Par exemple, kcd1 permettra Ă  Nybble de passer dans la posture « cd1 », qui signifie « se pencher en avant ».

Vous pouvez Ă©galement Ă©crire des programmes courts pour que Nybble effectue plusieurs compĂ©tences Ă  la suite, de la mĂȘme maniĂšre que les « pompes » dans Nybble.ino. Par exemple, en connectant les postures « cd1 » et « cd2 » comme sĂ©quence en boucle, vous pouvez faire en sorte que Nybble se penche en avant, regarde de gauche Ă  droite, puis de droite Ă  gauche.

8.3.3 Automatisation

Jusqu'à présent, Nybble est contrÎlé par la télécommande infrarouge, vous permettant de prendre les décisions concernant son comportement.

Vous pouvez connecter Nybble avec votre ordinateur ou votre smartphone et les laisser envoyer des instructions automatiquement.

En ajoutant des capteurs (notamment sensoriels) ou des modules de communication (Ă  l’image d’un module de contrĂŽle vocal), vous pouvez apporter une nouvelle perception Ă  Nybble, et lui apprendre de nouvelles capacitĂ©s. Vous pouvez donc intĂ©grer de nombreux comportements automatiques et potentiellement rendre Nybble autonome !

Last updated

Was this helpful?