Première leçon

Nota : le tuto est fait pour les débutants.

Après avoir regardé les tutos de GAEL du finger starter

http://inmoov.fr/finger-starter/

Vous avez envie d’aller plus loin.

Il va falloir donc installer : 

  1. Le logiciel pour utiliser son robot (myrobtlab)
  2. Un navigateur pour qu’il vous écoute (google chrome) .
  3. Un éditeur de textes pour créer vos propres programmes (avec le langage python ) accessible a tous
  4. Le Logiciel Arduino pour piloter vos servomoteurs.

Voici déjà le tuto de Gael très pédagogique pour débuter en programmation et installer votre environnement.   https://www.youtube.com/watch?v=230FjTTJw6s

L’éditeur de texte que je vous propose Notepad++ (il est multi-langage) à télécharger ici : https://notepad-plus-plus.org/fr/

Gael et Anthony ont crées un environnement tout prêt pour débuter :

Télécharge le zip sur github.

www.inmoov.fr/wp-content/uploads/mrl/myrobotlab.1.0.2693.7.zip

L’avantage de cet environnement c' est qu’il n’est pas nécessaire d’avoir fini son InMoov en entier. Il est possible d’activer au choix la tête, le bras, une main, les 2 mains , le torse

en allant dans les fichiers de config .

Une fois le fichier zip téléchargé, créer un dossier sur votre ordinateur, puis dé-zipper le fichier dans ce dossier .

Exemple :D:/MRL2693

Lancer le fichier START_INMOOV.bat

A la première installation myrobtlab installera tous les services, il faut être patient.

ÉTAPE SUIVANTE :

Mettre à jour votre carte Arduino .

  1. lancer le logiciel Arduino
  2. aller chercher le package MRLComm.ino dans le dossier
    …../resource/arduino/MRLComm
  3. téléversé le fichier dans votre Arduino comme dans la vidéo de Gael .


Voila maintenant nous somme prêt a programmer ce sera la leçon Numéro 4

FAIRE BOUGER LA MAIN ET LES DOIGTS (avec python) .


Deuxième leçon

Si vous avez un accent anglais pas terrible, nous allons mettre notre InMoov en français.

Se positionner dans le répertoire :

…./InMoov/config/

Editer avec notepad++ le fichier  : service_5_Mouth.config

Voici a quoi il ressemble : (Pour les débutant tout ce qui commence par un point virgule est ignoré par le système, il s’agit de commentaires)

;----------------------------- BASIC CONFIGURATION ----------------------------------------
[TTS]

Speechengine=LocalSpeech

; you can use :
;MarySpeech : open source TTS : http://myrobotlab.org/service/MarySpeech
;LocalSpeech : Local operating system TTS : http://myrobotlab.org/service/LocalSpeech
;Polly : [NEED API KEY AccessKey (apiKey1) and SecretKey (apiKey2)] http://myrobotlab.org/service/Polly
;VoiceRss : [NEED API KEY (apiKey1)] Free cloud service : http://myrobotlab.org/service/VoiceRss
;IndianTts : [NEED API KEY (apiKey1) and userid (apiKey2)] Hindi support : http://myrobotlab.org/service/IndianTts

VoiceName=3
;VoiceName=cmu-bdl-hsmm
; MarySpeech voices - take HSMM ones - http://myrobotlab.org/content/marytts-multi-langua...
; LocalSpeech : use local windows voices/macOs ( 0,1,2 etc ) print mount.getVoices()
; 0 voie hortense , 3 voie de julie , 1 paul , 2 zira anglaise
; amazon polly : http://docs.aws.amazon.com/polly/latest/dg/voiceli...

[API_KEY]
apiKey1=
apiKey2=
;----------------------------------- END --------------------------------------------------

C’est le premier fichier de config que l on va modifier, il y en aura d’autres.

Nous allons donc expliquer chaque entête

TTS  c’est ici que l’on va choisir son moteur vocale, vous pouvez utiliser MarySpeech ou 

LocalSpeech ,Polly,voiceRss,IndianTts etc ....

Exemple de config pour la voie Locale  Windows de julie en francais:

[TTS]

Speechengine=LocalSpeech

VoiceName=3

[API_KEY]  (clés APi pour les voix Polly,VoiceRss, ou IndianTts)

Sauvegarder votre fichier modifié dans le même répertoire.

AUTRE FICHIER IMPORTANT A MODIFIER :

le fichier _InMoov.config .
Ce fichier permet de gérer la partie électronique de vos montages.

;----------------------------- BASIC CONFIGURATION ----------------------------------------
[MAIN]
ScriptType=NoArduino
; RightSide: Also called FINGERSTARTER : connect one arduino ( called right ) to use FingerStarter + inmoov right side
; LeftSide: connect one arduino ( called left) to use head / inmoov left side
; setup your com ports inside service_6_Arduino.config
; NoArduino: vocal Only
; Full: Both side arduinos connected
; Virtual: virtual arduino and inmoov !
debug=True

