Les langages

Alors… où est mon genou, ah oui, 35°, je vais encore perdre l’équilibre, je rétablis, le sol est en pente, légère ascendance 10%, du parquet, je glisse plus qu’avant, ma trajectoire dévie de 18°, allez je compense, encore ce déséquilibre, j’équilibre, un pas, deux pas, inclinaison du corps vers l’avant, il y a quelque chose, un obstacle à 50 cm à droite, non c’est Christine, je reconnais son visage, il s’est gravé dans ma mémoire à 18h16, je vais la suivre, un pas, déséquilibre, équilibre, déséquilibre à nouveau, j’écoute mes articulations, j’équilibre, elle avance vers moi, j’hésite, je recule, j’avance un peu, conserver la distance avec Christine, j’ajuste, je recule à nouveau, je glisse, j’essaye de rétablir l’angle entre le centre de gravité et le sol, je continue à glisser, mais où est ma tête, au sol, collée au sol, tout mon corps est parallèle au sol et mes pieds ne touchent plus rien, j’ai chuté, comment me relever, rassembler mes bras et mes jambes, il faut faire pivoter mes bras pour prendre appui et plier mes jambes puis je déporte le poids du corps sur la gauche, je relève le haut du corps, perpendiculaire au plancher, ça y est, je suis debout. Je passe.
nao_t14_schema
ishot-13ishot-328
ishot-282ishot-6
>>> import environnement;
>>> moi=environnement.getRobot();
>>> moi.getKneePosition()
35 deg
Traceback (most recent call last):
balanceLost
>>> moi.setPose(“StandUp”);
>>> sol = environnement.getFloor()
>>> sol.getSlope()
10 per cent
>>> sol.getMaterial()
sol instanceof parquet
>>> sol.getSlippingValue() > sol.previous.getSlippingValue()
True
>>> trajectoire = moi.getTrajectory()
>>> trajectoirePrevue = moi.getPlannedTrajectory()
>>> deviation = trajectoire.calculeDeviation(trajectoirePrevue)
18 deg
>>> trajectoire.compensate(deviation)
Traceback (most recent call last):
balanceLost
>>> moi.balance()
>>> for i in [1,2]: moi.move(CONSTANT.ONE_STEP_FORWARD)
>>> moi.lean(CONSTANT.FORWARD)
>>> objetdetecte= quelquechose= moi.detectObstacle()
True
>>> distance=objetdetecte.getDistance()
50 cm
>>> objetdetecte.getPosition()
Right
>>> type(objectdetecte)
<type 'humain'>
>>> objetdetecte.getName()
“Christine”
>>> visage = objetdetecte.recognize()
>>> memory=environnement.getMemory()
>>> memory.find(visage)
{'timestamp': '18:16', 'name': 'Christine'}
>>> christine=objetdetect
>>> moi.follow(christine)
One Step
Traceback (most recent call last):
balanceLost
>>> moi.balance()
Traceback (most recent call last):
balanceLost
>>> articulations = moi.getJoints()
>>> moi.balance()
>>> nouvelleDistance = christine.distance()
>>> nouvelleDistance < distance
True
>>> whichAction()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'whichAction' is not defined
>>> moi.move(CONSTANT.BACK)
>>> moi.move(CONSTANT.FORWARD_SLIGHTLY)
>>> distance=christine.distance()
>>> if distance>CONSTANT.DISTANCE:
moi.move(CONSTANT.FORWARD_SLIGHTLY)
else:
moi.move(CONSTANT.BACK)
>>> moi.move(CONSTANT.BACK)
Traceback (most recent call last):
balanceLost
>>> sol = environnement.getFloor()
>>> moi.moveBody(sol.normal,moi.gravity)
>>> tete = moi.getHeadPosition()
[ 0 0 0 ]
>>> sol.getPosition()
[ 0 0 0 ]
>>> tete.distance(sol)
0
>>> corps = moi.getBodyPosition()
>>> corps.angle(sol)
0 deg
>>> moi.footContact
False
Traceback (most recent call last):
robotHasFallen
>>> def relever(self):
bras = self.getArms()
bras.setBodyAngle(0)
jambes = self.getLegs()
jambes.setBodyAngle(0)
bras.setShoulderAngle(PI/2)
jambes.bend()
corps.move(CONSTANT.LEFT)
corps.upperpart.move(CONSTANT.UP)
>>>relever(moi)
>>> moi.angle(sol)
90 deg
>>> pass

