2012年9月11日火曜日

OMPLのインストール

依存ソフトウェアのインストールが終わったら、ようやく本体のOMPLのインストールを行います。OMPLのサイトでは、OMPLとOMPL.appのソースが公開されており、一読すると、OMPL.appには、OMPL本体が含まれているように読めますが、実際には含まれていないので、OMPLと、OMPL.appのインストールをそれぞれ行います。
また、OMPL本体については、bitbucket.orgに開発版が公開されており、そちらをmercurialを用いるか、上記サイトで"get source"メニューからダウンロードすることで最新版を取得することができます。

OMPLのインストール


OMPLのビルドはCMakeを用いて行われます。ダウンロードしたファイルを展開し、そこにbuild/releasというディレクトリを作成し、

$ cmake-gui ../..

を実行します。"configure"をクリックし、"MSYS Makefile"を指定すると、configureが開始されます。


Boostの設定

開始すると、まず、Boostが見つからないと怒られるので、
"BOOST_INCLUDE_DIR"に、Boostのヘッダファイルがあるディレクトリを指定し、追加で
"BOOST_LIBRARYDIR"という項目を追加し、Boostのライブラリのあるディレクトリを指定します。
そうすると、Boostのファイルが読み込まれます。

GCCXMLの設定

さらにUngrouped Entriesで"GCCXML"が設定されていない場合は、gccxml.exeをフルパスで指定します(d:/local/gccxml/bin/gccxml.exeなど)。

インストール先の設定

そのほか、CMAKE->CMAKE_INSTALL_PREFIXでインストールディレクトリを指定します。

OPENDEの設定

Ungrouped EntriesでOPENDEの設定プログラムode-configが読み込まれていても、OPENDEのヘッダファイルやライブラリファイルの場所は指定されないので、

  • OPENDE->OPENDE_INCLUDE_DIR :OPENDEのヘッダファイルの場所
  • OPENDE->OPENDE_LIBRARY:OPENDEのライブラリファイルlibode.dll.a(フルパス)

を指定します。さらに、OPENDEが倍精度であることを明示するために、CMAKE->CMAKE_CXX_FLAGSとCMAKE_C_FLAGSに"-DdDOUBLE"という文字列を追加します。

以上で準備は終了で、"configure", "generate"を実行して、Makefileを生成します。


Make


build/release ディレクトリで、

$ make update_bindings # Pythonバインディングの生成。かなり時間がかかります。
$ make
$ make install

でインストールが完了します。

OMPL.appのインストール


OMPL.appのインストールも、基本的にはOMPLと同様です。追加でassimpとflann(近似最近傍探索ライブラリ)の項目がありますが、ASSIMP_DIRに、assimpのCMake用設定ファイルのあるディレクトリを指定して、ASSIMP_LIBRARY_DIRSを追加して、ASSIMPのライブラリのディレクトリを指定すればOKです。そして、FLANNについては、システムにインストールされていなければ自動でダウンロードとビルドをしてくれますので、放っておいてかまいません。また、衝突検出ライブラリFCLとPQPも自動でダウンロード、インストールを行ってくれます。実行は、インストールディレクトリや共有ライブラリのディレクトリにパスが通っていることを確認したうえで、

> ompl_app

で起動します。
起動後の画面は下図の通りです。



ロボットのワークスペースとロボットのモデルは、左上のFileメニューから選択します。サンプルがOMPL.appのresourceディレクトリに、*_env.dae, *_robot.daeという名前であります。また、サンプルの設定ファイルが同じディレクトリに*.cfgという名前でありますので、それらを読み込みます。初期状態や目標状態などのパラメータは、ウィンドウ右の"Problem"タブで設定することもできます。
経路計画のアルゴリズムは、ウィンドウ右の"Planner"タブでKPIECEやPRM, RRTなどを選択することができます。そして、左下のSolveボタンで求解が始まります。