Language=fr
; en,fr,es,de,nl,ru,hi
;----------------------------------- END --------------------------------------------------

Explication des Entêtes  : 

[MAIN] 

ScriptType =

  1. NoArduino (aucune carte arduino connecté , utile pour teste le chatbot)
  2. Full : quand le robot est fini avec toutes les carte arduino
  3. LeftSide : Une seule carte Arduino coté gauche pour la tête et le bras gauche 
  4. Il faudra aller dans le fichier service_6_Arduino.config pour configurer le port, exemple :
          MyLeftPort=COM4 
  5. Virtuel permet utiliser le mode virtuel de InMoov (gourmand en ressources)
  6. RightSide cote droit du robot ou finger starter seul .

debug=True  

pour voir défiler les commandes dans MRL et voir les messages d'erreur.

Language=fr
; en,fr,es,de,nl,ru,hi 

Mettre fr pour la vois en français .


TROISIÈME LEÇON :

Maintenant nous allons commencer à programmer en python

Le but de l’exercice faire bouger la main et les doigts de notre InMoov.

Première chose avant de programmer, nous allons aller dans les fichiers de config de Anthony .

  • Se positionner dans le répertoire :
    …./inmoov/config

Supposons que nous avons fini la main gauche

Nous allons donc modifier le fichier skeleton_leftArm.config

Avec l’éditeur Notepad++ouvrir le fichier skeleton_leftArm.config et mettre à TRUE

[MAIN]
isLeftHandActivated=True

A quoi servent les entêtes

;----------------------------- LEFT HAND CONFIGURATION ----------------------------------------

[MAIN]

isLeftHandActivated=True   Activation de la main 

[SERVO_MINIMUM_MAP_OUTPUT]  Valeur minimal des servos après les avoir calibrés

thumb=0
index=0
majeure=0
ringFinger=0
pinky=0
wrist=0

[SERVO_MAXIMUM_MAP_OUTPUT]  Valeur maximal des servos après les avoir calibrés

thumb=180
index=180
majeure=180
ringFinger=180
pinky=170
wrist=180

[SERVO_MAP_REST]   Valeur au démarrage des servomoteurs

thumb=0
index=0
majeure=0
ringFinger=0
pinky=0
wrist=90

;----------------------------------- ADVANCED CONFIGURATION -------------

[SERVO_INVERTED]   Inverse le sens des moteurs

thumb=False
index=False
majeure=False
ringFinger=False
pinky=False
wrist=False

[MINIMUM_MAP_INPUT]  Valeur minimal pour le mapping 

thumb=0
index=0
majeure=0
ringFinger=0
pinky=0
wrist=0

[MAXIMUM_MAP_INPUT]  Valeur Maxi pour le mapping

thumb=180
index=180
majeure=180
ringFinger=180
pinky=180
wrist=180

[VELOCITY]   Valeur pour la rapidité

thumb=10
index=40
majeure=40
ringFinger=40
pinky=40
wrist=40

[MAX_VELOCITY]

thumb=-1
index=-1
majeure=-1
ringFinger=-1
pinky=-1
wrist=-1

[SERVO_PIN]  Ce sont les pins ou sont branchées les servomoteurs . Si vous avez suivi la documentation de Gael il y a rien a modifier.

thumb=2
index=3
majeure=4
ringFinger=5
pinky=6
wrist=7

;------------------------

thumb = c’est le pouce
index = c’est l index
majeure = le majeur
ringFinger = l’annulaire
pinky = le petit doigt
wris t= le poignet

Au fur et à mesure de votre construction il faudra configurer vos fichiers

Dans la prochaine leçon on commence à programmer promis ………..


Quatrième leçon :

Maintenant nous allons commencer à programmer en python

Nous allons partir du fichier exemple de Gaël, et essayer de comprendre le premier programme python lancé au démarrage. (le fichier InMoov.py)

Se positionner dans le répertoire :
…./InMoov/
Editer avec Nodepad++ le fichier Inmoov.py

Tout ce qui commence par # ne sont pas interprété par python, il s’agit de commentaires

En programmation on prendra l’habitude de mettre des commentaires, très pratique lorsque l’on modifie sont programme plus tard.

Exemple :

# this will run with versions of MRL above :
# cela fonctionnera avec les versions de MRL ci-dessus:
mrlCompatible='2685'
mrlCompatible est la déclaration du variable dans la valeur est 2685

Dans le langage Python il faudra faire attention à l’indentation

C'est-à-dire la tabulation entre chaque ligne

Explications du script:

# Déclaration de la class objet i01 = lance le service inmoov
i01 = Runtime.createAndStart("i01", "InMoov")

