NAOqi (ver1 계) 용 독자 모듈의 작성
소개
모듈 만들기
병아리 생성
$ qisrc create HelloWorldModule
New project initialized in /path/to/project/HelloWorldModule
$ cd HelloWorldModule
코드 수정
기본적으로는 문서의 Example: HelloWorld module 과 같습니다만, 원의 샘플로부터 (급하게는) 불필요한 부분을 한층 더 깎은 것이 되어 있습니다.
helloworld.cpp (새로 만들기)
helloworld.cpp
#include <iostream>
#include <alcommon/albroker.h>
#include <alproxies/altexttospeechproxy.h>
#include "helloworld.h"
using namespace AL;
HelloWorld::HelloWorld(boost::shared_ptr<ALBroker> broker, const std::string& name):
ALModule(broker, name)
{
setModuleDescription("HelloWorld module");
functionName("sayHello", getName(), "Say hello to the world");
BIND_METHOD(HelloWorld::sayHello);
}
HelloWorld::~HelloWorld()
{
}
void HelloWorld::init()
{
std::cout << "HelloWorld: init" << std::endl;
}
void HelloWorld::sayHello()
{
const std::string phraseToSay("HelloWorld");
std::cout << "HelloWorld: Saying hello to the console ..." << std::endl;
std::cout << "HelloWorld: " << phraseToSay << std::endl;
std::cout << "HelloWorld: Calling say method of ALTextToSpeech module ..." << std::endl;
ALTextToSpeechProxy tts(getParentBroker());
tts.say(phraseToSay);
std::cout << "HelloWorld: Done!" << std::endl;
}
helloworld.h (새로 만들기)
helloworld.h
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
#include <boost/shared_ptr.hpp>
#include <alcommon/almodule.h>
namespace AL
{
class ALBroker;
}
class HelloWorld : public AL::ALModule
{
public:
HelloWorld(boost::shared_ptr<AL::ALBroker> pBroker, const std::string& pName);
virtual ~HelloWorld();
virtual void init();
void sayHello();
};
#endif // HELLOWORLD_H
main.cpp
main.cpp
#include <alcommon/albroker.h>
#include <alcommon/albrokermanager.h>
#include "helloworld.h"
extern "C"
{
int _createModule(boost::shared_ptr<AL::ALBroker> pBroker)
{
AL::ALBrokerManager::setInstance(pBroker->fBrokerManager.lock());
AL::ALBrokerManager::getInstance()->addBroker(pBroker);
AL::ALModule::createModule<HelloWorld>(pBroker, "HelloWorldModule");
return 0;
}
int _closeModule()
{
return 0;
}
}
CMakeLists.txt
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(HelloWorldModule)
find_package(qibuild)
set(CMAKE_CXX_FLAGS "-stdlib=libstdc++")
set(_srcs
helloworld.cpp
helloworld.h
main.cpp
)
qi_create_lib(HelloWorldModule SHARED ${_srcs} SUBFOLDER naoqi)
qi_use_lib(HelloWorldModule ALCOMMON)
configure & make
$ qitoolchain create mytoolchain /path/to/sdk/toolchain.xml
mytoolchain already exists, updating without removing
Updating toolchain mytoolchain with feed: /path/to/sdk/toolchain.xml
Now try using
qibuild configure -c mytoolchain
qibuild make -c mytoolchain
$ qibuild configure -c mytoolchain
Current build worktree: /path/to/project
Using toolchain: mytoolchain
Build type: Debug
* (1/1) Configuring HelloWorldModule
-- The C compiler identification is AppleClang 6.0.0.6000056
-- The CXX compiler identification is AppleClang 6.0.0.6000056
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Using qibuild 3.7
-- Library: HelloWorldModule
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/project/HelloWorldModule/build-mytoolchain
$ qibuild make -c mytoolchain
Current build worktree: /path/to/project
Using toolchain: mytoolchain
Build type: Debug
* (1/1) Building HelloWorldModule
Scanning dependencies of target HelloWorldModule
[ 50%] Building CXX object CMakeFiles/HelloWorldModule.dir/helloworld.cpp.o
[100%] Building CXX object CMakeFiles/HelloWorldModule.dir/main.cpp.o
Linking CXX shared library sdk/lib/naoqi/libHelloWorldModule.dylib
[100%] Built target HelloWorldModule
libHelloWorldModule.dylib가 완료되었습니다.
가상 로봇에 모듈 설치
설치 대상 경로 정보
처음 쓴 것처럼 이번 확인에는 Webots를 사용하므로 먼저 런타임 경로를 설정해 둡니다.
export NAOQI_RUNTIME=/path/to/Webots for NAO/resources/projects/robots/nao/aldebaran/naoqi-runtime
생성 된 모듈을 가상 컴퓨터 아래에 설치 (복사)
$ ls -la build-mytoolchain/sdk/lib/naoqi/libHelloWorldModule.dylib
-rwxr-xr-x 1 suna staff 75288 1 6 03:25 build-mytoolchain/sdk/lib/naoqi/libHelloWorldModule.dylib
$ cp -p build-mytoolchain/sdk/lib/naoqi/libHelloWorldModule.dylib "$NAOQI_RUNTIME/lib/naoqi/"
autoload.txt 수정
가상 로봇이 만든 모듈을 로드하도록 autoload.txt를 수정합니다.
$ ls -la "$NAOQI_RUNTIME/etc/naoqi/autoload.ini"
-rw-r--r-- 1 suna admin 267 1 6 03:29 /path/to/webots/resources/projects/robots/nao/aldebaran/naoqi-runtime/etc/naoqi/autoload.ini
$ vi "$NAOQI_RUNTIME/etc/naoqi/autoload.ini"
$ tail "$NAOQI_RUNTIME/etc/naoqi/autoload.ini"
framemanager
pythonbridge
videoinput
redballdetection
behaviormanager
memorywatcher
alnavigationinterface
navigation
HelloWorldModule
동작 확인
Webots 시작
작성한 모듈이 로드되어 초기화된 것 같습니다.
ALProxy를 통해 모듈에 연결하여 메소드 실행
$ /usr/bin/python
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from naoqi import ALProxy
>>> hwm = ALProxy("HelloWorldModule", "localhost", 9559)
[INFO ] Starting ALNetwork
[INFO ] NAOqi is listening on 127.0.0.1:54011
>>> hwm.sayHello()
sayHello 메소드 실행 후 Webots 콘솔에 여러가지가 표시되어 예상대로 움직이고 있는 것 같습니다.
감상
Reference
이 문제에 관하여(NAOqi (ver1 계) 용 독자 모듈의 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Suna/items/eb1eee88984a168c6489텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)