はじめに
前回、「NAOqi C++ 開発環境のインストール(OS X 環境)」で、とりあえず make できるところまで確認したのですが、それからどうして良いのか分かりませんでした。
その後、いろいろ試してみて、最低レベルでは何となく把握できたので記録しておきます。
何をやろうかと言うと、PC 側でバーチャルロボット(Broker)に接続する Proxy を作成し、ロボット側のモジュールを使って操作を行う、です。
プロジェクトの作成
雛形の生成
$ cd /path/to/project
$ qibuild init
.qi ディレクトリが作成されます。とりあえず見なくても大丈夫そうなので、内容には踏み込みません。
続けて、以下のコマンドでプロジェクトの雛形を作成します。
$ qisrc create HelloWorld
$ ls -la
total 0
drwxr-xr-x 4 suna staff 136 12 24 02:14 .
drwxr-xr-x 4 suna staff 136 12 24 02:08 ..
drwxr-xr-x 4 suna staff 136 12 24 02:14 .qi
drwxr-xr-x 6 suna staff 204 12 24 02:14 HelloWorld
$ cd HelloWorld
$ ls -la
total 32
drwxr-xr-x 6 suna staff 204 12 24 02:14 .
drwxr-xr-x 4 suna staff 136 12 24 02:14 ..
-rw-r--r-- 1 suna staff 271 12 24 02:14 CMakeLists.txt
-rw-r--r-- 1 suna staff 271 12 24 02:14 main.cpp
-rw-r--r-- 1 suna staff 283 12 24 02:14 qiproject.xml
-rw-r--r-- 1 suna staff 459 12 24 02:14 test.cpp
$ cat main.cpp
/*
* Copyright (c) 2012-2014 Aldebaran Robotics. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the COPYING file.
*/
#include <iostream>
int main()
{
std::cout << "Hello, world" << std::endl;
return 0;
}
ただの Hello World みたいです。
雛形の実行
$ qibuild configure
$ qibuild make
$ build-sys-darwin-x86_64/sdk/bin/HelloWorld
Hello, world
コードの修正
main.cpp の修正
/*
* Copyright (c) 2012-2014 Aldebaran Robotics. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the COPYING file.
*/
#include <iostream>
#include <alcommon/alproxy.h>
int main()
{
std::string ip = "127.0.0.1";
int port = 9559;
AL::ALProxy proxy("ALTextToSpeech", ip, port);
proxy.callVoid("say", std::string("Hello World"));
return 0;
}
CMakeLists.txt の修正
- set 行の追加
- qi_use_lib 行の追加
cmake_minimum_required(VERSION 2.8)
project(HelloWorld)
set(CMAKE_CXX_FLAGS "-stdlib=libstdc++")
find_package(qibuild)
# Create a executable named HelloWorld
# with the source file: main.cpp
qi_create_bin(HelloWorld "main.cpp")
qi_use_lib(HelloWorld ALCOMMON)
# Add a simple test:
enable_testing()
qi_create_test(test_HelloWorld "test.cpp")
configure & make
$ qitoolchain create mytoolchain /path/to/sdk/toolchain.xml
Updating toolchain mytoolchain with feed: /path/to/sdk/toolchain.xml
Adding packages
* (1/1) naoqi-sdk-mac64
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 HelloWorld
-- 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
-- Binary: HelloWorld
-- Binary: test_HelloWorld
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/project/HelloWorld/build-mytoolchain
$ qibuild make -c mytoolchain
Current build worktree: /path/to/project
Using toolchain: mytoolchain
Build type: Debug
* (1/1) Building HelloWorld
Scanning dependencies of target HelloWorld
[ 50%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.o
Linking CXX executable sdk/bin/HelloWorld
[ 50%] Built target HelloWorld
Scanning dependencies of target test_HelloWorld
[100%] Building CXX object CMakeFiles/test_HelloWorld.dir/test.cpp.o
Linking CXX executable sdk/bin/test_HelloWorld
[100%] Built target test_HelloWorld
Choregraphe のバーチャルロボットで実行
Choregraphe を起動し、バーチャルロボットの Port を確認します。
編集 > 設定 > 「バーチャルロボット」タブ
実行1 (失敗)
$ build-mytoolchain/sdk/bin/HelloWorld
dyld: Library not loaded: @executable_path/../lib/libalproxies.dylib
Referenced from: /path/to/project/HelloWorld/build-mytoolchain/sdk/bin/HelloWorld
Reason: image not found
Trace/BPT trap: 5
実行2 (失敗)
実行1 で「dyld: Library not loaded」とか言われているので、DYLD_LIBRARY_PATH を指定してから再実行します。
$ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/path/to/sdk/lib:/path/to/sdk/lib/naoqi
$ build-mytoolchain/sdk/bin/HelloWorld
[INFO ] Starting ALNetwork
[INFO ] NAOqi is listening on 127.0.0.1:54010
libc++abi.dylib: terminating with uncaught exception of type AL::ALNetworkError: ALNetwork::getModuleByName
failed to get module ALTextToSpeech http://127.0.0.1:52716
Abort trap: 6
何やら動き始めてのエラーのようです。
...だいぶ悩んだのですが、解決できませんでした。
一応、Choregraphe のバーチャルロボットへの接続は実績あるみたいなのですけど。
参考: PepperのPython SDKでバーチャルロボットにさわる
Webots for NAO で実行
見た目を Pepper にはできないっぽいですが、試せそうな感じでしたのでインストールしてみました。
実行3 (成功)
$ build-mytoolchain/sdk/bin/HelloWorld
[INFO ] Starting ALNetwork
[INFO ] NAOqi is listening on 127.0.0.1:54011
[INFO ] Stopping ALNetwork
[INFO ] Exit
未解決
- SDK から Choregraphe のバーチャルロボットへの接続
感想
- ただの興味から C++ SDK を試してみましたが、Pepper のプログラミングなら、まずは Choregraphe で頑張るのが正しい道であることを認識しました。はい。