# Initialisation du robot avec le script InitCheckup.py , je passe toutes les phases de l’initialisation (déclaration des variable , des bibliothèques etc….) et déclaration du répertoire de travail.
RuningFolder="InMoov
execfile(RuningFolder+'/system/InitCheckup.py')

Nous arrivons à ce qui nous intéresse faire bouger les doigts

Il y a deux façons de parler au robot avec la classe ear ou avec le chatbot

Nous commencerons par le plus simple, utiliser la classe ear .

Le chatbot est plus puissant mai il faut maîtriser le langage AIML. Je ferai des tutos après.

ATTENTION: pour utiliser les commandes vocales de base (il va falloir modifier une fichier de configuration dans ../InMoov/config/service_A_Chatbot.config)

;-------------- CHATBOT CONFIG -------------------------------
[MAIN]
isChatbotActivated=True
;----------------------------------- END ---------------------

  • True le Chatbot (langage AIML) est activé
    False activation les commandes vocales de base avec la classe ear.

###############################################################

# Aller plus loin, vous pouvez trouver plus de commandes vocales dans inmoovVocal / ear.addCommand
# Aller plus loin, vous pouvez trouver plus de fonctions associées dans inmoovGestures

###############################################################

# Exemple de commandes

ear.addCommand("active ton doigt", "i01.leftHand.index", "attach")
ear.addCommand("detache", "i01.leftHand", "detach")
ear.addCommand("ouvre", "python", "fingeropen")
ear.addCommand("ferme", "python", "fingerclose")
ear.addCommand("milieu", "python", "fingermiddle")

Explication de la première Commande

ear.addCommand = addCommand est une méthode qui fais parti de la classe ear

Ce qui est en parenthèses se sont les arguments passés

  • argument 1 = la phase que vous aller dire
  • argument 2 = action 1 (ici class i01 object index gauche)
  • argument 3 = action 2 (ici attache le servo )

Si vous avez compris

La ligne 2 detact tous les servomoteurs de la main gauche avec le mot detache
La ligne 3 exécute la procédure python fingeropen avec le mot ouvre


C’est quoi une procédure ?

C’est un petit morceau de programme dans lequel on peut passer des paramètres.

En langage python une procédure commence par :
def le nom de la proc() suivi de :

Exemple :
def fingeropen():

j aurai pu mettre def ouvreledoigt() :

je peut créer des variables locales dans les parenthèses.

Exemple :

defouvreledoigt(« un »,2,3, « quatre »)

  • « un » est une variable chaine de caractère passé en paramètre
  • 2 est un variable du type entier passé en paramètre

Je reviendrai plus tard sur cet aspect de paramètres.

Pour le moment mon sous programme ne fais rien, donc il faut mettre des instructions dedans.

ATTENTION il faut commencer a indenter c'est-à-dire ne pas partir de la colonne 0

Dans python l’indentation est rigoureuse si vous voulez ne pas avoir des messages à la compilation.

Utiliser soit la barre espace, soit la tabulation, mais soyez rigoureux.

Exemple :

def fingerclose():

leftHand.attach()sleep(5)
#speed = vitesse main gauche pouce index majeux ring poignet
i01.setHandSpeed("left",0.9,1,1,1,1,0.7)
i01.moveHand("left",0,0,0,0,0,20)
sleep(5)
talkBlocking("ma main est fermer")
sleep(10)
leftHand.detach()


dans l’ordre cette procédure fait :

  1. -attache les servomoteurs la main gauche
  2. - attend 5milli secondes
  3. - règle la vitesse de la main gauche le pouce à 0.9, index à 1 , majeur à 1 , ring à 1,poignet à 0.7
  4. -mais les servomoteurs de la main gauche a 0 le poignet a 20
  5. - attend 5milli secondes
  6. -dit la phrase « ma main est fermé »
  7. - attend 10 milli-secondes
  8. -détache les servomoteurs de la main gauche

    le programme devra est mis dans répertoire .../InMoov/custom

Exercice :

Dire à votre robot le mot compte
Et le faire compter sur ses doigts jusqu'à trois en disant 1 , 2 et 3
Correction à la prochaine leçon, enfin si seulement cela vous intéresse, j’attends vos retours

La seule limite de votre robot est votre imagination……..

Nota : (livre pour débuter : Apprendre à programmer avec PYTHON 3 chez EYROLLES)


Cinquième leçon :

Correction de l’exercice de la leçon numéro 4

Dans le programme principal il fallait ajouter (dans InMoov.py)

ear.addCommand("compte", "python", "compte123")

Et voici le sous programme à créer un peu plus pas (dans../InMoov/ custom/InMoov_custom.py)

lecon5

Je suis sur que tout le monde à bon.

MAINTENANT nous allons lister les autres commandes pour la tête.