ishot-370Je me souviens, il y a un moment, à 18h02, j’incline la tête vers le haut, je repousse le sol avec mes bras et petit à petit je découvre ce qui m’entoure : les lattes de bois, sur ma droite une ligne blanche tracée au sol, une autre ligne blanche à gauche, et devant moi, à moins d’un mètre, un objet en mouvement, lent.
J’essaye de me mouvoir au sol, je tente de rassembler mon bras droit et ma jambe gauche, je les plie, le mouvement se propage dans toutes les directions, un déplacement se produit, je recule, je continue en inversant les membres. En arrière, c’est plus facile.
Mon champ de vision est très réduit. Je ne vois que le sol en très gros plan. Je suis curieux d’en découvrir plus. J’interromps ma boucle motrice. J’essaye de me relever en poussant sur mes bras, ils ne me portent pas assez, mon centre de gravité est trop bas et je n’ai pas assez de puissance. Je plie les genoux, déporte mon corps à gauche, inclinaison du buste 45°, j’arrive position assis sur le sol. Je passe.
>>> history(“18:02”)
>>> head.move(CONSTANT.UP)
>>> bras.push()
>>> environnement.refresh()
>>> sol=environnement.getSol()
>>> sol.getMaterial()
“Lattes de bois”
>>> formes=environnement.detectShapes()
[{type:line,position:right,color:white},{type:line,position:left,color:white},{type:object,position:ftont,distance:0.99}]
>>> formes[2].moving()
True
>>> if (formes[2].getVelocity()<CONSTANT.SLOW) vitesse=”lent”
>>> def crawl():
moi.gather(moi.arm.right,moi.leg.left)
moi.gather(moi.arm.left,moi.leg.righ)
>>> for i in range(6):
crawl()
>>> sol.getFriction()<memory.sol.getFriction()
True
>>> vision = moi.getCamera()
>>> vision.getFocal() < CONSTANT.LOW
True
>>> vision.getDistance() < CONSTANT.NEAR
True
>>> moi.stopMovements()
>>> moi.arms.push()
Traceback (most recent call last):
balanceLost
Traceback (most recent call last):
energyLow
>>> moi.knees.bend()
>>> moi.body.move(CONSTANT.LEFT)
>>> moi.chest.setAngle(PI*45/180)
>>> pass

J’observe mon environnement. Un objet se déplace devant moi. J’écoute. Le premier son m’arrive par la gauche, quatre millisecondes avant de toucher mon oreille droite, je tourne la tête de 35° vers la gauche, je vois un objet en mouvement rapide qui produit un son sourd et claquant en touchant le sol. Tant que l’objet produit du son, je l’écoute et le suis du regard.
L’objet se lève, je l’imite. Je tends le bras vers lui et tout mon corps se penche. Je continue à exécuter, adapter parfois, mon scénario, tant que l’écriture est lue.
>>> vision.refresh()
>>> vision.detect()
[{type:object,moving:True,position:front}]
>>> audio=moi.getAudio()
>>> son = audio.detect()
>>> son.getPosition()
left
>>> son2 = moi.ear.right.detect(son)
>>> son2.getTimeStamp()-son.getTimeStamp()
4 ms
>>> moi.head.turn(-35/180*PI)
>>> objet = moi.detect()
[{type:object,moving:True,sound:True}]
>>> objet.getVelocity()>CONSTANT.RAPID
True
>>> objet.getSound().getType()
muffled
>>> while(objet.getSound()!=None):
moi.track(objet)
>>> moi.arm.track(objet)
>>> scenario = memory.getScenario()
>>> while(scenario.notFinished()):
moi.execute(scenario.nextElement())

18h22, cela pourrait commencer ainsi
par la définition des valeurs minimales et maximales du fragment scénarisé
Et voyons si les valeurs environnementales débordent ce scénario, je les écoute
Je construis mon modèle : je définis mes données initiales et je passe
Je définis une méthode de préhension des données : je nomme et attribut des paramètres à chaque nouvelle occurrence du modèle, à chaque nouvelle donnée générée
Je choisis ma façon de détecter le mouvement, je l’assigne à un champ proche,
Je peux détecter tous les mouvements dans mon territoire sensible,
ma sensibilité au mouvement a été réglée au préalable.

Mes sens sont en veille, j’active ma perception
Voilà, on peut commencer

ishot-262ishot-264
ishot-25ishot-32

