MacでOpenRTM-aistを入れるためのバイナリを作ってみた.
1.Xcode入れる
これは避けられない.AppStoreからXcode 5.1を入れてください.
2.XcodeのCommand Line Toolsをインストールする.
ここからインストールできます.Apple Developerの登録が必要になりますが.Gitとか,GCCとか入るから入れてください.
参考:
MavericksでCommand Line Tools for Xcodeをインストールする
3.以下のファイルをダウンロード
http://www.cmake.org/files/v2.8/cmake-2.8.11.2-Darwin64-universal.dmg
http://sugarsweetrobotics.com/pub/Darwin/doxygen/Doxygen-1.8.3.1.dmg
http://sugarsweetrobotics.com/pub/Darwin/pkgconfig/PkgConfig.dmg
http://sugarsweetrobotics.com/pub/Darwin/OpenRTM-aist-C++-1.1.1RELEASE-OSX10.9.dmg
4.がんがんインストール
cmakeはRTCのビルドに必要.インストールの途中でコマンドラインから実行できるよう,インストールしますか?と訪ねられるので,このときは必ずコマンドラインのツールをインストールする.でないと不便.
PkgConfigは,cmakeするのにインストールする必要がある.
Doxygenはおまけだけど,インストールした方が絶対便利.
OpenRTM-aistは,バイナリを/usr/local/にインストールする.Python用のバイナリも入れてくれる.
んで,ホームディレクトリに移動して,.bash_profileというファイルを作成して,これに以下のスクリプトを書く
export RTM_ROOT=/usr/local/include/openrtm-1.1
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
export CMAKE_PREFIX_PATH=/usr/local/lib/openrtm-1.1/cmake:$CMAKE_PREFIX_PATH
すぐに反映させたいときは,source ~/.bash_profileと打つ.
5.ツール入れる
あとは,EclipseをOpenRTM.orgからダウンロードすればいい.
初めてEclipseを実行するときは,Javaのインストールを要求されるので入れる.
Eclipseはコマンドラインから起動しないと,RTM_ROOTの環境変数が適用されないので上手く行かない.
OSX10.9からは,~/.launchd.confを使う.
このファイルを作成して,
export RTM_ROOT=/usr/local/include/openrtm-1.1
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
と書いておけば良い.もちろん再ログインが必要.
6.Python版入れる
Python版は,Python版のソースコードをダウンロードして,sudo python setup.py installすればいい.
svnが入ってなければ,ググって入れてください.たぶんデフォルトで入ってる.
んで,
適当なディレクトリで・・・
svn co http://svn.openrtm.org/OpenRTM-aist-Python/trunk/OpenRTM-aist-Python
cd OpenRTM-aist-Python
python setup.py build
sudo python setup.py install
omniORBpyのバイナリはC++版をインストールした時に入る.バイナリへのPATHは.bash_profileを変更した時に反映されてる.
omniORBが見つからないというエラーになった場合は,omniORBのバイナリとかPythonライブラリを,Pythonの元のライブラリパスに入れてやる.
sudo cp -R /usr/local/lib/python2.7/site-packages/ /Library/Python/2.7/site-packages/
portsを使ってると,もうよくわかんなくなる.Pythonが3つとか入ってるのは面倒すぎます.
7.Java版入れる
Java版はここからダウンロード.
http://sugarsweetrobotics.com/pub/OpenRTM-aist/OpenRTM-aist-Java-1.1RC1.zip
RTM_JAVA_ROOTを展開したディレクトリ内のOpenRTM-aist-1.1.jarファイルをさすように.bash_profile設定する.
実行時やビルド時にclasspathの設定が必要になる.
Java版は,結構,Javaの知識がないと苦しいが,Javaに強い人は山ほどいるので,ここではあんまり説明しないよん.
エラーコードとかググればすぐ出てきます.経験してください.
8.rtshell入れる.Python版は必須.
pyyamlを入れる.
http://pyyaml.orgからソースコードをダウンロードして,sudo python setup.py installでおしまい.
pipやeasy_installから入れるのはおすすめしない.現状でpipとXcodeの相性がよくない.
このあとrtshellを入れる.gitがあるのでそれで入れてくことにしよう.
git clone https://github.com/gbiggs/rtctree.git
cd rtctree; sudo python setup.py install
git clone https://github.com/gbiggs/rtsprofile.git
cd rtsprofile; sudo python setup.py install
git clone https://github.com/gbiggs/rtshell.git
cd rtshell; sudo python setup.py install
ドキュメントをビルドするか?という問いにはyesの方がいいだろう.
んで,.bash_profileに以下のコードを追記.
source /System/Library/Frameworks/Python.framework/Versions/2.7/share/rtshell/shell_support
もちろん,portsが入ってるとよくわからなくなる.
shell_supportというファイルが無いと,rtcwdコマンドが動作しないので注意.この設定は外せない.
git cloneしたディレクトリ内にあるので,それをさすように設定するのも次善の策として知っておくと良い.
9.RTCの作り方
オフィシャルのドキュメントを書いてますんでこちらへ.
http://openrtm.org/openrtm/en/node/5125
10.Mac版でのトラブル
A. ネットワーク系のトラブルが多い.
まず,どのネットワークにも繋がっていない状態だと,localhostすら見つけられないことがある.
この場合,rtm-namingは起動するが,RT System Editorを起動しようとすると,localhostのネームサービスにつなげようとしてブロックされる.
できれば,RTSEの方でタイムアウトとかして欲しかった.
これはcorba.endpointを変更しても無理っぽい.
これについては,omniNamesを止めてからRT System Editorを起動する他なさそう.
うまくいくときもある.原因がわかったらメーリスに投げてほしい.
また,無線につなぎ直したりするとブロックする.
この場合は,killしまくるしか方法がない.
B. インターフェースが複数あるMacでは,当然のようにcorba.endpointの設定が必要になる.
これもやらなくても上手く行くときは上手く行く.
rtc.confに,
corba.endpoint : localhost
のような記述が必要になる.他のPCと連携する場合は,endpointを外側のIPアドレスにする必要がある.
ネームサーバーにもエンドポイントを教える必要がある.
C. GUIはメインスレッドで
tkinterとか,opencvのUSBカメラとか,GUI系のライブラリとか,は,メインスレッドで動いていないと上手く行かない.
つまり,onActivatedでファイルとGUIを開いてー,なんてやるとハマる.
ここはかっこうわるいけど,**Comp.cppのmain関数の中で初期化したりするしか無いし,更新もここでやるようにする.
参考になるコードはここに置いとく.
共通カメラインターフェースのImageViewer
共通カメラインターフェースのWebCamera
D. ccがclangになってるので,厳しい
これはかなり厳しい.いろんなエラーがでるが,問題になるのは,生成されたRTコンポーネントのコード.
ModuleName.cppの最初の部分のヘッダーのインクルード順序を以下のようにする.
#include <rtm/idl/BasicDataTypeSkel.h> << 変更 #include <rtm/idl/ExtendedDataTypesSkel.h> << 変更 #include <rtm/idl/InterfaceDataTypesSkel.h> << 変更 #include <rtm/Manager.h> #include <rtm/DataFlowComponentBase.h> #include <rtm/CorbaPort.h> #include <rtm/DataInPort.h> #include <rtm/DataOutPort.h> |
とにかく,データ型を定義しているヘッダーを先に置く.
もしIDL使って独自コードを置く場合も最初に生成された独自データ型.hを先にインクルードするように変更した方がいい.
上にあるWebCameraなんかも参考になる.
E. idl/CMakeLists.txt
RTCBが生成するこのファイルはエラーがある.
最後の4行を#でコメントアウトしたらなおる.
ただ,RTCBに関しては,EclipseからCheck for UpdatesでRTCBをアップデートするとなおるものもある.
Help > Install new softwareで選択して,「Add」ボタン押して,http://openrtm.org/pub/openrtp/releases/updates/を追加してOpenRTPをインストールすると最新版が入手しやすくなる.
これはやった方が良い.