i01.head.attach()à pour attacher les servos de la tête
i01.head.detach() à pour les détacher
i01.head.eyeX.moveTo(90) à déplace les yeux sens horizontale de 90 degrés
i01.head.eyeY.moveTo(20) à déplace les yeux sens verticale de 20 degrés
i01.setHeadSpeed(0.6, 0.6)à règle la vitesse des servos a 0.6 ( valeur max 1)
i01.moveHead(120,50)à déplace la tête à droite jusqu’a 120 degrés, coup à 50.
i01.moveHead(90,120)à déplace la tête à gauche jusqu'à 120 degrés, coup à 90.
i01.head.neck.moveTo(90) à déplace que le coup à 90 degrés
i01.head.rothead.moveTo(80) à déplace que la tête a 80 degrés

NE PAS OUBLIER activer la tête dans le fichier config…./InMoov/config/skeleton_head.config

[MAIN]
isHeadActivated=True

MAINTENANT nous allons lister les commandes pour les bras.

i01.leftArm.attach() attache les servomoteurs du bras gauche
i01.leftArm.detach( ) détache les servomoteurs du bras gauche
i01.rightArm.attach() attache les servomoteurs du bras droit
i01.rightArm.detach() détache les servomoteurs du bras droit
i01.setArmSpeed("left", 0.80, 0.80, 0.80, 0.85) règle la vitesses des servomoteurs du bras gauche

Les arguments :

  1. left ou right selon le bras
  2. vitesse du biceps
  3. vitesse de rotate
  4. vitesse du bras
  5. vitesse de l’omoplate

Exemple de mouvement du bras gauche:

i01.moveArm("left",30,100,180,0)

Ici bras gauche biceps a 30 degrés, rotate à 100 degrés, bras à 120 degrés et omoplate a 0

NE PAS OUBLIER activer les bras dans les fichiers de config
…./InMoov/config/skeleton_leftArm.config et skeleton_ rightHand.config

[MAIN]
isLeftArmActivated=True

MAINTENANT nous allons lister les commandes pour le torse.

i01.setTorsoSpeed(1.0, 1.0, 1.0)à vitesse de stomacktop et mids
i01.moveTorso(60,90,90)à déplacement de stomack top et mids

Autres commandes :

i01.mouth.speak("Merci") à dit le mot merci
ear.pauseListening()à arrêt d’écouter les mots

Bien vous avez déjà de quoi faire bouger votre InMoov dans tous les sens

EXERCICE AVANT LE PROCHAIN TUTO :

Écrire à scenario que l on appellera par le mot « action » et votre robot devra exécuter une suite d’ordre que vous aurez programmé (je vous laisse choisir les mouvements)

conseil :

En programmation plus on écrit de petites procédure mieux cela vaux.


SIXIÈME LEÇON :

Correction de l’exercice de la leçon numéro 5

Dans le programme principal (inmoov.py) , il fallait ajouter : 

ear.addCommand("action ", "python", "action")

Et voici un exemple de sous programme à créer un peu plus pas

action

Effectivement une procédure peut appeler d’autres procédures, ici tetedroite , tetegauche, etc……

Évidement le nom des procédures dépends de se que vous avez crée.

MAINTENANT On se dit si je continue comme cela mon programme va faire 50000 lignes et il va devenir une usine à gaz.

On va donc simplifier tout cela.

Notre ami Anthony a prévu un répertoire de travail.

……/InMoov/gestures/

Créer un fichier geste.py et un autre ordre.py

Vous avez compris que dans le premier nous aurons les scénarios des gestes et dans l’autre les ordres vocales

Exemple du contenu du fichier ordre.py

# commande vocales

ear.addCommand("ouvre", "python", "fingeropen")
ear.addCommand("ferme", "python", "fingerclose")
ear.addCommand("milieu", "python", "fingermiddle")
ear.addCommand("compte", "python", "compte123")
ear.addCommand("droite", "python", "tetedroite")
ear.addCommand("gauche", "python", "tetegauche")
ear.addCommand("regarde", "python", "yeux")
ear.addCommand("bras", "python", "bras")
ear.addCommand("biceps", "python", "biceps")
ear.addCommand("action", "python", "action")
ear.addCommand("regarde le ciel", "python", "ciel")
ear.addCommand("bonjour", "python", "bonjour")


Exemple du contenu du fichier ordre.py

def ciel():

i01.head.attach()
i01.setHeadSpeed(0.6, 0.6)
i01.head.neck.moveTo(180)
sleep(3)
talkBlocking("whaaaaaaa.. toutes ses aitoiles")
i01.head.detach()


def bras():