2012年9月10日月曜日

下準備(2)

Qtの導入


前の記事でboost, assimpまでインストールしたので、次はQt周りをインストールします。Win32用のQtとしては、Visual Studio用のバイナリと、MinGWをセットにしたバイナリがありますが、すでにMinGWの環境は構築してあるので、ソースからビルドすることにします。2012年9月初旬の時点での最新版は4.8.2ですが、普通にソースがNokiaのサイトで公開されているのは4.8.1なので、そちらを使うことにします。ファイルqt-everywhere-opensource-src-4.8.1.tar.gzを展開すると、qt-everywhere-opensource-src-4.8.1というディレクトリができ、そこに移動します。基本的には、

> configure.exe ; make

でライブラリや各種ツールをビルドするのですが、MINGWでビルドするので、configure.exeのオプションとして、-platform win32-g++-4.6を指定します。また、デフォルトでビルドされるさまざまなツールをすべてビルドしようとすると、cygwinのメモリ不足によるエラーが発生してライブラリを生成できないので、必要最小限のものだけビルドするようにします。今回は、以下のオプションでビルドしました。

-shared
-release
-opensource
-no-dsp
-no-vcproj
-no-qt3support
-no-webkit
-no-phonon
-platform win32-g++-4.6
-nomake demos
-nomake examples
-prefix d:/local/qt/4.8.1

ここで、javascript関係でエラーが発生します。具体的には、src/3rdparty/javascriptcore/JavaScriptCore/runtimeの、

  • JSGlobalObject.h
  • JSStaticScopeObject.h

です。それぞれ、
JSGlobalObject.h 53行目の


using JSVariableObject::JSVariableObjectData;