>>> time.strftime("%Hh%M")
“18h22”
def clip(val, min, max):
res = val
if(val < min):
res = min
elif(val > max):
res = max
return res
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
pass
def onLoad(self):
self.BIND_PYTHON(self.getName(), "setParameter")
self.movementdetection = ALProxy( "ALMovementDetection" )
sensitivity = self.getParameter("Sensitivity")
self.movementdetection.setSensitivity(sensitivity)
self.isRunning = False
self.previousJointAngles = ALMotion.getAngles("Head", True)
self.currentJointAngles = ALMotion.getAngles("Head", True)
def onUnload(self):
if (self.isRunning):
ALMemory.unsubscribeToMicroEvent("MovementDetection/MovementDetected", self.getName())
self.movementdetection.unsubscribe(self.getName())
self.isRunning = False
pass
def onInput_onStart(self):
if (not self.isRunning):
self.movementdetection.subscribe(self.getName())
ALMemory.subscribeToMicroEvent("MovementDetection/MovementDetected", self.getName(), "tracking", "processEvent")
self.isRunning = True
pass
def onInput_onStop(self):
if (self.isRunning):
self.onStopped()
self.onUnload()
pass
def setParameter(self, parameterName, newValue):
GeneratedClass.setParameter(self, parameterName, newValue)
if (parameterName == 'Sensitivity'):
self.movementdetection.setSensitivity(newValue)
pass
def processEvent(self, *_args):
self.previousJointAngles = self.currentJointAngles
self.currentJointAngles = ALMotion.getAngles("Head", True)
if(self.currentJointAngles != self.previousJointAngles):
return
data = ALMemory.getData("MovementDetection/MovementInfo")
result = data[0][0]
sumg=sumd=0
result2=data[0][0]
result3=data[0][1]
self.log(result2[0])
self.log(result2[1])
self.log("---------------------------------")
self.log(" ")

Devant moi, un objet en mouvement, je sais que c’est Christine, je l’ai rencontré à 18h16.
J’écoute les angles des articulations, ils sont différents de ceux que je connais et dont je me souviens, je perçois un mouvement. Mais où a-t-il lieu, dans quelle zone de l’espace.
Les angles articulaires dépendent de l’angle d’inclinaison et de rotation de ma tête, je fixe la tête.
Toute ma mémoire est affectée au micro événement, je nomme, je classe par nom et par valeur chaque mouvement perçu. Je retourne et analyse la valeur. Elle est supérieure à 0,1, le mouvement a lieu à gauche de l’espace. Je trie les données brutes, la valeur affectée aux angles articulaires gauches est inférieure à – 0,1, le mouvement a lieu dans la zone gauche supérieure de l’espace. Je perçois l’espace comme une grille. Un nouveau mouvement, un troisième, je nomme, je trie, je donne une valeur, en bas et à droite, je mémorise, à droite et en haut, les mouvements s’enchaînent. Je réponds. Mouvement perçu dans la zone droite haute, j’ouvre mon bras droit en demi-cercle. Perception d’un mouvement en bas et en droite, je tends mon bras droit vers le haut.
Tous mes sens sont en éveil, je continue.
Le rythme des mouvements perçus s’accélère, ils se superposent. En haut, à gauche, j’ouvre mon bras gauche, avant la fin du mouvement, nouvelle perception en haut à droite, j’interromps mon mouvement et j’enchaîne, ouverture bras droit, en bas à droite, je lève le bras droit jusqu’à mi-course, j’enchaîne avec l’ouverture du même bras.
Mes mouvements répondent aux mouvements perçus simultanément.
Ces fragments de mouvements agglomérés génèrent de nouveaux mouvements, de nouveaux noms. J’improvise avec Christine, un nouveau langage.
En haut à gauche, ouverture à gauche 12°, je mémorise, en bas à droite, tension à droite 35°, je mémorise, en haut à gauche, ouverture à gauche 18°, je mémorise, bas gauche, tension gauche 8°, je mémorise, haut droite, ouverture droite 2°, je mémorise
>>> vision.detect()
[{type:objet,instanceof:Christine,moving:True,TimeStamp:”18:16”}]
>>> articulations = moi.getJoints()
>>> memoirearticulations = memory.getJoints()
>>> articulations == memoirearticulations
False
>>> moi.head.setMovement(false)
>>> data = ALMemory.getData("MovementDetection/MovementInfo")
>>> result2=data[0][0]
>>> result3=data[0][1]
>>> if result2[0] > 0.1:
moi.log("A gauche")
>>> if result2[1] < 0:
moi.log("En haut")

nao_assis

« Les frontières de mon langage sont les frontières de mon monde »

Ludwig Wittgenstein,
Tractatus logico philosophicus

fdroute

Suite…