# Mouvements neuronaux

Certains liens peuvent ne pas être actifs (s´il n´y a pas de connexion internet).

## download

#
Principe
Contenu
Les menus
Le programme
Utilisations

## Principe

Cette application montre:

### 1) Comment construite des réseaux neuronaux de type perceptron multi couches

### 2) Comment construire des trajectoires

selon 2 modes:
des rotations définies par:
angle an et un axe xr,yr,zr
donnant lieu à 2 types de trajectoires de rotation et d´ axe.
des quaternions de la forme w,x,y,z, avec:
an=2*acos(w)
x,y,z tels que module(x,y,z)=sin(a/2) constituée par une liste
le quaternion w,x,y,z étant un vecteur 4D unitaire (de module 1).
Le mouvement d´un volume i est dé:fini par une trajectoire de quaternions obtenue en interpolant sphériquement une liste
qi,1 qi,2 ... qi,nq de nq quaternions.
Pour plusieurs volumes Épaule,Humerus,Radius,Poignet,Doigts on aura autant de trajectoires.

### 4) Comment utiliser ces fonctionnalités

pour programmer un bras pouvant:
imiter interactivement la capture d´un bras réel.
interagir "intelligemment" avec un acteur réel dont il apprend les postures (en cours de développement).

### Remarque:

Pour programmer en C cette application hors anyflo il sera nécessaire de:
1) programmer les réseaux neuronaux.
2) programmer les quaternions et leur interpollation sphérique.
3) programmer une interface temps réel pour l´interaction.

### Définition des mouvements

Les mouvements de rotations sont définis dans un fichier .rota de la forme:

r1,1 r1,2 ... r1,nq
r2,1 r2,2 ... r2,nq
...
rnv,1 rnv,2 ... rnv,nq

Où ri,j=a,x,y,z est une rotation définie par son angle a et son axe x,y,z.
Les mouvements de quaternions sont définis dans un fichier .quat de la forme:

q1,1 q1,2 ... q1,nq
q2,1 q2,2 ... q2,nq
...
qnv,1 qnv,2 ... qnv,nq

Où qi,j=w,x,y,z est un quaternion.
Ces fichiers de mouvements pourront être construits à partir de la capture de ceux d´un acteur réel.
Une interaction en temps réel exigera que soient interfacées la capture et son interprétation.

## Contenu

### Dossier env

Contenant:
*.h: fichiers de configuration d´anyflo.
*.rota: fichiers matrice décrivant des mouvements.

### anyflo_video.js

Java scrypte de lancement en format vidéo.

### initb.h

Fichier de configuration dans le dossier env de la racine distribution.

### mouv_neur.func

Fonction en langage anyflo.

### mouv_neur.htm

Ce fichier.

### mouv_neur.js

Java scrypte de lancement de l´application.

### demo1_network.js