i01.leftArm.attach()
i01.setArmSpeed("left", 0.80, 0.80, 0.80, 0.85)
# parametres biceps , rotate, bras ,omoplate
talkBlocking("je tourne mon bras")
sleep(5)
i01.moveArm("left",30,100,180,0)
sleep(5)
talkBlocking("je leve mon bras")
sleep(5)
i01.moveArm("left",60,90,160,0)
sleep(5)
# position initiale
talkBlocking("je decend mon bras et le tourne")
sleep(3)
i01.moveArm("left",0,75,180,0)
sleep(2)
i01.leftArm.detach()


def biceps():

i01.leftArm.attach()
talkBlocking("je leve mon biceps")
sleep(5)
i01.moveArm("left",85,75,180,0)
sleep(2)
i01.leftArm.detach()


ETC………………je liste pas tous les sous programmes

MAINTENANT comment MRL va faire pour chainer tout cela

Bien dans le fichier inmoov.py nous aurons seulement les commandes principales de lancement plus l'exécution de nos programmes grâce à la commande execfile

Exemple :

# Main inmoov service
i01 = Runtime.createAndStart("i01", "InMoov")
# robot checkup and initialisation ( skeleton & services )
RuningFolder="InMoov"
execfile(RuningFolder+'/system/InitCheckup.py')
#Go further !!!! and write some code lines inside custom/InMoov_custom.py
execfile(RuningFolder+'custom/InMoov_custom.py')

#Allez plus loin! Et coder votre propre script dans un fichier séparé
execfile(RuningFolder+'InMoov/Custom/ordre.py')
execfile(RuningFolder+'InMoov/Custom/gestes.py')

Relancer votre Inmoov normalement tout doit marcher comme avant.

NOTA :
Il est possible de mettre directement vos fichiers python directement dans
…/InMoov/gestures
Sans exécuter la commande execfile au démarrage.

Au prochain tuto nous apprendrons a nous servir des instructions conditionnelles.


SEPTIÈME LEÇON :

Les fondamentaux de la programmation : L’instruction conditionnelle IF

Nous allons partir d’une idée simple, d’ailleurs en programmation on commence par écrire un programme en langage de tous les jours.

On voudrait que lorsque dit bonjour à notre robot, selon l’heure qu’il est, il nous donne des réponses différentes.

En français ça donne cela :

Quelle heure est-il
Mettre l’heure dans une variable
S’il est 12 heures alors dit bla bla bla
S’il est 16 heures alors dit ……..
S’il est 20 heures alors dit ……..
Sinon donne simplement l’heure

MAINTENANT ON VA TRADUIRE EN PYTHON

def bonjour():

# affecte l'heure système a la variable local de type entier nommer heure
heure = int(time.strftime('%H'))
# affiche le résultat dans debug python optionnel pour tester votre prog
print heure

# conditions si
if heure == 12 :

talkBlocking("bonjour jean pierre ,il est plus de " + str(heure) +" heure . il est temps de sortir les fourchettes")

if heure == 16 :

talkBlocking("bonjour jean pierre ,il est plus de " + str(heure) +" heure . c est l heure de gouter")

if heure == 20 :

talkBlocking("bonjour jean pierre ,il est plus de " + str(heure) +" heure . je vais faire la soupe")

else :

talkBlocking("bonjour jean pierre ,il est plus de " + str(heure) +"heure .")


Voici un lien pour débutant avec des exemples simple.

http://apprendre-python.com/page-apprendre-conditions-structures-conditionnelles-if-else-python-cours-debutant


Les différents comparateur

==égal à
!=différent de (fonctionne aussi avec )
>strictement supérieur à
>=supérieur ou égal à
<strictement inférieur à
<=inférieur ou égal à

si vous ne comprenez pas tout laissez des posts

NOTA : pour la fonction time.strftime('%H') il faut que la bibliothèque soit dans le fichier

…./InMoov/system/Import_Librairies.py ,  je vous rassure il y est déjà.

Mais si vous utilisez d autres fonctions il faudra parfois ajouter des bibliothèques.
(comme en langage C++ ,et autres….)



HUITIÈME LEÇON :

Les fondamentaux de la programmation : Les boucles avec instruction while
(
En française tant que..)

Tant que cette valeur n’est pas atteinte tu fait tels actions.

Par exemple :

On voudrait que notre robot se muscle et lève son biceps 10 fois de suite avec le mot exercices.
On pourrait répéter la commande 10 fois, mais c pas très élégant et cela alourdi le programme.

En français cela donne cela :

Déclare une variable locale a zéro
Attache les servomoteurs du bras
TANT QUE cette variable n’est pas égale à 10
Lève ton biceps
Fais une pose
Décents ton biceps
Fais une pause
Ajoute 1 a la variable
Fin TANT QUE
Dit je suis fatigué
Détache les servomoteurs du bras

MAINTENANT ON VA TRADUIRE EN PYTHON

def gym():

x = 0
i01.leftArm.attach()

while x < 10:

