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
/**
* 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);
}
The corresponding CMakeLists.txt file is the following
##
# 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.
# This will set the libraries to link movehead with,
# the include paths, and so on
qi_use_lib(movehead ALCOMMON)