Pepperで動作するバイナリをビルドしたくなり、最新の2.3のクロスコンパイル環境を作ろうとしたのですが、インストールガイドの説明の順序関係が微妙なのとか、手順が最新版のqibuildに追従できていないっぽいとかで、ちょっとハマりました。
今回はとにかくお手軽に qibuild configure; qibuild make
とだけすればモジュールがビルドできちゃうよみたいな環境を作りたかったので、Dockerを利用してあらかじめ実行環境をごっそりイメージ化することにしたのでそのメモ。
まだこの環境でビルドしたものを実機では確認できていないのですが、とりあえずゴールデンウィークの気分転換に。何か見つけたら編集リクエストやプルリクください。
ビルド手順
Cross Toolchainのダウンロードやドキュメントの参照には、Pepper実機(特にこの例の場合は2.3)と紐づけされたAldebaranアカウントが必要です。
ビルドに使うDockerfileは https://github.com/yacchin1205/naoqi-sdk-docker 参照。Cross Toolchainは自分でダウンロードしてきて置いてください方式。
あらかじめDockerがインストールされている環境を用意しておいてください。自分はWindows上でboot2dockerを使用しています。(参考: boot2dockerでIPython Notebook環境構築)
-
Dockerfileをcloneしてくる
$ git clone https://github.com/yacchin1205/naoqi-sdk-docker.git
https://community.aldebaran.com/ja/resources/software から、LinuxのCross Toolchain(自分が試したのは
ctc-linux64-atom-2.3.0.110.zip
)をダウンロードし、1.でcloneしたディレクトリnaoqi-sdk-docker
にコピーする-
ディレクトリ
naoqi-sdk-docker
に移動して、docker build
する$ docker build -t yacchin1205/pepper-buildenv .
※Cross Toolchainのファイル名が2.の例と異なる場合は、
Dockerfile
を適宜書き換えてください
これで、 yacchin1205/pepper-buildenv
というイメージができ、PepperのCross Toolchainがqibuildから使用できる状態になる。qibuildのWork Treeを/rootに設定してあって、Cross Toolchainが設定してあるので、/root以下にプロジェクトのディレクトリをマウントすれば、そのプロジェクトで qibuild configure
とか qibuild make
できる。
使用方法
たとえば、 /vagrant/examples/audiovideocapture/
にあるプロジェクトをビルドする場合は以下のようにする。
$ docker run -v /vagrant/examples/audiovideocapture/:/root/examples/ -it yacchin1205/pepper-buildenv
root@(Container ID):~# cd /root/examples
root@(Container ID):~/examples# qibuild configure
Current build worktree: /root
Using toolchain: atom
* (1/1) Configuring audiovideocapture
-- Using qibuild 3.8
-- Binary: avcapture
-- Configuring done
-- Generating done
-- Build files have been written to: /root/examples/build-atom
root@(Container ID):~/examples# qibuild make
Current build worktree: /root
Using toolchain: atom
* (1/1) Building audiovideocapture
Scanning dependencies of target avcapture
[ 50%] Building CXX object CMakeFiles/avcapture.dir/main.cpp.o
[100%] Building CXX object CMakeFiles/avcapture.dir/avcaptureremote.cpp.o
Linking CXX executable sdk/bin/avcapture
[100%] Built target avcapture
こんな感じで、/vagrant/examples/audiovideocapture/build-atom/sdk/bin/avcapture
にバイナリがビルドされる。
参考
ハマったところのメモ。
- https://cloud.aldebaran-robotics.com/naoqidoc/2-3/dev/cpp/install_guide.html ... C - SDK Installation でqibuildを実行せいと言っているのだが、このqibuildは そのあとの項目 D - qiBuild Installation を読むとはじめてインストールできる。前のバージョン http://doc.aldebaran.com/2-1/dev/cpp/install_guide.html ではC - qiBuildとD - SDKで正しい順序になっているのだが・・・
-
https://community.aldebaran.com/en/forum/c-sdk-and-cmake-error-3732 ... ドキュメントの通りqitoolchainを実行しようとすると、
qitoolchain create mytoolchain /path/to/SDKfolder/naoqi-sdk/toolchain.xml --default
で、--defaultオプションなんてないと怒られる。qibuild 3.8からqibuild add-config
コマンドが必要になっているよう・・・(で、--defaultオプションはこのadd-configコマンドにある・・・)
こんな感じで。
環境構築時、手順書をいったん読んで試行錯誤するのは仕方がないことなのですが、一度ハマって解決したらそのことはすっかり忘れたいのですよね。そんな時にDockerfileで組み立てられるようにしておくと便利かなと。