i01.moveArm("left",90,75,180,0)
sleep(5)
i01.moveArm("left",0,75,180,0)
sleep(5)
x=x+1

talkBlocking("je suis fatiguer")
i01.leftArm.detach()

Créer un programme python nommé exercices.py et copier le dans

…/InMoov/gestures

Et rajouter et la commande vocale ear.addCommand("exercices", "python", "gym") dans

                  …/InMoovt/minimal/earCommands_french.py

Voici un lien pour débutant avec des exemples simple et les différentes boucles en python.

http://apprendre-python.com/page-apprendre-boucles-python-loop


VOILA c’est la dernière leçon avec le moteur vocale EAR, vous avez tous les outils pour vous amuser avec tous les moteurs et la voix et commencer à comprendre comment tout cela fonctionne .


NEUVIÈME LEÇON :

Nous allons maintenant utiliser le CHATBOT  bien plus puissant avec le langage AIML

Notre ami Anthony à commencer un immense travail sur l’ AI en française pour notre INMOOV.
(AI , intelligence artificielle).

La première chose à faire est de dire à notre robot de changer de moteur pour la voix

Nous allons donc modifier le fichier de config service_A_Chatbot.config

Qui se trouve   …/InMoov/config/

Nous allons mettre à TRUE la variable isChatbotActivated.

;-------------- CHATBOT CONFIG -------------------------------
[MAIN]
isChatbotActivated=True
;----------------------------------- END ---------------------

Relancer le tout vous êtes maintenant avec le Chatbot

Les fichiers de travail se trouvent dans :

…/InMoov/chatbot/bots/fr/aiml

Aiml
Aimlif
Config
Maps
sets

Nous travaillerons surtout dans aiml pour comprendre, mais Anthony a déjà beaucoup codé de fichier AIML prêt à l’emploi

Nous allons partir d’un exemple pour expliquer les balises vous aller vite comprendre.

Il s’agit d un langage de balise basé sur XML (comme pour développé sous android)

Lien en anglais pour un tuto aiml

http://www.tutorialspoint.com/aiml/

Comme je suis nul en anglais je vais essayer de vous traduire ce que j’ai compris.
Exemple : 

aiml

<aiml> Entête principale d ‘un document on fermera la balise par </aiml>

<category> Définit l’unité de connaissance on fermera la balise par </category>
<pattern> Les mots que va comprendre le bot on fermera la balise par </pattern>
<template> Défini la réponse du robot on fermera la balise par </template>


Maintenant nous allons essayer de faire un exemple avec le petit programme que nous avons créé avec les tutos précédent.

Nous voulons que notre InMoov compte jusqu’à trois.

Nous avons déjà écris le script python pour cela, on va donc simplement demande au chatbot de le lancer.

Nous allons créer un fichier nommé test.aiml dans le répertoire :
…/InMoov/chatbot/bots/fr/aiml

Voici le contenu du fichier :

lecon8

Lorsque que l on dira le mot compte la réponse du bot sera d’exécuter le script python .

Que ce passe t-il entre la balise <oob> </oob> ,

En français , Exécute ma méthode (exec) du service python en passant en paramètre le script « compte123() »


Relancer le tout et maintenant votre inMoov fonction avec son Intelligence Artificielle ,vous pouvez commencer à papoter avec lui .

Dite le mot compte, normalement il devrait compter sur ses doigts.

Je vous parlerai des autres Balises si cela vous intéresse bien sur.


DIXIÈME LEÇON InMoov commande votre décodeur TV

Nous Allons commencer à mettre en pratique nos connaissances, avec des tutoriels sur la domotique et l'utilisation d'une API.

Cette fois-ci l’idée est de commander votre télévision avec votre robot InMoov.

Ce qu’ il vous faut :

Une box et un décodeur ORANGE .(car nous allons utiliser API de Orange)
Pour les autres fournisseurs d’accès en fouillant sur internet vous trouverez surement.

C’est quoi une API (Application Programming Interface) . En clair, L'API peut être résumée à une solution informatique qui permet à 2 applications de communiquer entre elles et de s'échanger mutuellement des services ou des données.

Comme à chaque fois nous devrons créer un programme python et un programme AIML pour donner les ordres vocales .

Voici le programme python qui consiste juste à envoyer une commande http.

decodeur

Explication :

Procédure décodeur en paramètre (commande) , la commande envoyer par le fichier AIML

Ligne 3 si commande est égale à 10
Ligne 4 envoie le chiffre 1 via la commande http url
Ligne 6 envoi le chiffre 0 via la commande http url
Ligne 16 sinon envoie une autre commande
Ligne 20 à 28 gestion des erreurs

Voici le fichier AIML

decodeur2