struct JSGlobalObjectData : public JSVariableObjectData {

を、

struct JSGlobalObjectData : public JSVariableObject::JSVariableObjectData {

と、修正します。

同様に、JSStaticScopeObject.hの28行目の、

using JSVariableObject::JSVariableObjectData;
struct JSStaticScopeObjectData : public JSVariableObjectData {

を、

struct JSStaticScopeObjectData : public JSVariableObject::JSVariableObjectData {

と、修正します。

そして、makeが終了したら、

> make install

で、インストールが完了します。

PyQtのインストール


PyQtは、Riverbankcomputingが供給している、QtのPythonバインディングです。PyQtを使うためには、同じところで供給しているPythonのC/C++バインディングであるSIPをインストールする必要があります。SIPはここから、PyQtはここからそれぞれ開発版のスナップショットをダウンロードして展開します。コマンドプロンプト上で、SIPを展開したディレクトリに移動して、

> python configure.py -p win32-g++

を実行すると、Makefileが作成されます。そして、

> make

を実行すると、各種Pythonソースやヘッダファイル、バイナリが作成されます。そして普通は

> make install 

で、それらのファイルが、pythonのディレクトリにコピーされるはずなのですが、

/bin/sh: -c: line 1: syntax error: unexpected end of file

というメッセージが出て、コピーがされません。これは、MakefileがMinGWのsh.exeを呼び出す仕様になっていることによるエラーだそうで、一旦MinGWのインストールディレクトリにある、msys/1.0/bin/sh.exeの名前を変更して、

> mingw32-make install

と実行することでインストールが成功します。次にPyQtを展開したディレクトリに移動して、

> python configure.py 

を実行すると、Makefileが作成されるので、

> mingw32-make 

でビルドします。Qtの全機能に対してバインディングを作成するので、かなり時間がかかります。ここでもそのままではmake installに失敗するので、sh.exeの名前を変更して

> mingw32-make install
でインストールされます。


PyOpenGLのインストール


PyOpenGLは、PythonからOpenGLにアクセスするためのバインディングです。こちらは、Pythonのsetuptools (easy_install, pipなど)を用いてインストールします。最初に、Pythonのインストールディレクトリの下の、scriptsフォルダにPATHが通っていることを確認してください。setuptoolsのダウンロードページから、Windows用のバイナリをダウンロードして実行すると、easy_installがインストールされます。あとは、PyOpenGLのインストールサイトに書いてある通り、コマンドプロンプト上で、


> easy_install PyOpenGL PyOpenGL-accelerate

と実行することで、インストールが完了します。


Py++のインストール


OMPLでは、Pythonバインディングを作成するために、PythonのC++バインディングであるPy++を用いています。さらに、Py++は、PygccxmlおよびGCCXML(GCCの中間ファイルからXMLファイルを作成するソフト)を利用しています。これらは、OMPLとは独立に開発されているのですが、開発元が供給しているバージョン(pygccxml, Py++)を用いると、OMPLでのPythonバインディングの構築に失敗してしまいます。OMPLでの構築ができるように修正されたものが、sourceforgeのOMPLのサイトにあるので、そちらをインストールすることにします。サイトから、pygccxml, pyplusplus(Py++). gccxmlのソースファイルをダウンロードして、インストールします。


GCCXMLのインストール


最初に、gccxmlを解凍します。 gccxmlはCMakeでビルドするので、解凍してできたディレクトリに移動して、buildディレクトリを作成し、そこに移動して、MinGWシェル上で、

$ cmake-gui ..

と実行します。Makefileは、MSYS Makefileを指定してconfigureを実行します。G++の多くの機能に対してチェックを行うので、かなり時間がかかります。


CMakeグループの、CMAKE_INSTALL_PREFIXに、インストール先のディレクトリを指定します。今回は、d:/local/gccxmlとしました。再度"configure"を実行して、上の方で赤い項目がないことを確認して、"generate"を実行すると、Makefileが作成されるので、

$ make; make install

を実行します。インストールしたディレクトリのbinディレクトリを環境変数PATHに追加します。

Py++のインストール


最初に、pygccxmlを解凍したディレクトリに移動して(コマンドプロンプトでもMINGWシェルでもどちらでも可)、

$ python setup.py install

を実行します。エラーメッセージが出なければOKです。
次に、Py++(pyplusplus)を解凍したディレクトリに移動して、

$ python setup.py install

とすることでPy++がインストールされます。

OpenDE (Open Dynamics Engine)のインストール


OpenDEは、衝突検出・物理計算エンジンの一つです。OMPL.appでは、物理計算エンジンとしてOpenDEを用いることができます。
最新の開発版は、svnでチェックアウトします。

svn co https://opende.svn.sourceforge.net/svnroot/opende/trunk opende-trunk

チェックアウトしてできたディレクトリに移動して、

$ bootstrap

を実行して、configure スクリプトを作成します。ここで、opendeが用いているlibtoolと、MINGWで用いているものとでバージョンの不整合があるためmakeでエラーになります。そこで、

$ aclocal; libtoolize --force; autoheader; autoconf

を実行してから bootstrapを実行します。また、OpenDEのデフォルトの設定では、単精度・静的ライブラリなので、configure スクリプトに以下の引数を与えます。(インストール先はd:/localに設定)

$ configure --enable-double-precision --enable-shared --prefix=/d/local

これでMakefileが出来上がったらmake; make installを実行します。

一応、これで下準備は終了です。


















2012年9月4日火曜日

下準備(1)

OMPL(Open Motion Planning Library)は、ランダムサンプリングに基づくロボットの運動計画アルゴリズムに関するライブラリです。具体的な衝突判定や視覚化要素はユーザが自由に作成・追加できますが、標準のものとして、OMPL.appが存在します。これはPQP, FCL衝突判定ソフトウェアと、PyQtに基づくシンプルなGUIと、いくつかのサンプルを有しています。また、3次元形状のメッシュ形式についてはAssimpライブラリを用いています。またROS内で使用することもできます。


インストールについて

OMPLのWEBサイトにもインストールのページがあり、インストール方法が記載されています。Ubuntu Linuxであれば、リポジトリを追加することでapt-getでパッケージを導入することができます。また、MacOSXでは、MacPorts、Ubuntu以外のLinuxディストロでは、依存ソフトウェアをパッケージ管理ソフトで導入しておくことで、OMPLのソースをMakeすることができます。
一方、Windowsの場合は、OMPLウェブサイトでは、MingwやVisualStudioを用いた導入方法が記載されていますが、結構大変なので、以下に成功した方法の一つ(MinGW32を使用)を記述します。

テスト環境


