NAOqi Motion

Overview | API | Advanced

What it does

The ALMotion module provides methods which facilitate making NAO move.
It contains four major groups of methods for controlling the:
  • joint stiffness (basically motor On-Off): see Stiffness control,
  • joint position (interpolation, reactive control): see Joint control,
  • walk (distance and velocity control, world position and so on): see Locomotion control,
  • robot effector in the Cartesian space (inverse kinematics, whole body constraints): see Cartesian control.

The ALMotion module implements also some “reflexes” such as Self-collision avoidance, Fall manager and Smart Stiffness.

This module gives also access to useful information about the robot hardware, such as the number of joints, their name, limits, the available sensors and so on. See General tools section.

How it works

ALMotion runs at 50Hz (cycle of 20ms).

In ALMotion, every time you call an API to request a motion, a “motion task” is created to handle the job. See Motion task to learn how to manage these tasks.

The reflexes are activated by default and could modify your robot’s behavior. More specifically, they will alter the motion to avoid self collision (see Self-collision avoidance), or adjust the stiffness to spare power when the robot is not moving (see Smart Stiffness) or trigger a specific task when a fall is detected (see Fall manager).

Performance and Limitations


ALMotion is a core module. As it manages some reflexes and updates the model every cycle, the module consumes a constant CPU. This consumption could increase during special tasks like walk.

The table below gives you some hints of ALMotion CPU consumption.

Task \ Processor Geode Atom (NAO V4)
update Model 8% 3%
walking 25% 10.8%

Getting Started

Essential information to deal with ALMotion:

Axis definition

The X axis is positive toward NAO’s front, the Y from right to left and the Z is vertical.


SI - International System of Unit

The ALMotion module use the SI - International System of Units (meters, second, radian...).

How to name joints and body parts

Depending on the method chosen, ALMotion requires to name joints, group of joints or a body part.


This overview points out the relationship between the different names and specifies which model includes which joint:

  • Body = all Joints + the 2 Actuators added at the end of the arm links
  • Chain = Joints + Actuators
  • Effectors = all Chain names + Torso

For further details, see:

Advanced User

If you are familiar with the ALMotion definition and you want to go further creating advanced behavior in C++ like a new reflex, a better object tracker or use at the same time DCM module and ALMotion see Motion - advanced section.