Ligne 282 balise pattern (écoute le mot programme suivi de n importe quoi)
Ligne 284 variable chaine initialisée
286 à 318 balise condition de la variable chaine (le numéro de la chaine) Thin réponds si compris.
319 à325 exécute la procédure décodeur en paramètre la variable chaine

Pour changer de chaine dire “PROGRAMME X”
  ou dire “PROGRAMME SUIVANT” “PROGRAMME PRÉCÉDENT”

Pour lancer la Vidéo à la demande dire “PROGRAMME VIDÉO”

AUTRE COMMANDE
– ARRÊTE LE DÉCODEUR
– DÉMARRE LE DÉCODEUR
– AUGMENTE LE SON
– DIMINUE LE SON
– COUPE LE SON
POUR NAVIGUER DANS LES MENUS
– SOURIS EN HAUT
– SOURIS EN BAS
– SOURIS A GAUCHE
– SOURIS A DROITE
– SOURIS VALIDE (ok)
– SOURIS RETOUR
– SOURIS MENU

Bien sur vous pouvez modifier le nom des commandes en modifiant le fichier AIML

Le code python sera à mettre dans le fichier InMoov_custom.py

Le code AIML dans le répertoire …/InMoov/chatbot/bots/fr/aiml


ONZIÈME LEÇON InMoov gère votre planning

Dans se tutoriel nous allons voir l'utilisation d'une table en python et de la lecture d'un fichier pour en extraire les informations.

L’idée notre robot nous annonce notre planning du jour J et J + 1.
Pour cela nous allons lire un fichier EXCEL .
Nous aurions pu utiliser la bibliothèque xrld (spécial excel pour python) mais malheureusement elle n’est pas implémenté dans MRL .

Nous allons donc utiliser les bibliothèques time et csv qui sont déjà implémenté .

Nous devrons donc sauvegarder notre planning EXCEL au format csv  .
CI joint photo à quoi ressemble le fichier EXCEL

plannig exel

Un fois créer copier le fichier à la racine de votre disque (exemple d:)

Voici le script python

dans la variable fname mettre le chemin d’accès de votre fichier planning.csv
le reste du code est commenté , cela reste un petit script
on pourrait utiliser des taches de google mais c est un peu plus compliqué …..

  • Lignes 763 à 767 déclaration des tables et des variables 

C'est quoi une table ou tableau (python appel cela liste)? 

explication d une liste

  • Lignes 769 à 779 lecture du fichier Excel et remplissage des tables
  • Lignes 781 à 789 le robot du annonce les contenu de la table du jour J
  • Ligne 791 à 798 Le robot du annonce les contenu de la table du jour J + 1
  • Ligne 802 fermeture du fichier Excel (ne pas laisser des fichier ouvert en écriture)

codeplanning

Maintenant le fichier AIML

Donc vous dite le mot PLANNING ou DONNE MOI MON PLANNING et InMOOV vous lira votre planning EXCEL. Les fichiers python et aim sont à mettre aux mêmes endroit .
Bonne programmation

planning_aiml


DOUZIÈME LEÇON InMoov vous tire une grille de LOTO

Dans ce tutoriel , nous allons nous entrainer avec les boucles FOR et WHILE et découvrir la fonction RANDOM.

Le but du programme est de tirer au hasard 5 numéros et un numéro complémentaire avec la fonction random de python.

  • Lignes 220 à 222 déclaration des tables ligne 220 ont rempli de nombres aléatoires.
    Ligne 224 à 229 ont boucle dans table pour voir si il y a des doublons
    Ligne 230 à 247 si doublon on refait un tirage
    Ligne 249 on tri la table
    Ligne 250 à 255 InMoov nous annonces le résultat
    Ligne 256 le numéro complémentaire .

lotoprg

Maintenant le fichier AIML

Donc vous dite la phrase numéro du loto ou donne moi les numéros du loto et InMOOV vous lira une grille de loto à jouer . Les fichiers python et aim sont à mettre aux mêmes endroit .

lotoaiml


TREIZIÈME LEÇON InMoov souhaite les anniversaires et les saints .

Pour ce tutoriel nous allons voir comment utiliser un dictionnaire en python . Le dictionnaire ressemble à une petite base de données .

C'est quoi une base de données  

Une base de données  est une collection d’informations organisées afin d’être facilement consultables .  Les données sont organisées en lignes, colonnes et tableaux. Elles sont indexées afin de pouvoir facilement trouver les informations .

Les plus connues sont (MySQL , DBASE, OPEN office, Oracle etc .....) 

Dans notre tutoriel nous allons donc créer deux dictionnaire, un pour les anniversaires l'autre pour les saints .

lien python sur les dictionnaires : http://apprendre-python.com/page-apprendre-dictionnaire-python

exemple :
data = {"name": "Olivier", "age": 30}

  1. data = le nom du dico
  2. name = la clés de recherche (les : sépare la clés de la donnée)
  3. Olivier = la donnée stockée (séparer les datas par une virgule )

