5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NAOqi C++ 開発環境の動作確認

Posted at

はじめに

前回、「NAOqi C++ 開発環境のインストール(OS X 環境)」で、とりあえず make できるところまで確認したのですが、それからどうして良いのか分かりませんでした。

その後、いろいろ試してみて、最低レベルでは何となく把握できたので記録しておきます。

参考: NAOqi Frameworkとは?

何をやろうかと言うと、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 の修正

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 行の追加
CMakeLists.txt
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 で実行

参考: 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

2014122401.png

未解決

  • SDK から Choregraphe のバーチャルロボットへの接続

感想

  • ただの興味から C++ SDK を試してみましたが、Pepper のプログラミングなら、まずは Choregraphe で頑張るのが正しい道であることを認識しました。はい。
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?