  • OS : Windows 7 Professional 64bit
  • RAM : 8GB
  • 直接関係ないが、Visual Studio Express 2010 + Microsoft Windows SDK 7.0導入済み


依存ソフトウェア


  • CMake :OMPLは各種プラットフォームで使用させるために、CMakeを用いたビルドシステムを採用しています。CMakeほーむぺーじからWindows版のインストーラをダウンロードして、インストールします。そして、インストールしたフォルダを環境変数PATHに追加しておきます。
  • MinGW (Minimalist GNU for Windows) :MinGWは、WIndows上でGCC(GNU Compiler Collection)を用いたソフトウェア開発を行うためのツール群です。GCCのほかに、アセンブラやリンカーなどが含まれています。また、MSYSという、コマンド群があり、いくつかのUNIX系コマンドを利用することができます。これらをインストールしておきます。
  • Python:OMPLのライブラリは、Pythonからアクセスすることも可能です。また、OMPL.appはPyQtを用いてGUIを構築しているので、Pythonの環境が必要です。また、後述するBoost.Pythonを使用するためには、事前にPythonをインストールしておく必要があります。
  • Boost:BoostはC++言語の拡張ライブラリで、数多くのソフトウェアで利用されています。OMPLでもさまざまな部分でBoostライブラリを利用しています。さらに、Pythonとの併用においては、Boost.Pythonを利用します。
  • Assimp (Open Asset Import Library):3次元形状モデルを扱うためのライブラリです。内部でBoostを用いています。そのため、Boostの後でインストールします。また、DirectX SDKが必要なので、ここからダウンロード、インストールしておきます。
  • GCCXML:OMPLでは、Python Bindingsを生成するために、pygccxmlとPy++を用いていて、その内部では、GCCXMLを利用します。GCCXMLは、C++のソースコードから、GCCの内部表現を経てXML表現を生成するソフトウェアで、そこからpygccxmlを用いてPythonのクラスを作成します。また、Py++を用いてBoost.Pythonライブラリのコードを生成します。
  • PyQt4:PyQt4は、PythonからQt4ライブラリにアクセスするためのPythonクラスです。PyQtのインストールのためには、sip(こちらもC/C++のコードからPythonクラスを作成するモジュール)が必要です。また、当然Qt4も必要です。
  • PyOpenGL:3D描画のためにOpenGL APIにPythonからアクセスするためのモジュールです。

インストール手順


最初に、CMake, MinGW, Pythonはすでにインストールされているものとします。以降ソースファイルはd:\home\srcにコピーされているとします。また、MinGWシェルとコマンドプロンプト上でgcc, CMake, pythonが実行できるものとします。また、Pythonは、d:\local\python2.7.3にインストールされているとします。

Boostの導入

2012年8月時点での最新版は、1.51です。Boostのサイトからソースアーカイブをダウンロードして展開すると、boost_1_51_0というフォルダができます。コマンドプロンプト(MinGWシェルではない)で、

> bootstrap.bat gcc

と実行すると、ビルドプログラムb2.exeが作成されます。このb2.exeを用いてライブラリを作成しますが、このままだとpythonが認識されず、Boost.Pythonが作成されません。そこで、boost_1_51_0に、以下の内容で、user-config.jamというファイルを作成します。

import toolset : using ;
using python : 2.7 : "d:/local/python2.7.3/python" : "d:/local/python2.7.3/include" : "d:/local/python2.7.3/libs" ;

次にビルドを行います。ここでは、d:\local\boost_1_51というフォルダにインストールすることにします。

> b2 toolset=gcc variant=debug,release link=static,shared --prefix=d:/local/boost_1_51 --user-config=user-config.jam build

しばらく待って、

The Boost C++ Libraries were successfully built!

というメッセージが出ればビルド成功です。
これでエラーが出なければ


> b2 toolset=gcc variant=debug,release link=static,shared --prefix=d:/local/boost_1_51 --user-config=user-config.jam install


でd:\local\boost_1_51下にヘッダやライブラリがインストールされます。ここで、lib下に
libboost_python-mgw***.[a,dll]
というファイルができていれば、boost.pythonも正しくbuild, installされていることになります。
もしもなければ、再度user-config.jamの内容やb2.exeのオプションを確認してください。


Assimpのインストール

Assimpのサイトから、開発版をダウンロードします。開発版はSVNを用いて管理されているので、RapidSVNTotoiseSVNを用いて

https://assimp.svn.sourceforge.net/svnroot/assimp/trunk

をチェックアウトします。また、ASSIMPのサイトから直接スナップショットをダウンロードすることもできます。スナップショットを展開したり、svnでチェックアウトしたディレクトリ内にbuildというディレクトリを作成し、MINGW-SHELL上でそのディレクトリに移動します。そこで、

> cmake-gui ..

とすると、CMakeのGUI設定プログラムが起動し、新しいウィンドウが出てきます。ウィンドウの左下の方の"Configure"ボタンをクリックすると、どのようなMakefileを作成するのかを聞かれるので、"MSYS Makefiles"を選択すると、設定処理が開始されます。
下の画像で、上の方が、設定項目と設定状況です。赤くなっているのが、未設定項目の部分です。下の方が、設定のログで、赤い字のところがエラーになっているところです。

設定処理では、Cコンパイラ(MinGWの場合はGCC, G++)の存在を探したり、Boostを探したりして、ここではBoostの検索に失敗しています。BOOSTには、bootstrap+[b2,bjam]ではなく、CMakeでビルドを行うものもあり、CMakeではそのバージョンのBoostを探しますが、今回はbootstrap版のBoostを用いているので、手動でBoostを教えることにします。具体的には[Boost]グループで、