Java scrypte de lancement de la démo des réseaux neuronaux.
demo1_network.func: programme (en langage anyflo) de la démo.
corps_simple.func: programme (en langage anyflo) de construction d´un corps simple (utliisé par demo1_network().

## Les menus

Menu principal
EXPL: sous menu des explications.
RESEAU: sous menu de création d´un réseau.
GEN: génération d´une génétique.
INI: initialisation
COL: oui/non col.
PEAU: oui/non affichage de la peau.
EXT: oui/non ext.
FONC: affiche les noms des fonctions, cliquer sur l´un d´eux en affiche le texte.
PASaPAS: mode pas à pas, cliquer sur CONTINUE (vert) avance d´une image, cliquer sur X (rouge) sort de ce mode.
Attention: ne pas cliquer sur RETURN, ce qui aurait pour effet de relancer le programme...
Un message clignotant indique chaque fois la marche à suivre, la case du menu qu´il faut cliquer pulse pendant environ 4 secondes.
EXIT: pour quitter le programme.

### EXPL: sous menu des explications

HEL: help de ce sous menu.
ROTA: cliquer sur un nom d'os (Épaule, Humerus, Radius, etc...) puis modifier l´angle de rotation rota et l´axe, le bras bouge en conséquence.
Cliquer sur TOUS() sélectionne tous les os.
Cliquer dans le cadre vert change l'oeil.
COMPLEX: isomorphisme des rotations planes et des nombres complexes:
Modifier les composantes a et b du nombre complexe unitaire z=a+i*b, le point rouge affiché sur le cercle de rayon 1 représente l´angle correspondant de cosinus a et de sinus b.
QUAT: isomorphisme des rotations de l´espace et des quaternions:
Modifier l´angle de rotatiuon rota et l´axe du nombre quaternion unitaire q=w+i*a+j*b+k*c, le point rouge P affiché sur la sphère de rayon 1 représente la rotation d´angle 2*acos(w) et d´axe OP.
Cliquer dans le cadre vert change l'oeil.
MOUV: interpolation sphérique de 2 quaternions:
Deux quaternions q1=w1,x1,y1,z1 et q2=w2,x2,y2,z2 sont représentés par deux points P1(rouge) et P2 (vert) de la sphère de rayon unité.
Modifier le coefficient d´interpolation u, le point P représentant le quaternion interpolé entre q1 et q2 s´affiche sur la sphère entre P1 et P2.
Modifier les quaternions sur les échelles.
La formule d´interpolation est sphérique:
c1=(sin((1-u)*a))/sin(a) c2=(sin(u*a))/sin(a) q=c1*q1+c2*q2
AUTO(): interpolation automatique.
Cliquer dans le cadre vert change l'oeil.
MOUVS:
Une POSITION ets représentée par un quaternion.
un MOUVEMENT Élémentaire est représenté par une liste de quaternions interpolés. et de sinus b.
Un MOUVEMENT MULTIPLE (par exemple des os constituant le bras) est représenté par une suite de telles listes c´est à dire par une matrice de quaternions.
On a stocké sur le disque un tel mouvement par un fichier .rota

### RESEAU: sous menu de création d´un réseau

HEL: help de ce sous menu.
MIME: sous menu de création d´un réseau mimétique.
AUTRE: sous sous menu de création de réseaux d´un autre type (en développement).
Sous sous menu MIME
HEL: help.
Cliquer sur CREER:
Cliquer sur ALEA: cré un couple d´apprentissage aléatoire.
Cliquer sur LIRE: cliquer sur un nom.rota, le fichier est chargé comme (couple d´apprentissage (avec loi=motif, c´agrave; dire sortie=entrée).
Cliquer sur APP: apprentissage, la courbe dérreur s´affiche et doit tendre vers zéro. S´il n´y a pas convergence on peut cliquer sur NOISE pour bruiter la matrice des poids synaptiques ou sur coe1 et coe2 qui sont les constantes d´apprentissage. On peut aussi bruiter les motifs et les lois en cliquant une petite valeur sur l´échelle alea.
Cliquer sur MATRICE: affiche la matrice des poids synaptiques.
AUTRE: en développement.

### GEN: génération d´une génétique

HEL: help.
Cliquer sur ROTA traitement des rotations ou
sur QUAT traitement des quaternions ou
APP: affiche l´apprentissage.
MATRICE: affiche la matrice des poids synaptiques.
Cliquer sur INTER: mode interactif
Un petit bras vert apparait dans un cadre à gauche, cliquer dans le cadre modifie sa position qui sert de modèle au bras apparaissant à droite. Le mouvement du petit bras est passé en entrée du réseau qui fournit, en sortie, le mouvement du bras. Selon le mode choisi ROTA ou QUAT les rotations ou les quaternions sont utilisés.
Si APP est validé l´apprentissage est affiché: on peut modifier les paramètres (comme expliqué dans APP).
On peut voir, sur la courbe d´erreur, le réseau s´auto configurer en temps réel.
On peut aussi cliquer sur les motifs (verts) pour provoquer le mouvement correspondant.

## Le programme

Les fonctions
Les variables

### Les fonctions

Menu principal:
mouv_neur(): fonction principale.
externes(): déclaration des variables externes.
init(): initialisations.
generer_menu(): génération des menus.
MEN(): première fonction du menu principal de nom MEN.
HEL(): fonction help du menu principal.
INI(): réinitialisations.
COL(): oui/non col.
PEAU(): affichage des peaux.
EXT(): oui/non ext.
FONC(): affichage des fonctions.
fonc_FONC(): appelée à chaque image si FONC est validée.
PASaPAS(): mode pas à pas.
EXIT(): sort du programme.
DEUX_POINTS(): désactive les affichages des échelles, des menus, des messages et des textes.
Sous menu EXPL
EXPL(): première fonction du sous menu EXPL.
EXPL_HEL(): help du sous menu EXPL.
fonc_EXPL(): appelée à chaque image si EXPL est validée.
EXPL_ROTA(): explication des rotations.
fonc_EXPL_ROTA(): appelée à chaque image si EXPL_ROTA est validée.
EXPL_COMPLEX(): explication des nombres complexes unitaires associés à aux rotations planes.
fonc_EXPL_COMPLEX(): appelée à chaque image si EXPL_COMPLEX est validée.
EXPL_QUAT(): explication des quaternions unitaires associés aux rotations de l´espace.
fonc_EXPL_QUAT(): appelée à chaque image si EXPL_QUAT est validée.
MOUV(): explication de l´interpolation sphérique des quaternions.
fonc_EXPL_MOUV(): appelée à chaque image si EXPL_MOUV est validée.
AUTO(): interpolation automatique.
EXPL_MOUVS(): explication de plusieurs mouvements.
fonc_EXPL_MOUVS(): appelée à chaque image si EXPL_MOUVS est validée.
AUTO(): interpolation automatique.
Sous menu RESEAU
RESEAU():première fonction du sous menu CREER.
RESEAU_HEL(): help du sous menu CREER.
fonc_RESEAU(): appelée à chaque image si CREER est validée.
SET_PARAM_RESEAU(): calcul des paramètres du réseau.
RESEAU_MIME(): réseau mimétique
Sous menu RESEAU_MIME du menu RESEAU
RESEAU_MIME():première fonction du sous menu CREER.
RESEAU_MIME_HEL(): help du sous menu RESEAU_MIME.
fonc_RESEAU_MIME(): appelée à chaque image si RESEAU_MIME est validée.
RESEAU_MIME_CREER(): cré d´un réseau à couches cachées (de type perceptron):
RESEAU_MIME_ALEA: crée un motif et une loi identiques formant un couple d´apprentissage (qui sont visualisés en vert et rouge).
RESEAU_MIME_LIRE: cliquer sur un , le fichier est chargé et constitue un couple d´apprentissage.
fonc_LIRE(): appelée a` chaque image si RESEAU_MIME_LIRE est validé.
RESEAU_MIME_APP: lance l´apprentissage.
RESEAU_MIME_MATRICE: affichage de la matrice.
CREER_QUAT(): validation des trajectoires de quaterniuons.
Sous menu GEN
GEN():première fonction du sous menu GEN.
GEN_HEL(): help du sous menu GEN.
fonc_GEN(): appelée à chaque image si GEN est validée.
GEN_INTER(): interaction.
fonc_GEN_INTER(): appelée a` chaque image si GEN_INTER est
GEN_ROTA(): validation des rotations.
GEN_QUAT(): validation des quaternions.
GEN_APP(): affichage de l´apprentissage.
GEN_MATRICE(): affichage de la matrice.
Interaction
F0(): appelée une seule fois en début de l´interaction.
F5(): appelée à chaque image aprè l´affichage des volumes, permet l´affichage d´échelles et de textes sur l´image.
Fonctions utilitaires:
dim_ecr(): calcule les dimensions en fonction de la taille de l´écran.
set_message(): initialise un message clignotant.
coder_bras(): code le mouvement du bras.
lire_rota(): lit un fichier de mouvements nom.rota dans la mémoire courante.
cou_vol(): change la couleur du volume selectionné
TOUS(): sélectionne tous les volumes.
aff_quat(): affiche un quaternion.
rendre_visible(): affiche Vol ou Peaux.
rendre_invisible(): invalide l´affichage.
modif_param(): affiche les échelles de saisie des paramètres.
VOL_QUAT(): retourne l´évaluation de la position du bras par rapport à la mémoire num.
tourner_Vol0(): tourne les volumes Vol0 dans la mémoire -1 (en mode INTER).
creer_reseau(): création d´un réseau.
aff_reseau(): affichage d´un réseau.
Vol0_Vol(): Vol0 -> réseau _> Vol..
motif_loi_alea(): génère un couple d´apprentissage aléatoire.
tester_creer(): retourne -1 si CREER n'est pas validé.
Fonctions de construction:
cons_bras(inc): construction d´un bras d´indice inc.
cons_rotule(): construction d´une rotaule (épaule et poignet).
cons_doigt(): construction d´un doigt.
cons_doigt_1(): construction d´une phalange.
cons_peau_main(): construction des peaux.
cons_peau(): construction d´une peau.
Codage te décodage:
CODAGE(): transformation d´une rotation de l´espace (an,xr,yr,zr) en un quatrenion (w,x,y,z) puis codage sur 4*Nb_Bit caracteres 0 et 1.
DECODAGE_ROTA(): décodage d´un génome codant une rotation en une rotation.
DECODAGE_ROTA_QUAT(): décodage d´un génome codant une rotation en un quaternion.
DECODAGE_QUAT_QUAT(): décodage d´un génome codant un quaternion en un quaternion.
Génération des trajectoires:
GEN_TRAJ()
GEN_TRAJ_ROTA(): génération des trajectoires de rotations.
GEN_TRAJ_QUAT(): génération des trajectoires de quaternions par interpolation sphérique.

### Les variables

Sem_AUTO: interpolation automatiue (1), manuelle (0).
Inc=200: incrément des numéros des volumes d´une description d´un bras à un autre.
Lead,Epaule,Humerus,Radius,Poignet,Pouce,Indexe,Majeur,Annulaire,Petit,Doigts: noms des os.
Peau_Bras,Peau_Main,Peau_Pouce,Peau_Indexe,Peau_Majeur,Peau_Annulaire,Peau_Petit: noms des peaux.
Nb_Part: nombre d´individus (particules) de la génétique.
Nb_Quat: nombre de quaternions composant un mouvement élémentaire.
Nb_Vol: nombre de volumes animés.
Nb_Mem: nombre de mémoires codant des mouvements lus.
Ni: variations du nombre d´images d´une trajectoire.
Num: numéro du volume sélectionné.
Dim_Mot,Cassure,Mot1,Mot2,Mot3,Mot0: mots utilisés par EXPL_ALGOGEN.
Pend: mouvement pendulaire ou non.
Amp: variation du coefficient d´amplitude.
Alea: variation du coefficient de bruitage des motifs et des lois..

## Utilisations

Reconnaissance de mouvements
Génération de mouvements

### Reconnaissance de mouvements

Il suffit de décrire des mouvements dans des fichiers .rota qui seront chargés comme couples d´apprentissage. Ils seront reconnus, après apprentissage, ainsi que des mouvements voisins.

### Génération de mouvements

Des mouvements non appris passés en entrée du réseau donneront, en sortie, des mouvements nouveaux qui ne sont ni des barycentres des mouvements appris ni arbitraires, en ce sens on peut dire que le réseau improvise.