Nao with cmake files

This project and helloworld_static have been created to do the same purpose than the tutorial written in README.md which you can find in /nao_robot.

The difference is nao_turorial use directly the compiler gcc with the necessary flags to compile, and helloworld_static and helloworld are doing the same but using CMake.

helloworld_static is for having all the libraries static and helloworld has only static libgcc libc++ and rapp.

In this example we'll run an RAPP API project in NAO robot. Only using RAPP libraries

Code

In this example we are going to use the code of available_services example, because it's the easiest one.

#include <rapp/cloud/service_controller.hpp>
#include <rapp/cloud/available_services.hpp>
#include <iostream>
/*
 * \brief Example to show how available_services works
 */
int main(int argc, char* argv[])
{

    rapp::cloud::platform info = {"155.207.19.229", "9001", "rapp_token"}; 
    rapp::cloud::service_controller ctrl(info);

    auto cb = [](std::vector<std::pair<std::string, std::string>> services) {
         std::cout << "available services: " << std::endl;
         for (const auto & pair : services) {
            std::cout << pair.first << " " << pair.second << std::endl;
         }
     };

    ctrl.make_call<rapp::cloud::available_services>(cb);
    return 0;
}

This is going to show all the services that you can use with RAPP API.

CMakeLists

Like we said before, we are going to use only RAPP libraries, so this file will be similar to available_services example.

cmake_minimum_required(VERSION 2.6)

project(helloworld)

add_executable(helloworld source/helloworld.cpp)

set(LIBRARY_PATH ${LIBRARY_PATH} /usr/local/lib)

find_package(OpenSSL REQUIRED)
find_package(Boost COMPONENTS system REQUIRED)
find_package(Threads REQUIRED)

set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
find_library(RAPP_LIBRARY NAMES rapp REQUIRED)
message(STATUS "${RAPP_LIBRARY}")

set(RAPP_LIBRARIES ${RAPP_LIBRARY} 
                   ${OPENSSL_LIBRARIES} 
                   ${Boost_LIBRARIES}
                   ${CMAKE_THREAD_LIBS_INIT})

target_link_libraries(helloworld ${RAPP_LIBRARIES})

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}-static-libstdc++ -static-libgcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -Wall -fPIC -Os -s -O2 -march=atom -mtune=atom -mfpmath=sse")

You could see that we added one line before trying to find RAPP library:

set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")

With that line you are looking for the static RAPP library. This is to avoid install RAPP library in NAO. The rest of the examples about NAO robot are going to use always the static one.

And the last difference is the CMAKE_CXX_FLAGS. Besides the type of c++ that we are going to use we added some optimization flags especially for NAO which is based on Intel Atom processor. Availables since gcc 4.5

If you need more information about the CMakeLists.txt you can see the helloworld tutorial in the begginers tutorial folder.

Build and Run

Now we have to save and close the files, and we go to the terminal. In there we'll do the next steps:

mkdir build
cd build
cmake ..
make

After all, you'll have your executable in build/ folder.

Finally, we have to move/copy our executable to NAO robot. The easy way to do this is using ssh when you are connected to your robot:

scp path/to/your/executable nao@ip_of_your_NAO:/path/to/folder/you/need

You'll have to change the values of the paths and IP of the robot.

Now you can run your example in NAO and see all the services that RAPP offers.