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};
#endif8.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.
Si vous construisez votre propre circuit imprimĂ© qui nâen contient pas, il nâest pas nĂ©cessaire de le prĂ©ciser sur cette ligne. Les deux sortes de compĂ©tences sont maintenant enregistrĂ©es sur la mĂ©moire vive sous le format PROGMEM. De toute Ă©vidence, cela rĂ©duira l'espace flash disponible pour les codes fonctionnels. S'il y avait trop de compĂ©tences, cela pourrait mĂȘme dĂ©passer la taille limite pour le chargement du programme.
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 :
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, };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?