MacでOpenRTM-aistを入れるためのバイナリを作ってみた.
当然ですが,このパッケージやドキュメントで起きた不具合や損失等について,当社と当社の技術者は一切の責任を負いかねます.ご自身の責任でご利用いただける方のみお使いください.
Home Brew
C++版
$ brew tap sugarsweetrobotics/openrtm-aist
$ brew install openrtm-aist
Python版 (C++版に依存)
$ brew tap sugarsweetrobotics/openrtm-aist
$ brew install openrtm-aist-python
環境によっては,~/.bash_profileに
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
という記述が必要
OpenRTP
$ brew tap sugarsweetrobotics/openrtm-aist
$ brew cask install openrtp
ただし,JavaをJDK7にしておいてください.他の環境だとうまく動かなかった.
動作確認や不具合情報はTwitter: @ysugaか,githubのissueにお願いします.
リンク:Github.com
brewを使いたくない人 (過去のアーカイブ)
1.Xcode入れる
これは避けられない.AppStoreからXcodeを入れてください.
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.2-OSX10.9.dmg
RTM1.1.2にアップグレードするときの注意
古いバージョンから新しいOSX版をインストールする場合は,まず/usr/localを掃除する必要がある.特に/usr/local/lib/python2.7/site-packagesのomniORB関連ファイルはすべて消すこと.
古いファイルがあるとバッティングする.
さらに,このバージョンにアップデートすると,Python版OpenRTM-aist, rtctree, rtsprofile, rtshellはインストールし直す必要がある.
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すればいい.
Python版の最新コードは,svnでダウンロードする.以下のような流れになるとおもう.
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
source /Library/Python/2.7/site-packages/rtshell/data/shell_support
pipからも入るらしいが,一時期,何度も失敗したのであまり信用してない.
あと,rtctreeのバグとりは随時進んでるので,その意味でも最新のコードを使ったほうがいい.Macならそれほど苦じゃないからね.
もちろん,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を変更しても無理っぽい.とにかく,外部ネットに繋がっているMacでしかRTMは使えない.
これについては,omniNamesを止めてからRT System Editorを起動する他なさそう.
うまくいくときもある.原因がわかったらメーリスに投げてほしい.
また,無線につなぎ直したりしてIPアドレスが変更するとブロックする.
この場合は,killしまくるしか方法がない.
B. インターフェースが複数あるMacでは,当然のようにcorba.endpointの設定が必要になる.
これもやらなくても上手く行くときは上手く行く.
rtc.confに,
corba.endpoint : localhost:
のような記述が必要になる.他のPCと連携する場合は,endpointを外側のPCと繋がる側のインターフェースのIPアドレスにする必要がある.
ネームサーバーにもエンドポイントを教える必要がある.
こういうのを自動的に,という人は,気持ちはわからない.逆に自動的にやっちゃってることが不自然だと思わないのか・・・
C. GUIはメインスレッドで
tkinterとか,opencvのUSBカメラとか,GUI系のライブラリとか,は,メインスレッドで動いていないと上手く行かない.
つまり,onActivatedでファイルとGUIを開いてー,なんてやるとハマる.
ここはかっこうわるいけど,**Comp.cppのmain関数の中で初期化したりするしか無いし,更新もここでやるようにする.
参考になるコードはここに置いとく.
共通カメラインターフェースのImageViewer
共通カメラインターフェースのWebCamera
もしMacへの移植を考えてるなら,GUIを書くときはJavaの方がいいと思う.というか,僕はもうGUIはJavascript (Dart) で書くけどね.
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をインストールすると最新版が入手しやすくなる.
これはやった方が良い.
One response to “Mac OSX + OpenRTM-aistパッケージ”
[…] 最新版は僕の会社のページに移動させたのでそっちを見て欲しい […]