  • Boost_DIR (Boost(CMake版)の設定ファイルの場所):無いので削除
  • BOOST_INCLUDE_DIR:d:/local/boost_1_51/include/boost-1_51 (修正)
  • BOOST_LIBRARY_DIRS:d:/local/boost_1_51/lib (新規追加)

これでエラーはなくなりますが、その他に、

  • ASSIMP_BUILD_STATIC_LIB (静的ライブラリを作成するか): TRUE 
  • CMAKE_INSTALL_PREFIX (どこにファイルを置くか): d:/local/

と設定しました。インストール先については各自の好みで決めましょう。設定内容が決まったら、"Generate"ボタンをクリックして、Makefile一式が出来上がります。あとはCMake-GUIを終了して、MINGW-SHELL上で

> make ; make install

でインストールされます。
d:/local/assimp/lib/libassimp.a, libassimp.dll
d:/local/assimp/lib/cmake
d:/local/assimp/lib/pkgconfig
d:/local/assimp/include

あとのプログラムのインストールのために、CMake用の設定ファイルd:/local/assimp/lib/cmake/assimp-3.0/assimp-config.cmakeを修正します。
40行目あたりの、

set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/")

set( ASSIMP_INLCUDE_DIRS "${ASSIMP_ROOT_DIR}/")



となっているところを、

set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/lib")
set( ASSIMP_INLCUDE_DIRS "${ASSIMP_ROOT_DIR}/include")

とします。
長くなったので、続きは別記事で。