Voici le code du programme Python :

anniv

  • Ligne 3 défini la date en français 
  • Ligne 4 annonce la date 
  • Lignes 5 à 9 déclare des variables comme clés de recherche 
  • Lignes 10 à 26 déclaration des 2 bases de données .(avec leurs données)
  • Lignes 28 et 29 variable pour anniversaire jour J , jour J-1 et jour J-7 (inmoov nous rappel un anniversaire 7 jours avant)
  • Ligne 31 à 35 on cherche la date J-7  dans la BDD si pas vide on annonce l'anniversaire
  • Lignes 36 à 40 idem pour jour J-1
  • Lignes 41 à 45 idem pour le jour J
  • Lignes 47 à 48 Si pas de date anniversaire annonce le saint du jour

Pour le fichier AIML  je laisse à votre imagination créer la phrase qui lancera le fichier Python.


QUATORZIÈME LEÇON ENVOYER UN MAIL

Dans ce tutoriel nous allons utiliser la protocole SMTP
(send mail transfert protocol).

Pour commencer nous allons ajouter les bibliothèques pour l’envoi de mail . Le Python comme beaucoup de langages utilise des bibliothèques (modules écrit en C) . Elles permettent d'avoir des fonctions toutes faites.

Donc nous allons ajouter des bibliothèques pour envoyer des mails .
il faudra modifier le fichier :
…/InMoov/system/Import_Librairies.py (Ce fichier est lancé au démarrage de InMoov)

Editer le fichier avec NotePAD++ et

ajouter cela en fin du fichier :

biblio

Voici le code python à mettre dans le fichier InMoov_custom.py

Première procédure (ligne 500)mailsend en paramètre amis (le nom fourni pour le fichier AIML)

mailprg

Ligne 504 création d'un dictionnaire des amis (vous savez déjà faire)
Ligne 506 à 517 test si mon ami existe dans le dictionnaire .
Si ami inconnu dans le dico ==> message inconnu sinon exécute le fichier AIML SYSMAIL
Ligne 519 à 526 gestion des erreurs .

Maintenant voici la deuxième procédure qui traite l'envoi du mail .

J'utilise le serveur SMTP de ORANGE , il vous faudra regarder sur internet le nom du serveur SMTP de votre fournisseur internet.
Lignes 531 à 545 variables des entêtes du message
Ligne 532 votre adresse de messagerie (toto@wanadoo.fr par exemple)
Ligne 550 adresse de votre serveur SMTP avec le port utilisé.
Ligne 552 le mot de passe de votre compte de messagerie
Ligne 554 envoi du mail
Ligne 557 à 558 fermeture des fichiers
Lignes 560 à 568 gestion des erreurs

mailprg2

Le code AIML dans le répertoire …/InMoov/chatbot/bots/fr/aiml

Pour envoyer un mail dire ENVOYER UN MAIL A JEAN PIERRE par exemple
Le fichier AIML exécute la procédure "maisend" avec le nom du destinataire en paramètre .

Si le destinataire existe SYSMAIL exécute la procédure envoi en paramètre le texte dicté.

mail1


QUINZIÈME LEÇON Lire les mails

Voici un programme pour lire les mails en provenance de vos amis . Nous allons mettre en pratique l' utilisation des variables , des boucles du dictionnaire et découvrir le protocole IMAP   (Interactive Message Access Protocol)

Pour utiliser le protocole IMAP il faut ajouter la bibliothèque imaplib ( nous l'avons fait au tutoriel précédent) .

Je passe le tuto ou placé le programme et le fichier AIML (voir les TUTO précédents)

Pour lire les mails , il faudra dire : (lire les messages de ……)

les messages au format texte sont seulement lus , les autres sont ignorés
la fonction vous donne le nombres de messages en attente et vous lira tous les mails de votre ami (uniquement au format texte)
Pour les photos envoyées depuis INMOOV la fonction vous averti qu une photo est en attente.

Voici le fichier PYTHON :

mail1

mail2

Ligne 4 définition du dictionnaire la clés c'est le prénom  les données From suivi du nom de la bal
Lignes 6 et 7 si pas trouvé le prénom message "personne inconnu au bataillon"
Lignes 9 à 16 SINON déclaration des variables pour le protocole IMAP (ici celui ORANGE)
Lignes 17 à 25 recherche message de expéditeur , supprime les espace ,calcule le nombre de messages.
Lignes 26 à 35 première boucle pour lire le contenu et le convertir en texte
Lignes 36 à 44 deuxième boucle pour les pièces jointes  
Ligne 41 dicte le message 
Lignes 46 à la fin fermeture du protocole IMAP gestion des erreurs
Ci dessous le fichier AIML :

mail3


SEIZIÈME LEÇON

En construction ..............