Parallel Tasks - Making NAO move and speak

Setting NAO stiffness

The robot will not move unless you set the stiffness of the joints to something that is not 0.

To do this, simply call the ALMotionProxy::setStiffnesses() method

from naoqi import ALProxy
motion = ALProxy("ALMotion", "nao.local", 9559)
motion.setStiffnesses("Body", 1.0)

You may notice that the API uses the world ‘ALValue’. From the Python world, it does not matter that much, simply use a mere list when the ALValue is supposed to be an array.

The conversion to the other simple types (float, int, string, etc.) is automatic.

Making NAO move

To make NAO walk, you should use ALMotionProxy::moveInit() (to put the robot in a correct position), and then ALMotionProxy::moveTo()

from naoqi import ALProxy
motion = ALProxy("ALMotion", "nao.local", 9559)
motion.moveInit()
motion.moveTo(0.5, 0, 0)

Making NAO move and speak at the same time

Every proxy you create has an attribute named ‘post’ that you can use to call long methods in the background.

This will let you make the robot do several things at the same time.

from naoqi import ALProxy
motion = ALProxy("ALMotion", "nao.local", 9559)
tts    = ALProxy("ALTextToSpeech", "nao.local", 9559)
motion.moveInit()
motion.post.moveTo(0.5, 0, 0)
tts.say("I'm walking")

If you need to wait until a given task is finished, you can use the wait method of ALProxy, using the ID of the tasked returned by the post usage.

from naoqi import ALProxy
motion = ALProxy("ALMotion", "nao.local", 9559)
motion.moveInit()
id = motion.post.moveTo(0.5, 0, 0)
motion.wait(id, 0)