前書き
初めまして、2015年の5月からロボットクリエイターを名乗らせてもらっています。RYOといいます。
Qiitaの書き方にまだ慣れていないので、その点はご容赦いただければと思います。
今回、記事にしようと思ったのは、Pepperの先輩である、NAOを使って、赤外線通信を実装しようと思ったことから始まります。
ドキュメントを読んで、いろいろ調べているうちに、AldebaranさんのGitHubにたどり着きました。
そこに、C++で書かれたInfraredのコードがあったので試してみようと思い、まずはそれの導入として、今回の記事を書くに至ります。
前提
RYOの開発環境
機種名 : MacBook Pro
OS : Yosemite 10.10.3
プロセッサ名 : Intel Core i5 2.6 GHz
メモリ : 16 GB
グラフィック : Intel Iris 1536MB
その他 : iTerm2
英語力 : 英検三級
注意
Windows,Linuxについては検証しておりません。
この記事を書くにあたって、主に公式ドキュメントの、[C++ SDK Installation]の項目を参考にしています。
※公式ドキュメントには
A - Compiler and IDE
B - Cross-platform build system
という項目が載っていますが、今回IDEやCross-platformは利用しないで、行うので、割愛させてもらいます。
追記(2015/06/09):
また、brewというMacのパッケージ管理マネージャーである、brewを利用しています。
Homebrew
http://brew.sh/index_ja.html
を参考に、インストールしてください。
% ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
でインストールできます。
概要
まずは大まかな流れを書いていこうと思います。
- SDKのダウンロード
- qibuildをインストール
- アプリケーションのビルド
詳細
1. SDKのダウンロード
Ⅰ. Aldebaranの公式サイトからSDKをダウンロードしてきます。
追記(2015/06/04):おそらく、NAOやPepperのヒモ付をしていないとDL出来ません。
僕がDLしてきたのは、naoqi-sdk-2.1.3.3-mac64.tar.gzです。
Windowsの方も、Linuxの方も、C++SDKをDLしてもらえば、大丈夫かと思います。
Ⅱ. DLしてきたファイルを解凍します。
この、解凍して出来たフォルダを任意の場所に移します。
ここで注意していただきたいのが、qibuildの環境を作成する際に、
qibuild init
を行うのですが、階層構造などもまとめて、.qiというフォルダに保存されるようなので、後々移動させる必要がない場所に移してください。
また、パスに日本語名があるとバグの原因になることがあるので、そのようにならない場所がオススメです。
僕は以下の位置におきました。
ex) /Users/ryo/NAOqiSDK/naoqi-sdk-2.1.3.3-mac64
2. qibuildをインストール
Ⅰ.cmake,pythonをインストール
macであれば
brew install cmake
brew install python
でそれぞれインストールできます。
公式ドキュメントには
CMake version 2.8.3 or higher
Python 2.7
となっていますので、
CMake : ver2.8.3~
python : python2.7
をインストールしておいてください。
ちなみに僕がインストールしたものは以下のようになっています。
% python -V
Python 2.7.10
% cmake /V
cmake version 3.2.2
追記(2015/06/09):
Ⅱ.qibuildのインストール
Pythonのパッケージ管理システム、pipを利用して、qibuildをインストールします。
コメントの方にも書きましたが、
pip install qibuild
でインストールすることが出来ます。
Ⅲ.初期設定
NAOqiSDKディレクトリ下に、"workspace"と言う名のディレクトリを作成します。
このディレクトリが作業環境になります。
% pwd
/Users/ryo/NAOqiSDK
% mkdir workspace
% ls
naoqi-sdk-2.1.3.3-mac64 workspace
追記(2015/06/12):
workspaceを作成したら、そのworkspace下で初期化を行います。
qibuild init
% cd workspace/
~/NAOqiSDK/workspace % qibuild init
これを行うと、.qiというフォルダが作成され、その中に、
path.conf qibuild.xml worktree.xml
と言った、ファイルが作成されます。
何か、qibuildを使っていて、不具合がおきてやり直す場合は、.qiというファイルを削除してください。
続いて、エディタの設定を行います。
公式ドキュメントには、QtCreaterを使ったほうが良いみたいなことが書いてあるみたいですが、スルーしていきます。
qibuild config --wizard
上記のコマンドを使うことによって、エディタの設定が行えます。
一覧に表示されるのは、自分の所有しているエディタみたいです。
% qibuild config --wizard
Found CMake: /usr/local/bin/cmake
:: Please choose a generator
1 Unix Makefiles (default)
2 Ninja
3 Xcode
4 CodeBlocks - Ninja
5 CodeBlocks - Unix Makefiles
6 CodeLite - Ninja
7 CodeLite - Unix Makefiles
8 Eclipse CDT4 - Ninja
9 Eclipse CDT4 - Unix Makefiles
10 KDevelop3
11 KDevelop3 - Unix Makefiles
12 Kate - Ninja
13 Kate - Unix Makefiles
14 Sublime Text 2 - Ninja
15 Sublime Text 2 - Unix Makefiles
> 1
:: Please choose an IDE
1 None (default)
2 QtCreator
3 Eclipse CDT
4 Xcode
> 1
今回は、どちらもデフォルトの1にしました。
Ⅳ.ToolChainの作成
NAOqiSDKを用いてビルドする際の関連付けのです。
まずは、以下の通りにコマンドを実行します。
qitoolchain create mytoolchainA ~/NAOqiSDK/naoqi-sdk-2.1.3.3-mac64/toolchain.xml
qitoolchain createとはtoolcahinを作るためのコマンドです。今回はDLしてきたSDK内のtoolcahinを利用するために、mytoolchainAという名前をつけて、クリエイトしました。
mytoolchainAというところは、好きな名前をつけて大丈夫なようです。
% pwd
/Users/ryo/NAOqiSDK
% qitoolchain create mytoolchainA ~/NAOqiSDK/naoqi-sdk-2.1.3.3-mac64/toolchain.xml
Updating toolchain mytoolchainA with feed /Users/ryo/NAOqiSDK/naoqi-sdk-2.1.3.3-mac64/toolchain.xml ...
Adding packages
* (1/1) libnaoqi
Done
次に、いま作成したものを、開発環境で使えるようにします。
ここの説明は公式ドキュメントには載っていないものですが、やったらうまくいったので、多分大丈夫だと思います。
多分大丈夫だと思います。大事なことなので(ry
qibuild add-config -t mytoolchainA mytoolchainB
先ほど、toolchainを作成しましたが、作成しただけでは使えるようになっていません。
なので、コンフィグに追加してあげることで利用可能になります。
mytoolchainBはおそらく、config名みたいなものだと思います。これを実際に使って、ビルドを行っていくので、わかり易い名前をつけておきましょう。
% pwd
/Users/ryo/NAOqiSDK
% qibuild add-config -t mytoolchainA mytoolchainB
*補足:
% pwd
/Users/ryo/NAOqiSDK
% qibuild -h
add-config Add a build configuration
% qibuild add-config -h
usage: qibuild add-config [-t TOOLCHAIN] name
optional arguments:
-t TOOLCHAIN, --toolchain TOOLCHAIN
必要なところだけ、抜き出しましたが、ヘルプは上記のようになっています。
Ⅴ.実際にビルドする
ビルドするには元となるソースが必要なので、SDKに付属する"helloworld"を利用します。
% pwd
/Users/ryo/NAOqiSDK
% cp -r naoqi-sdk-2.1.3.3-mac64/doc/dev/cpp/examples/core/helloworld workspace
helloworldディレクトリに移動します。
% pwd
/Users/ryo/NAOqiSDK
% cd workspace/helloworld
% pwd
/Users/ryo/NAOqiSDK/workspace/helloworld
% tree
.
├── CMakeLists.txt
├── example.html
├── example.rst
├── helloworld.cpp
├── helloworld.h
├── index.html
├── index.rst
├── main.cpp
├── qiproject.xml
└── testhelloworld.cpp
*treeコマンドはbrewでインストールしてあります。
これで、必要なファイルの用意が出来ました。
ここからは実際にビルドを行っていきましょう。
qibuild configure -c mytoolchainB
このコマンドで、toolchainの先ほど作ったコンフィグを読み込んでいます。
% qibuild configure -c mytoolchainB
Current build worktree: /Users/ryo/NAOqiSDK/workspace
Using toolchain: mytoolchainA
* (1/1) Configuring helloworld
-- The C compiler identification is AppleClang 6.1.0.6020053
-- The CXX compiler identification is AppleClang 6.1.0.6020053
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using qibuild 3.8.1
-- Binary: helloworld
-- Binary: testhelloworld
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/ryo/NAOqiSDK/workspace/helloworld/build-mytoolchainB
実行後、ディレクトリの中を見るとbuild-mytoolchainBというディレクトリが作成されます。
最後に、
qibuild make -c mytoolchainB
実行ファイルを作成します。
% qibuild make -c mytoolchainB
Current build worktree: /Users/ryo/NAOqiSDK/workspace
Using toolchain: mytoolchainA
* (1/1) Building helloworld
Scanning dependencies of target helloworld
~中略~
[100%] Built target testhelloworld
これで、実行ファイルが作成されました。
あとは実行するだけです。
% ./helloworld --pip 169.254.158.71
dyld: Library not loaded: libboost_signals.dylib
Referenced from: /Users/ryo/NAOqiSDK/workspace/helloworld/build-mytoolchainB/sdk/bin/./helloworld
Reason: image not found
zsh: trace trap ./helloworld --pip 169.254.158.71
実行しようとした、ライブラリがないぞ!と怒られました。
なので、パスを通してあげます。
% export DYLD_LIBRARY_PATH=DYLD_LIBRARY_PATH:~/NAOqiSDK/naoqi-sdk-2.1.3.3-mac64/lib
これで再度実行します。
% ./helloworld --pip 169.254.158.71
~前略~
Saying hello to the console ...
Hello world
Calling say method of ALTextToSpeech module ...
~後略~
「へるおおるるど」という感じに発音しましたが、一応出来たということでいいでしょう。
後書き
もともとC/C++のディベロッパーだったこともあり、C/C++で開発できるなら!と思ってやっと開発環境が整いました。
もちろん、NAO・Pepperの開発は主にpythonでは有るのですが、他の言語も充実してくると嬉しいですね。
最後まで読んで頂きありがとうございました。
参考資料
- Choregraphe 2.1.3付属の公式ドキュメント
- Aldebaran - GitHub https://github.com/aldebaran