NAOqi (ver2 계) 용 독자 모듈의 작성
7189 단어 C++NAOqiChoregraphePepper
소개
NAOqi (ver1 계) 용 독자 모듈의 작성 의 계속입니다.
도구
버전
C++ SDK
naoqi-sdk-2.0.5.3
C++ SDK (cross toolchain)
mac64-atom-pub-v2.0.5.4
파이썬 SDK
pynaoqi-python2.7-2.0.5.3
Choregraphe
2.1.2.17
모듈 만들기
절차는 NAOqi (ver1 계) 용 독자 모듈의 작성과 동일합니다.
약간, 코드를 수정했으므로, 수정 부분만 이하에 씁니다.
코드 수정
helloworld.h
make 했을 때, 이하의 에러가 나왔습니다.
$ qibuild make -c mytoolchain
...
/path/to/sdk/include/boost/signal.hpp:17:4: warning: "Boost.Signals is no
longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable
this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING." [-W#warnings]
# warning "Boost.Signals is no longer being maintained and is now deprecat...
^
...
메시지와 같이 BOOST_SIGNALS_NO_DEPRECATION_WARNING을 정의했습니다.
helloworld.h
$ head helloworld.h
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
#define BOOST_SIGNALS_NO_DEPRECATION_WARNING
#include <boost/shared_ptr.hpp>
#include <alcommon/almodule.h>
...
helloworld.cpp
이 파일에서도 다른 #include 보다 먼저 BOOST_SIGNALS_NO_DEPRECATION_WARNING 가 정의되고 있는 것이 좋을 것 같기 때문에, #include "helloworld.h"(을)를 최초로 이동했습니다.
helloworld.cpp
#include "helloworld.h"
#include <iostream>
#include <alcommon/albroker.h>
#include <alproxies/altexttospeechproxy.h>
...
CMakeLists.txt
make 했을 때, 이하의 에러가 나왔습니다.
$ qibuild make -c mytoolchain
...
Linking CXX shared library sdk/lib/naoqi/libHelloWorldModule.dylib
Undefined symbols for architecture x86_64:
"AL::ALTextToSpeechProxy::say(std::string const&)", referenced from:
HelloWorld::sayHello() in helloworld.cpp.o
"AL::ALTextToSpeechProxy::ALTextToSpeechProxy(boost::shared_ptr<AL::ALBroker>)", referenced from:
HelloWorld::sayHello() in helloworld.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [sdk/lib/naoqi/libHelloWorldModule.dylib] Error 1
make[1]: *** [CMakeFiles/HelloWorldModule.dir/all] Error 2
make: *** [all] Error 2
[ERROR]: BuildFailed Error occurred when building project HelloWorldModule
링크시의 Undefined symbols이므로, 라이브러리 패스에 관한 문제일까, 라고 코드나 환경 변수를 바꾸어 여러가지 시험해 보았습니다만, 최종적으로는 이하의 수정이 되었습니다.
qi_use_lib 행에 ALPROXIES를 추가했습니다. (문서의 샘플 코드에 이런 설명이 있었던 것을 기억했습니다)
CMakeLists.txt
...
qi_use_lib(HelloWorldModule ALCOMMON ALPROXIES)
가상 로봇에 모듈 설치
설치 대상 경로 정보
이번 확인은 Choregraphe의 가상 로봇에서 실시합니다.
export NAOQI_RUNTIME=/path/to/Choregraphe.app/Contents/Resources
모듈 설치(복사) 및 autoload.txt 수정은 이전과 동일합니다.
동작 확인
Choregraphe 시작
로그 뷰어의 표시 레벨을 변경해도 모듈의 로드 상황은 표시되지 않는 것 같습니다.
연결 포트 확인
편집 > 설정 > 가상 로봇(탭)
포트 60736에서 작동 중 번호를 확인하십시오.
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", 60736)
[I] 3343 qi.eventloop: Creating event loop while no qi::Application() is running
[I] 3343 qimessaging.session: Session listener created on tcp://0.0.0.0:0
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://10.168.19.164:60743
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://127.0.0.1:60743
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://10.211.55.2:60743
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://10.37.129.2:60743
>>> hwm.sayHello()
sayHello 메소드 실행 후, 가상 Pepper 군이 「HelloWorld」라고 말했습니다.

Choregraphe의 Python Script 상자에서 실행
그런 다음 Choregraphe에서 작성한 모듈을 사용해보십시오.
Python Script 상자를 배치하고 코드를 작성하고 실행합니다. 위와 마찬가지로 가상 Pepper 군이 말합니다.

감상
Reference
이 문제에 관하여(NAOqi (ver2 계) 용 독자 모듈의 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Suna/items/cf0cbf39ee7b322bb577텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)