# SoftBank Robotics documentation What's new in NAOqi 2.8?

# Moving NAO’s head

<< return to C++ examples

The aim of this example is to show how to move NAO using a proxy to ALMotion. This particular example will make NAO’s head move right and left.

The whole example is available here: `movehead.zip`

## Source file:

`movehead.cpp`

    /**
    * Copyright (c) 2011 Aldebaran Robotics. All Rights Reserved
    *
    * \file movehead.cpp
    * \brief Move NAO's head.
    *
    * A simple example showing how to move NAO's head by using ALMotionProxy.
    * This example will make NAO turn its head left and right slowly.
    * We use here a specialized proxy to ALMotion.
    */

    #include <iostream>
    #include <alerror/alerror.h>
    #include <alproxies/almotionproxy.h>

    int main(int argc, char* argv[]) {

      if(argc != 2)
      {
        std::cerr << "Wrong number of arguments!" << std::endl;
        std::cerr << "Usage: movehead NAO_IP" << std::endl;
        exit(2);
      }

      /** The name of the joint to be moved. */
      const AL::ALValue jointName = "HeadYaw";

      try {
        /** Create a ALMotionProxy to call the methods to move NAO's head.
        * Arguments for the constructor are:
        * - IP adress of the robot
        * - port on which NAOqi is listening, by default 9559
        */
        AL::ALMotionProxy motion(argv[1], 9559);

        /** Make sure the head is stiff to be able to move it.
        * To do so, make the stiffness go to the maximum in one second.
        */
        /** Target stiffness. */
        AL::ALValue stiffness = 1.0f;
        /** Time (in seconds) to reach the target. */
        AL::ALValue time = 1.0f;
        /** Call the stiffness interpolation method. */
        motion.stiffnessInterpolation(jointName, stiffness, time);

        /** Set the target angle list, in radians. */
        AL::ALValue targetAngles = AL::ALValue::array(-1.5f, 1.5f, 0.0f);
        /** Set the corresponding time lists, in seconds. */
        AL::ALValue targetTimes = AL::ALValue::array(3.0f, 6.0f, 9.0f);
        /** Specify that the desired angles are absolute. */
        bool isAbsolute = true;

        /** Call the angle interpolation method. The joint will reach the
        * desired angles at the desired times.
        */
        motion.angleInterpolation(jointName, targetAngles, targetTimes, isAbsolute);

        /** Remove the stiffness on the head. */
        stiffness = 0.0f;
        time = 1.0f;
        motion.stiffnessInterpolation(jointName, stiffness, time);

      }
      catch (const AL::ALError& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
        exit(1);
      }
      exit(0);
    }

## CMakeLists.txt:

The corresponding CMakeLists.txt file is the following

`CMakeLists.txt`

    ##
    # Copyright (c) 2011 Aldebaran Robotics. All Rights Reserved.

    cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
    # Give a name to the project.
    project(movehead)
    # This include enable you to use our CMake framework
    find_package(qibuild)

    # Create an executable named movehead,
    # with the source file : movehead.cpp
    qi_create_bin(movehead movehead.cpp)

    # Tell CMake that movehead depends on ALCOMMON and ALPROXIES
    # This will set the libraries to link movehead with,
    # the include paths, and so on
    qi_use_lib(movehead ALCOMMON ALPROXIES)

Glossary Site map Index Support Contact Legal Notices